기본 콘텐츠로 건너뛰기

라벨이 Ellipse인 게시물 표시

Ellipse의 Start, End Point 구하기

포맷마다 프리미티브를 정의하는 것이 달라 데이터 교환을 위해서 프리미티브 변환을 해줘야 합니다. 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)$$...

intersect ellipse with line

(1) 일반적인 타원의 방정식 = $\frac{(x - h)^2}{m} + \frac{(y - k)^2}{n} = 1$ (2) 선의 방정식 = $y = sx + t$ (2)의 식을 (1)에 대입하여 풀면 $$ x^2(n+ ms^2) + x(2sm(t-k)-2hn) + ((h^2-m)n + m(t-k)^2) = 0 $$ 이것은 2차 방정식이 된다. 이차 방정식은 근의 공식을 통하여 풀이가 가능한데.. $(n+ ms^2)$를 a로 두고 , $(2sm(t-k)-2hn)$를 b로 두고 $((h^2-m)n + m(t-k)^2$를 c로 두면 x의 값은 아래와 같이 구할 수 있다. 근의 부호 판별($sqrt(b^2 – 4ac)$)을 통하여 교차점이 두개가 있는지 혹은 하나 인지 혹은 교차하지 않는지 판별할 수 있다.