본문 바로가기
Computation Geography

9. Vector Collinear, Corplaner Check

by SimonLee 2023. 9. 15.

벡터들이 동일선상에 있는지, 동일 평면상에 있는지 확인하는 방법 입니다.

 

1) Vector의 동일 선상에 있는지 확인.

단위 벡터에 k배를 곱했을때, 만들수 있는 좌표이면 동일선상에 있다고 할수 있다.

이런 좌표들을 동차 좌표라고도 한다.

 

단위벡터에서 K배의 곱셈으로 좌표로 만들수 있는 것들은 전부 동일 선상에 있으므로 

K를 없다고 봅니다.

3차원 좌표이니 x, y 대신 a, b를 사용해서 식으로 표현하면 다음과 같이 표현 가능하다.

코드입니다.

public bool Collinear(Vector3f a, Vector3f b)
{
    var v1 = a.x * b.y - a.y * b.x;
    var v2 = a.y * b.z - a.z * b.y;
    var v3 = a.x * b.z - a.z * b.x;
    return v1 == 0 && v2 == 0 && v3 == 0;
}

 

1) Vector가 동일 평면에 있는지 확인.

정사면체의 부피를 구하는 방식으로 벡터가 동일한 평면에 있는지 검사할 수 있습니다.

 

벡터가 동일평면 있는지 알려면 벡터가 몇개가 있어야 할까요 ?

평면을 만들때 필요한 벡터 2개와 동일 평면에 있는지 확인해야할 벡터 1개 총 3개 입니다.

 

기하적으로 보면 벡터 3개의 방향에 따라 면을 구성해보면, 정사면체가 만들어 집니다.

여기서 D 점이 ABC 평면 위에 있으면 AB, AC, AD 벡터는 전부 동일한 평면에 있게 됩니다.

그렇게 되면 사면체의 부피가 0 이 됩니다.

 

AB, AC, AD 벡터를 사용해서 사면체를 구성 한뒤 부피가 0이면 동일한 평면이 되는 것입니다.

 

그러면 정사면체의 부피만 구하면 됩니다.

 

정사면체의 부피를 구하는 공식은

(밑면의 삼각형 * 사면체의 높이 *  (1/3)) 입니다.

외적을 사용해서 부피를 구할 수도 있습니다.

3개의 벡터를 사용하여 사면체의 부피 공식

외적의 성질을 이용하면,

AB 벡터와 AC 벡터를 외적을 한 벡터의 크기는 ABZC 사각형의 넓이와 같습니다.

ABC 삼각형의 넓이를 구하기 위해서 2로 나누어 주었습니다.

 

또한 사각형의 넓이는 AB, AC벡터의 법선벡터 AY의 길이 와 동일 합니다.

 

AD 벡터와 법선벡터 AY와 내적을 하면,

 

AY 벡터에 AD 벡터를 정사형 시킨 벡터의 길이 * AY벡터의 크기의 결과 입니다.

> AD 벡터를 정사형 시킨 벡터의 길이는 사면체의 높이(h) 입니다.

> AY 벡터는 삼각형 ABC의 넓이 입니다.

 

위 내적의 결과을 3으로 나누어주면 정사면체의 부피가 나옵니다.

 

이를 좀 더 자세히 나타내면 다음과 같습니다.

 

코드 입니다.

public bool CoPlaner(Vector3f p1, Vector3f p2, Vector3f p3)
{
    var value = scalerTripleProduct(p1, p2, p3);
    return value == 0;
}

private float scalerTripleProduct(Vector3f v1, Vector3f v2, Vector3f v3)
{
    var cross = Vector3f.CrossProduct3D(v2, v3);
    return Vector3f.DotProduct(v1, cross);
}

'Computation Geography' 카테고리의 다른 글

11. 점과 평면 사이의 거리  (0) 2023.09.19
10. 점과 선 사이의 거리  (0) 2023.09.15
8. Line, Plane간 Angle 구하기  (0) 2023.09.14
7. 두 점(Point)의 교점 구하기  (0) 2023.09.13
6. 면 (Plane)  (0) 2023.09.11