数学上有一个经典的结论,初等的证明方法可以考虑用三角函数简单证明,在此不再赘述,只扔一个结论:
两条直线斜率分别为 ,它们相互垂直当且仅当 。
那么首先可以考虑通过 两点的坐标确定 ,然后根据这个公式确定 。
设垂线段为 ,代入 点坐标解 。
然后根据 解一个两直线相交,交点的方程:
交点的纵坐标随便代入一个方程即可算出。
#include<cstdio>
int init(){
char c = getchar();
int x = 0, f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
return x * f;
}
void print(int x){
if (x < 0) x = -x, putchar('-');
if (x > 9) print(x / 10);
putchar(x % 10 + '0');
}
int main(){
int T = init();
while (T--) {
double Px, Py, Ux, Uy, Vx, Vy;
scanf("%lf%lf%lf%lf%lf%lf", &Px, &Py, &Ux, &Uy, &Vx, &Vy);
double k2 = (Vy - Uy) / (Vx - Ux);
double k1 = -1 / k2;
double b1 = Py - k1 * Px;
double b2 = Uy - k2 * Ux;
double x = (b2 - b1) / (k1 - k2);
double y = k1 * x + b1;
printf("%.6lf %.6lf\n", x, y);
}
}