1068-烦恼的中学生

描述

 

    很多学生都会找点兼职来赚点外快,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;
} 

  

原文地址:https://www.cnblogs.com/Rosanna/p/3436829.html