|
착한아들 님이 쓰신 글 :
: 우선 답변에 감사드립니다...('')(..)('') 꾸벅
: 제가 궁극적을 알고 싶은것을 말씀드리겠습니다..
:
: RounRect나 Ellipse 명령어로 원을 그릴때 각 좌표를 얻어내야하는데
: 좌표를 얻는방법을 몰라...차라리 삼각함수를 이용해서 그림을 그릴려구했습니다.
: 그런데 삼각함수로 그림 원과 Ellipse로 그린 원들을 비교해보면 정확히 1:1 매치가 안되더군요.
:
: 혹시 각 좌표를 얻을수 있는 방법을 있을까요??
: 그럼 여러 고수님들의 조언을 듣겠습니다.
: 추운 겨울 감기 조심하십시요.
이심률이 0인 타원 즉 원은 삼각함수를 사용할 수 있지만,
일반 타원의 일부를 그릴 때는 삼각함수를 사용하지 않겠지요.
타원의 방정식 표준형(중심이 원점): (x*x)/(a*a) + (y*y)/(b*b) = 1 (a>0,b>0)
(a: '타원의 중심'과 'x축이 타원과 만나는 점' 간의 거리로서 RoundRect 함수의 X3/2,
b: '타원의 중심'과 'y축이 타원과 만나는 점' 간의 거리로서 RoundRect 함수의 Y3/2
)
1. y = ± b/a * sqrt(a*a-x*x) ; (-a<=x<=a)
2. x = ± a/b * sqrt(b*b-y*y) ; (-b<=y<=b)
타원의 중심이 (ox,oy)이면 위 타원을 x축으로 ox, y축으로 oy만큼 이동시킨 것이므로,
점의 좌표는 (ox+x,oy+y).
모니터에서는 달리 조치를 취하지 않으면 y축이 뒤집어져서 위로갈수록 값이 작아진다는 가정하에,
a>=b 일 때는 1번 식을 사용하여 각 모서리의 곡선을 그리는데 x의 범위는 아래와 같음:
좌상 곡선: [-a,0) (y값의 부호: 음수)
우상 곡선: (0,a] (y값의 부호: 음수)
우하곡선: (0,a] (y값의 부호: 양수)
좌하곡선: [-a,0) (y값의 부호: 양수)
a < b 일 때는 2번 식을 사용하여 각 모서리의 곡선을 그리는데 y의 범위는 아래와 같음:
좌상 곡선: [-b,0) (x값의 부호: 음수)
우상 곡선: [-b,0) (x값의 부호: 양수)
우하곡선: (0,b] (x값의 부호: 양수)
좌하곡선: (0,b] (x값의 부호: 음수)
위에서 구한 x와 y값은 실수지만 Canvas에 점을 찍기 위해 정수로 변환하는 과정에서 오차가 발생합니다.
정수로 변환할 때 +0.5f를 해주면 오차를 조금이라도 줄일 수 있습니다.
|