三角形ABC,坐标分别为A(x1, y1), B(x2, y2), C(x3, y3)
三角形重心坐标
x = (x1+x2+x3)/3, y = (y1+y2+y3)/3
利用行列式计算三角形面积:
三阶行列式的计算
或者用
S = ((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2.0计算三角形面积
由三角形推广到n边形的重心计算公式
HUD 1115 Lifting the Stone
#include <iostream> #include <cstdio> using namespace std; struct Point { double x, y; }; int main() { int num, n, i; Point p0, p1, p2; double sum_x, sum_y, sum, tmp; scanf("%d", &num); while (num--) { scanf("%d", &n); sum = sum_x = sum_y = 0.0; scanf("%lf%lf", &p0.x, &p0.y); scanf("%lf%lf", &p1.x, &p1.y); for (i=2; i<n; i++) { scanf("%lf%lf", &p2.x, &p2.y); tmp = ((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y))/2.0; sum += tmp; sum_x += ((p0.x+p1.x+p2.x) * tmp); sum_y += ((p0.y+p1.y+p2.y) * tmp); p1.x = p2.x; p1.y = p2.y; } printf("%.2lf %.2lf\n", sum_x/sum/3, sum_y/sum/3); } return 0; }
整理地址: