三角形垂心

2011060614162487.png

 

给定一个三角形求垂心

跟前一篇求圆心的一样。
因为发现了我之前的做法都比较二,于是乎想把整个模板都改改。
我之前的模板的做法仍就很麻烦
我先一点和该点的对边求点斜式。然后两条直线求交点。
想法简单,但是代码长度比较长,

POJ1673

point orthocenter(point p0,point p1,point p2){
 double a1,b1,a2,b2,c1,c2;
 a1 = p2.x-p1.x; b1=p2.y-p1.y;c1 = 0;
 a2 = p2.x-p0.x; b2=p2.y-p0.y;c2 = (p1.x-p0.x)*a2+(p1.y-p0.y)*b2;
 double d = a1 * b2 - a2 * b1;
  ret.x = p0.x + (c1 * b2 - c2 * b1) / d;
  ret.y = p0.y + (a1 * c2  - a2 * c1) / d;
 return ret;
}
读入三个点p0,p1,p2返回垂心
根据垂直向量点成为0
(O.x-p0.x)*(p2.x-p1.x)+(O.y-p0.y)*(p2.y-p1.y) = 0;  (1)
(O.x-p1.x)*(p2.x-p0.x)+(O.y-p1.y)*(p2.y-p0.y) = 0;  (2)
 
令O.x = x+p0.x;O.y=y+p0.y带入(1)(2)得到
x*(p2.x-p1.x)+y*(p2.y-p1.y) = 0;
x*(p2.x-p0.x)+y*(p2.y-p0.y) = (p2.x-p0.x)*(p1.x-p0.x)+(p2.y-p0.y)*(p1.y-p0.y);
解得(x,y)
O = (x,y)+p0;

 

#include<iostream>
#include<cstdio>

using namespace std;

struct point{
	double x,y;
} p0,p1,p2,ret;
int Test;

point orthocenter(point p0,point p1,point p2){
	double a1,b1,a2,b2,c1,c2;
	a1 = p2.x-p1.x; b1=p2.y-p1.y;c1 = 0;
	a2 = p2.x-p0.x; b2=p2.y-p0.y;c2 = (p1.x-p0.x)*a2+(p1.y-p0.y)*b2;
	double d = a1 * b2 - a2 * b1; 
 	ret.x = p0.x + (c1 * b2 - c2 * b1) / d; 
 	ret.y = p0.y + (a1 * c2  - a2 * c1) / d; 
	return ret;
}
int main(){
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
	cin >> Test;
	for (int ii = 1;ii<=Test;++ii){
		cin>>p0.x>>p0.y>>p1.x>>p1.y>>p2.x>>p2.y;
		ret = orthocenter(p0,p1,p2);
	     printf("%.4lf %.4lf\n",ret.x,ret.y);
	}
	return 0;
}

转载于:https://www.cnblogs.com/LitIce/archive/2011/06/06/2073627.html

关于三角形的重心和垂心及其相关的几何性质如下所述: --- **重心** 三角形的重心是指三条中线交点的位置。每条中线都是连接一个顶点与其对面边中心的线段。 - 重心将每一中线分为两部分,其中靠近顶点的部分是远离顶点部分长度的两倍。 - 对于任意三角形,其重心总是位于内部。 - 如果以直角坐标系中的三点 $(x_1,y_1)$, $(x_2,y_2)$ 和 $(x_3,y_3)$ 构成一个三角形,则该三角形的重心 G 可由下面公式计算得出: $$G = \left(\frac{x_1 + x_2 + x_3}{3},\frac{y_1 + y_2 + y_3}{3}\right)$$ **垂心** 三角形垂心指的是三个高所在直线的交点。高的定义是从一个顶点垂直画到底边或者底边延长线上的一条线段。 - 锐角三角形垂心总是在三角形内部;钝角三角形垂心在外部;直角三角形垂心恰好就是直角所在的那个顶点。 - 若设 H 是 ABC 的垂心,则有 AH⊥BC, BH⊥CA, CH⊥AB 成立。 **定理关联** 欧拉线是一个重要的定理,在任何非等边三角形中,外心 O、重心 G 和垂心 H 总共线,并且 HG=2GO。这条线被称为欧拉线。 此外,九点圆也是一个重要概念,它通过了六个脚点(即三边上的高足)、三个中点以及垂心到各顶点连线的中点,这个圆的圆心正好在线段 GH 上,距离 H 点的距离为 OH 距离的一半。 --- 为了更深入理解这些概念,可以参考以下相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值