Эврика!
Я нашёл формулы вычисления координат центра тяжести плоской фигуры на основе формулы вычисления площади:
[(X2-X1)/2*(X2Y1-X1Y2)+(X3-X2)/2*(X3Y2-X2Y3)+(X4-X3)/2*(X4Y3-X3Y4)+...+(X{n}-X{n-1})/2*(X{n}Y{n-1}-X{n-1}Y{n})+(Xn-X1)/2*(X1Yn-XnY1)]
Xцт=---------------------------------------------------------------------------------------------------------------------------------------
1.5*[(X2Y1-X1Y2) + (X3Y2-X2Y3) + (X4Y3-X3Y4) +...+ (X{n}Y{n-1}-X{n-1}Y{n}) + (X1Yn-XnY1)]
[(Y2-Y1)/2*(X2Y1-X1Y2)+(Y3-Y2)/2*(X3Y2-X2Y3)+(Y4-Y3)/2*(X4Y3-X3Y4)+...+(Y{n}-Y{n-1})/2*(X{n}Y{n-1}-X{n-1}Y{n})+(Yn-Y1)/2*(X1Yn-XnY1)]
Yцт=---------------------------------------------------------------------------------------------------------------------------------------
1.5*[(X2Y1-X1Y2) + (X3Y2-X2Y3) + (X4Y3-X3Y4) +...+ (X{n}Y{n-1}-X{n-1}Y{n}) + (X1Yn-XnY1)]
Площадь фигуры вычисляется по формуле:
S=0.5[(X2Y1-X1Y2) + (X3Y2-X2Y3) + (X4Y3-X3Y4) +.....+ (X{n}Y{n-1}-X{n-1}Y{n}) + (X1Yn-XnY1)]
Следующий код на моём любимом языке VBA замечательно работает:
'Вычислить площадь по формуле:
'S=0.5[(X2Y1-X1Y2) + (X3Y2-X2Y3) + (X4Y3-X3Y4) +.....+ (X{n}Y{n-1}-X{n-1}Y{n}) + (X1Yn-XnY1)]
'Вычислить координаты центра тяжести по формулам:
' [(X2-X1)/2*(X2Y1-X1Y2)+(X3-X2)/2*(X3Y2-X2Y3)+(X4-X3)/2*(X4Y3-X3Y4)+...+(X{n}-X{n-1})/2*(X{n}Y{n-1}-X{n-1}Y{n})+(Xn-X1)/2*(X1Yn-XnY1)]
'Xцт=---------------------------------------------------------------------------------------------------------------------------------------
' 1.5*[(X2Y1-X1Y2) + (X3Y2-X2Y3) + (X4Y3-X3Y4) +...+ (X{n}Y{n-1}-X{n-1}Y{n}) + (X1Yn-XnY1)]
'
' [(Y2-Y1)/2*(X2Y1-X1Y2)+(Y3-Y2)/2*(X3Y2-X2Y3)+(Y4-Y3)/2*(X4Y3-X3Y4)+...+(Y{n}-Y{n-1})/2*(X{n}Y{n-1}-X{n-1}Y{n})+(Yn-Y1)/2*(X1Yn-XnY1)]
'Yцт=---------------------------------------------------------------------------------------------------------------------------------------
' 1.5*[(X2Y1-X1Y2) + (X3Y2-X2Y3) + (X4Y3-X3Y4) +...+ (X{n}Y{n-1}-X{n-1}Y{n}) + (X1Yn-XnY1)]
'Коллекция colТочкиКонтура состоит из точек n+1, т.е. замыкается начальной точкой
dblСуммаX = 0: dblСуммаY = 0
For intНомТочки = 1 To intКолвоТочек - 1
vТочка1 = colТочкиКонтура(intНомТочки)
vТочка2 = colТочкиКонтура(intНомТочки + 1)
dblСлагаемое = vТочка2(0) * vТочка1(1) - vТочка1(0) * vТочка2(1)
dblПлощадь = dblПлощадь + dblСлагаемое
dblСуммаX = dblСуммаX + (vТочка1(0) + vТочка2(0)) / 2 * dblСлагаемое
dblСуммаY = dblСуммаY + (vТочка1(1) + vТочка2(1)) / 2 * dblСлагаемое
Next intНомТочки
dblX = dblСуммаX / (1.5 * dblПлощадь)
dblY = dblСуммаY / (1.5 * dblПлощадь)
dblПлощадь = dblПлощадь / 2
TextBox2_Площадь = CStr(dblПлощадь)
TextBox3_Xцт = CStr(dblX)
TextBox4_Yцт = CStr(dblY)
MsgBox "Площадь контура = " & dblПлощадь & vbLf & vbLf & _
"X ц.т.=" & dblX & vbLf & vbLf & _
"Y ц.т.=" & dblY, vbInformation, strНазваниеПрограммы
Проверьте сами.
Теперь осталось понять как вычислять объём трёхмерной фигуры и координаты её центра тяжести.
Помогайте!