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;
    }
2.삼각형 외심 구하기 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는 SABC 외심의 충분한 조건(벡터 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);
    }
3.삼각형을 구하는 마음은 마음에서 각 변까지의 거리가 반경 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|=caOA+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|/|c/b 그래서 b+cDC=0(a+b+c) OA+b(DB-DA) +c(DC-DA) = (a+b+c) 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.

좋은 웹페이지 즐겨찾기