JAVA求兩直線交點和三角形表裡心的辦法。本站提示廣大學習愛好者:(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.