【题目描述】 每个人都知道牛顿发现万有引力的故事。自从牛顿发现万有引力后,人们用万有引力理论解决了非常多的问题。不仅如此,我们也知道了每个物体都有自己的重心。 现在,给你三角形三个顶点的坐标,你能计算出三角形的重心吗? 【输入格式】 第一行输入一个正整数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; }转载于:https://www.cnblogs.com/JRX2015U43/p/6533476.html
相关资源:JAVA上百实例源码以及开源项目