java大数求三角形外心_JAVA求两直线交点和三角形内外心的方法

一.求两直线交点

class point {

double x;

double y;

public point() {

this.x = 0;

this.y = 0;

}

}

class line {

point a;

point b;

public line() {

this.a = new point();

this.b = new point();

}

//求两直线的交点,斜率相同的话res=u.a

point intersection(line u,line v){

point res = u.a;

double t = ((u.a.x-v.a.x)*(v.b.y-v.a.y)-(u.a.y-v.a.y)*(v.b.x-v.a.x))

/((u.a.x-u.b.x)*(v.b.y-v.a.y)-(u.a.y-u.b.y)*(v.b.x-v.a.x));

res.x += (u.b.x-u.a.x)*t;

res.y += (u.b.y-u.a.y)*t;

return res;

}

二.求三角形外心1. 垂心: 三角形三条边上的高相交于一点.这一点叫做三角形的垂心.

2. 重心: 三角形三条边上的中线交于一点.这一点叫做三角形的重心.

3. 外心: 三角形三边的中垂线交于一点.这一点为三角形外接圆的圆心.

4. 内心三角形三内角平分线交于一点.这一点为三角形内切圆的圆心.

已知圆的3点,先求出3边长,由海伦公式得出面积s=sqrt(p*(p-a)*(p-b)*(p-c)) p=(a+b+c)/2;由三角形面积公式s=1/2*a*b*sin(c)和正弦定理a/sin(a)=b/sin(b)=c/sin(c)=直径(根据相同弦长对应的圆周角相同可证正弦定理)可得直径=a*b*c/2/s。

求圆心坐标。利用:g是⊿abc外心的充要条件是(向量ga+向量gb)·向量ab= (向量gb+向量gc)·向量bc=(向量gc+向量ga)·向量ca=向量0.

这个性质的证明很容易的,只需要想到外心是中垂线交点即可,就可以证明这个性质了,利用向量可以避免求斜率,以及考虑斜率不存在等很多情况。

//三角形外接圆圆心(外心)

point center(point a,point b,point c) {

//加上这个才没有编译器提示未初始化,因为new所以也写了构造方法

line u = new line(),v = new line();

u.a.x=(a.x+b.x)/2;

u.a.y=(a.y+b.y)/2;

u.b.x=u.a.x+(u.a.y-a.y);

u.b.y=u.a.y-(u.a.x-a.x);

v.a.x=(a.x+c.x)/2;

v.a.y=(a.y+c.y)/2;

v.b.x=v.a.x+(v.a.y-a.y);

v.b.y=v.a.y-(v.a.x-a.x);

return intersection(u,v);

}

三.求三角形内心        由于内心到各边距离就是半径r,可以把三角形分成三部分,再根据海伦公式得到半径r=2*s/(a+b+c)。

内切圆心坐标(x,y): 三角形三个顶点的坐标:a(x1,y1),b(x2,y2),c(x3,y3)则圆心为x=(x1*bc+x2*ca+x3*ab)/(ab+bc+ca)、y=(y1*bc+y2*ca+y3*ab)/(ab+bc+ca)。

证明:内心是角平分线的交点,到三边距离相等.

设:在三角形abc中,三顶点的坐标为:a(x1,y1),b(x2,y2),c(x3,y3) bc=a,ca=b,ab=c,内心为m (x,y)则有ama+bmb+cmc=0(三个向量) ,ma=(x1-x,y1-y) ,mb=(x2-x,y2-y) ,mc=(x3-x,y3-y)

则:a(x1-x)+b(x2-x)+c(x3-x)=0,a(y1-y)+b(y2-y)+c(y3-y)=0

∴x=(ax1+bx2+cx3)/(a+b+c),y=(ay1+by2+cy3)/(a+b+c)

∴m((ax1+bx2+cx3)/(a+b+c),(ay1+by2+cy3)/(a+b+c))。

已知o为三角形abc的内心,a,b,c分别是a.b.c边所对边长. 则aoa+bob+coc=0(oa,ob,oc均指向量)

证明:设三角形abc,ad为bc边上的角平分线,内心为o。

|bc|=a,|ac|=b,|ab|=c

aoa+bob+coc

=aoa+b(ab+oa)+c(ac+oa)

=(a+b+c)oa+b(db-da)+c(dc-da)

设bc的方向向量e,则db=e|db|,dc=-e|dc|

又由角平分线定理,|db|/|dc|=c/b,所以bdb+cdc=0

(a+b+c)oa+b(db-da)+c(dc-da)= (a+b+c)oa- b da- c da =aoa+(b+c)od

又因为oa、od反向,用角平分线定理和合比定理:

b/cd=c/bd=(b+c)/(cd+bd)=(b+c)/a, b/cd=oa/od,

所以oa/od=(b+c)/a , 又因为oa、od反向,

故aoa+bob+coc=aoa+(b+c)od =0.

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值