본문 바로가기
Computation Geography

13. 평면과 평면 사이의 교차 선의 방정식 구하기

by SimonLee 2023. 9. 21.

평면과 평면 사이의 교차하는 선의 방정식을 구해봅시다.

 

< 위 그림의 파랑색 선은 평면의 노말벡터 방향입니다.>

 

선의 방정식을 알려면 방향벡터와 점만 알면 됩니다.

 

1) 먼저 방향벡터를 먼저 알아보지요

 

빨강색 선에 포함하는 모든 점들은 평면 A, 평면 B에  둘 다 속합니다.

빨강색 선의 방향벡터도 역시 평면 A, 평면 B 둘 다 이루고 있는 점들의 방향 벡터의 일부 입니다.

 

평면을 이루고 있는 점 2개를 가지고 벡터를 만들면 반드시 평면의 노멀벡터와 수직이기 때문에,

빨강색 선의 방향벡터는 평면A, 평면B의 노멀벡터와 수직 입니다.

두개의 벡터 외적을 시키면, 오른손 법칙에 의하여 두개의 벡터와 수직인 벡터를 얻을 수 있습니다.

 

정리하면 빨강색 선의 방향벡터는

평면A의 노멀벡터와 평면 B의 노멀벡터의 외적을 통해 구할 수 있습니다.

 

2) 이제 라인에 포함되는 점을 구해봅시다.

평면의 방정식은 다음과 같습니다.

Ax + Bx + Cz = D

 

A,B,C는  노멀벡터이고,  x, y, z는 point 입니다.

내적 공식으로 변형 하면 다음과 같습니다.

평면이 두개니깐 다음과 같이 두개의 식이 있습니다.

식 1

빨강색 라인 위에 있는 점 P(x, y, z)는 A, B 평면의 노멀벡터를 선형 조합으로 구할 수가 있습니다.

식 2

식2에 있는 A, B는 상수 입니다.

식 2에 있는 P를 식1 에 대입을 하고 상수 A, B를 구하면 점 P를 알 수 있습니다.

 

다음과 같은 2개의 연립방정식을 정의할 수 있습니다.

 

1식) 에서 A를 제거해서 B를 구하면

 

2식) 에서 B를 제거해서 A를 구하면

 

상수 A, B를 구했으니 아래 식을 통해서 점 P를 구할 수 있고,

식 2

위에서 방향벡터를 구했으니 라인 방정식이 완성이 됩니다.

public bool Intersection(Plane3 planeA, Plane3 planeB, out Line3d line)
{
    var n1 = planeA.GetNormal();
    var n2 = planeB.GetNormal();
    var d1 = planeA.GetD();
    var d2 = planeB.GetD();

    var direction = Vector3f.CrossProduct3D(n1, n2);

    if (direction.Magnitude() == 0)
    {
        line = null;
        return false;
    }

    var n1n2 = Vector3f.DotProduct(n1, n2);
    var n1n2_2 = n1n2 * n1n2;
    var a = (d2 * n1n2 - d1) / (n1n2_2 - 1);
    var b = (d1 * n1n2 - d2) / (n1n2_2 - 1);
    var point = n1 * a + n2 * b;
    line = new Line3d(point, direction, 0);
    return true;
}