POJ 1673 EXOCENTER OF A TRIANGLE(求三角形的垂心)

2015-01-27 10:18:54 · 作者: · 浏览: 82

?

?

EXOCENTER OF A TRIANGLE

?

题目大意:一个三角形,以它的每一条边为边各画一个正方形,将各正方形的顶点连起来,将连线的中点与三角形的顶点分别相连并延长,延长线交于一点,求交点的坐标。

如图:

\

?

解题思路:其实这个题代码不是很长,就是求三角形的垂心,但关键的问题就是怎么证明这个交点是三角形的垂心。

这就需要作辅助线了,作A点关于K点的对称点A',连接A'D、A'K,如图。

\

证明:

∵AK = A'K DK = GK ∠6 = ∠7

根据(SAS) ∴△AGK≌A'GK

∴∠1 = ∠4

又∵∠1 + ∠2 + ∠3 = 180°

∴∠2 + ∠3 + ∠4 = 180°

又∵∠3 + ∠4 + ∠5

∴∠2 = ∠5

又∵AD = AB AG = AC

根据SAS ∴△ABC≌DAA'

∴∠3 = ∠8

又∵∠BAO + ∠3 = 90°

∴∠BAO + ∠8 = 90°

∴∠9 = 90°

?

同理∠10 = ∠11 = 90°

∴点O为高线交点 为△ABC的垂心

证毕。

?

具体的代码部分就没有什么了

下面是代码:

?

#include 
#include #include #include #include #include #include #include #include #include #include #include #define LL long long //#define LL long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) using namespace std; struct Point { double x, y; } A, B, C; struct Line { Point a, b; } ; Point intersection(Line u, Line v) { Point ret = u.a; double t = ((u.a.x-v.a.x)*(v.a.y-v.b.y) -(u.a.y-v.a.y)*(v.a.x-v.b.x)) /((u.a.x-u.b.x)*(v.a.y-v.b.y) -(u.a.y-u.b.y)*(v.a.x-v.b.x)); ret.x += (u.b.x-u.a.x)*t; ret.y += (u.b.y-u.a.y)*t; return ret; } Point perpencenter(Point a, Point b, Point c) { Line u, v; u.a = c; u.b.x = u.a.x-a.y+b.y; u.b.y = u.a.y+a.x-b.x; v.a = b; v.b.x = v.a.x-a.y+c.y; v.b.y = v.a.y+a.x-c.x; return intersection(u, v); } char s[1000010]; int main() { int T; scanf(%d, &T); while(T--) { scanf(%lf%lf%lf%lf%lf%lf, &A.x, &A.y, &B.x, &B.y, &C.x, &C.y); //printf(%lf %lf %lf %lf %lf %lf , A.x, A.y, B.x, B.y, C.x, C.y); Point ans = perpencenter(A, B, C); printf(%.4lf %.4lf , ans.x, ans.y); } return 0; }

?