포맷마다 프리미티브를 정의하는 것이 달라 데이터 교환을 위해서 프리미티브 변환을 해줘야 합니다.
Ellipse는 아래와 같이 정의할 수 있습니다.($\alpha$=시작 각도, $\beta$=회전 각도)
위 그림에서 Ellipse상의 점 $A$는 아래 식으로 구할 수 있습니다.
$x^\prime = a*cos(\theta)\\y^\prime = b*sin(\theta)$
위 식은 2D일때의 식이고 그럼 3D일때는 어떻게 식을 구해야 할까요?
$a, b$ 는 각각 $\vec{U}$축, $\vec{V}$축상의 거리이기 때문에 위 식은 아래 식으로 변환할 수 있습니다.
$x^\prime = a*\vec{U}*cos(\theta)\\y^\prime = b*\vec{V}*sin(\theta)$
위 식이 Ellipse의 일반식이 됩니다.
$\vec{U}, \vec{V}$에 축의 벡터를 입력하면 원하는 좌표를 구할 수 있습니다.
예를 들어 $\vec{U}$에 $\vec{X}([1, 0, 0])$을 $\vec{V}$에 $\vec{Y}([0,1,0])$을 대입하면 아래와 같습니다.
$$x^\prime = a*[1_x,0_y,0_z]*cos(\theta)\\y^\prime = b*[0_x,1_y,0_z]*sin(\theta)$$
$\vec{X}$축의 $y,z$ 요소는 0이고, $\vec{Y}$축의 $x,z$ 요소는 0이기 때문에 이것을 풀어보면 첫번째 식과 같게 됩니다.
$\vec{U}$, $\vec{V}$축이 임의의 3D 축이라고 가정해보면
$$x^\prime = a*[u_x,u_y,u_z]*cos(\theta)\\y^\prime = b*[v_x,v_y,v_z]*sin(\theta)$$
월드 좌표 $(x,y,z)$는 아래 식으로 구할 수 있습니다.
$$x = a*u_x*cos(\theta)+b*v_x*sin(\theta)\\y = a*u_y*cos(\theta)+b*v_y*sin(\theta)\\z = a*u_z*cos(\theta)+b*v_z*sin(\theta)$$
댓글
댓글 쓰기