描述
很多学生都会找点兼职来赚点外快,Alfred也不例外,他找的兼职是家教。好了,现在Alfred的工作就是辅导一个高中生的数学。
这一天,这位高中生叫Alfred帮忙做一下作业:在二维平面内给出一个三角形的三个顶点坐标,现在的任务是求出这个三角形的垂心,也就是三角形的三条高线所在直线的交点。
当然,Alfred的数学是不错的,对于这么简单的问题,Alfred只用了半分钟就解决掉了,正当Alfred得意的时候,这位高中生却毫不吃惊地说:我们的作业一共有100条呢! Alfred听见了之后不禁倒抽了一口凉气,现在的中学生真命苦啊。
所以,打抱不平的Alfred决定要帮这位高中生的忙:利用计算机程序来批量解决这个问题,但是Alfred苦思数日却没有想出来解决办法,你们能帮他这个忙吗?
输入
第一行是一个整数C(C<=100),表示有C组测试数据,每组数据三行,每行两个浮点数分别表示三角形某个顶点的x,y坐标。所有坐标的绝对值<10000。输入保证三点不共线。
输出
对于每组输入数据,输出两个浮点数xh, yh表示所给三角形垂心的纵横坐标,保留三位小数(四舍五入)。
样例输入
3
-10 0
0 10
10 0
-10 0
10 0
0 17.321
2 10
4 -5
20 6
样例输出
0.000 10.000
0.000 5.774
6.031 4.137
#include<iostream> using namespace std; double paichu(double m) { if((m<=0.001)&&(m>=-0.001)) return 0; else return m; } int main() { //freopen("a.txt","r",stdin); int c; double x1,y1,x2,y2,x3,y3,x,y; cin>>c; while(c--) { cin>>x1>>y1>>x2>>y2>>x3>>y3; x=-(x1*x2*y1-x1*x3*y1-x1*x2*y2+x2*x3*y2+y1*y1*y2-y1*y2*y2+x1*x3*y3-x2*x3*y3-y1*y1*y3+y2*y2*y3+y1*y3*y3-y2*y3*y3)/(-x2*y1+x3*y1+x1*y2-x3*y2-x1*y3+x2*y3); y=-(x1*x1*x2-x1*x2*x2-x1*x1*x3+x2*x2*x3+x1*x3*x3-x2*x3*x3+x1*y1*y2-x2*y1*y2-x1*y1*y3+x3*y1*y3+x2*y2*y3-x3*y2*y3)/(x2*y1-x3*y1-x1*y2+x3*y2+x1*y3-x2*y3); x=paichu(x); y=paichu(y); printf("%.3f %.3f ",x,y); } return 0; }