<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.E-MailFormatvorlage17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US>I recently asked for assistance for the calculation of the center of mass of a triangle mesh. I found some information on the net in the meantime, but still need assistance. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>As far as I understood, I am looking for the centroid being located at the surface of my 3D mesh. In 2004 there was a similar discussion, but I am not sure whether it will fix my problem.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>Do you mean the center of mass of the object whose boundary is the surface<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>you have triangulated? I am not sure what the centroid of a _surface_ would<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>be, unless you are thinking of a mass distribution concentrated on the<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>surface.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>To compute the center of mass of the volume, you could use the fact that the<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>volume integral can be written as a surface integral, and the surface<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>integral written as a line integral, and the line integral evaluated as a<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>difference. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>For example for the x-coordinate of the center of mass, you want to<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>integrate x over the volume, ie the form x dx dy dz, and divide the result<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>by the volume. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>To get the numerator, you could instead integrate x^2/2 dy dz over the<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>surface, because d(x^2/2 dy dz) = x dx dy dz, and to integrate d(something)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>over a set V is the same as integrating 'something' over the boundary of V. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>Now use your triangulation and view this surface integral as a sum over<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>triangles of the integrals over each triangle. If your surface is<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>polyhedral, the triangles are flat and lie in an affine plane described by a<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>linear equation, say ax + by + cz = d. If a = 0 then dy dz = 0 in the plane<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>so this triangle contributes 0 to the sum; otherwise you can write x = py +<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>qz + r (p = -b/a, q = -c/a, r = d/a) and you need to integrate (py + qz +<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>r)^2/2 dy dz over the triangle. This is the same as integrating (py + qz +<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>r)^3/(3*2*p) dz over the oriented edges of the triangle. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>Now use the same argument to lower the dimension again: each edge lies in a<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>line described by another linear equation relating y and z; if the<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>coefficient of y is zero then dz = 0 on this line and the edge integral is<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>0, otherwise y = mz + n say and the edge integral is the integral of<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>(p(mz+n) + qz + r)^3/(3*2*p) = ((pm+q)z + pn + r)^3/(3*2*p) over the<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>interval from z0 (the z coordinate of the start of the edge) to z1 (the z<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>coordinate of the terminal point of the edge). <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>This integral is ((pm+q)z + pn + r)^4/(4*3*2*p*(pm+q)) evaluated from z1 to<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>z0, from calculus. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>So for each triangle compute p,q,r; then for each edge compute m,n; then<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>accumulate the difference of the 4th degree polynomial above across<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>endpoints. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>You get the numerator for the y and z coordinates of the center of mass<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>similarly. You could just permute coordinates and use the above verbatim but<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>perhaps it's more efficient to use d(yx dy dz) = y dx dy dz and follow the<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>above recipe with appropriate changes, since you use the same data<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>p,q,r,m,n, z0, z1 then.&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>The denominator is the volume, and you can follow the same steps (and do the<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>computation simultaneously) with the form dx dy dz. You integrate x dy dz<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>over the boundary, view it as a sum over triangles, get p, q, r, the for<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>each oriented edge get m,n and evaluate the resulting 3rd degree polynomial<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>over the start and end z coordinates of the edge.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>If you mean the center of mass of a uniform mass distribution concentrated<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>on the surface, that would be the sum over triangles T of<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>area(T)*centroid(T) divided by the total surface area, ie the sum over T of<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>area(T). [This is different from the center of mass of the volume enclosed,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>for example for the tetrahedron whose vertices are (0,0,0), (1,0,0),<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>(0,1,0), (0,0,1).]&nbsp;&nbsp; <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE'>Reid Huntsinger<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>With kind regards, Peter.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div></body></html>