首页 > 技术文章 > 重心在哪里

JRX2015U43 2016-12-08 06:27 原文

【题目描述】
每个人都知道牛顿发现万有引力的故事。自从牛顿发现万有引力后,人们用万有引力理论解决了非常多的问题。不仅如此,我们也知道了每个物体都有自己的重心。
现在,给你三角形三个顶点的坐标,你能计算出三角形的重心吗?
【输入格式】
第一行输入一个正整数n,表示测试数据的个数。
接下来n行,每行包含6个数字x1,y1,x2,y2,x3,y3,表示三角形三个顶点的坐标。
【输出格式】
对于每组输入,输出重心的坐标,结果保留1位小数。
【样例输入】
2
1.0 2.0 3.0 4.0 5.0 2.0
1.0 1.0 4.0 1.0 1.0 5.0
【样例输出】
3.0 2.7
2.0 2.3
【分析】
三角形三边中线的交点叫做三角形的重心。一种明显的方法就是求出三条边的中点,然后分别求一个顶点和一个中点所在直线的解析式,最后联列三个解析式即可。但是这样太麻烦了。
其实对于重心是有公式的。
若三角形ABC的重心为G,点P为其内部任意一点,则:
3PG^2=(AP^2+BP^2+CP^2)-1/3(AB^2+BC^2+CA^2)
设三点A(x1.y1)B(x2,y2)C(x3,y3),重心G(xm,ym)
考虑xm:
任取两点(不妨设为A和B),则重心在以AB为底的中线上。
因为AB中点横坐标为(x1+x2)/2,重心在中线距AB中点1/3处
故重心横坐标:
xm=1/3*(x3-(x1+x2)/2)+(x1+x2)/2
=(x1+x2+x3)/3
同理ym=(y1+y2+y3)/3
这里写图片描述

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
  double x1,x2,x3,y1,y2,y3;
  int t;
  cin>>t;
  while (t) {
    cin>>x1>>y1>>x2>>y2>>x3>>y3;
    printf("%0.1f %0.1f\n",(x1+x2+x3)/3,(y1+y2+y3)/3);
    t--;
  }
  return 0;
}

推荐阅读