Plane을 만들수 있는 방법은 다음과 같다.
1> Point 3개로 이루어진 면
2> Point 1개와 Line 2개
3> Line 2개
Line 을 만들때 Point 2개가 필요하므로, Point 1개가 추가로 더 필요하다.
면을 기하적으로 표현하면 아래와 같다.
Plane 방정식 다음과 같다.
- P, Q는 Plane에 포함된 서로 다른 Point.
- n은 P, Q와 수직인 노멀 벡터
평면의 방정식을 좌표를 넣어서 풀어보면
ax + by + cz = d 형태의 식으로 나타낼 수 있습니다.
- a, b, c 는 normal vector(n)의 구성 요소 입니다.
- d의 상수값은 normal vector(n)과 point (q)의 내적으로 이루어짐을 알 수 있습니다.
코드에서는 Plane을 내부적으로 저장할때는 normal vector와 d 값을 저장합니다.
assignment 1>
점 q(1, 1, 1)을 통과하고 평면 x + 2y + 4z = 4에 평행한 평면에 대한 방정식을 구합니다.
public class Plane
{
private Vector3f normal;
private float d;
public Plane()
{
d = 0;
normal = Vector3f.zero;
}
public Plane(Vector3f normal, float constant)
{
this.normal = normal;
this.d = constant;
}
public Plane(Point3d p1, Point3d p2, Point3d p3)
{
var v12 = p2 - p1;
var v13 = p3 - p1;
this.normal = Vector3f.CrossProduct3D(v12, v13);
this.d = Vector3f.DotProduct(this.normal, p3);
}
}
'Computation Geography' 카테고리의 다른 글
8. Line, Plane간 Angle 구하기 (0) | 2023.09.14 |
---|---|
7. 두 점(Point)의 교점 구하기 (0) | 2023.09.13 |
5. 선 (Line), 선과 선의 교차점 체크하기 (0) | 2023.09.09 |
4. 벡터의 Orientation (2) | 2023.09.09 |
1. 벡터의 기본 (덧셈, 뺄셈, Magnitude, Normalize) (0) | 2023.09.02 |