2011-03-11 8 views
1

2D 형상 데이터 용 변환기를 쓰고 있습니다. 변환해야하는 요소 중 하나는 호입니다. 소스 시스템에서 원호는 두 개의 축으로 정렬 된 사각형으로 설명됩니다. 첫 번째 사각형은 호가 일부인 원의 테두리 상자입니다. 두 번째 사각형은 호 자체의 테두리 상자입니다. 제약 조건은 호의 경계 상자가 원의 경계 상자의 두 가장자리를 교차해야한다는 것입니다. 각 직사각형의 왼쪽 상단과 오른쪽 하단 포인트의 좌표를 알고 있습니다.원과 축 정렬 된 직사각형 사이의 교차

대상 시스템은 다음과 같이 호를 설명합니다. 직사각형은 호가 일부인 원 주위의 경계 상자입니다. 지금까지는 위와 같습니다. 그런 다음 호의 시작점과 끝점을 지정하는 두 점이 있습니다. 두 지점 모두 정확히 원의 "가장자리"에 있어야합니다.

질문 : 아크의 시작점과 끝점을 쉽게 계산할 수있는 방법이 있습니까? 나는 이미 this question을 보았다. 그러나 그것은 정말로 복잡해 보인다.

내가 원 호의 BoundingBox의 가장자리의 교차점을 계산해야합니다 것 : 아마도

내 생각을 지금까지 ...이 작업을 수행 할 수있는 쉬운 방법이있다. 위의 제한 사항으로 인해 두 가지 경우가 가능합니다. 한 모서리 만이 원과 교차하거나 두 모서리가 원과 교차합니다. 또한 다른 모든 모서리는 항상 원 밖에 있습니다.

업데이트 : 시작과 끝 지점이 두 부분으로 원을 자릅니다. 두 부분 중 아크로 그리는 부분은 시작 및 끝 지점의 순서에 따라 결정됩니다. 호는 항상 시작 지점에서 끝 지점까지 시계 반대 방향으로 그려집니다.

+0

"하나의 가장자리 만 원과 교차합니다"라는 경우는 어느 것입니까? –

+0

또한 원의 경계 상자는 사각형입니다. 그렇지 않습니까? (아마도 나는 중요한 것을 놓치고 있습니다!) –

+0

@belisarius : 당신 말이 맞습니다. 원의 경계 상자는 사각형입니다. 그러나 두 번째 경계 상자는 대부분의 경우 사각형이 될 수 있습니다. "하나의 가장자리 만 원과 교차하는 경우"는 가장자리가 원과 두 번 교차 할 때입니다. 호 끝점은 모두 동일한 x 또는 y 좌표를 갖습니다. – McNumber

답변

1

top, left, bottomright을 호출하십시오. 이에서

centre.x = (left + right)/2 
centre.y = (top + bottom)/2 
radius = (right - left)/2 

우리가 원 주변의 모든 점에 만족해야 방정식을 쓸 수 있습니다 : 중심과 반지름은 있습니다

(x - centre.x) * (x - centre.x) + (y - centre.y) * (y - centre.y) = radius * radius 

내부 상자가 당신에게 x의 가능한 값을 제공 좌표 및 y. 한 번에 하나씩 대체하고 표준으로 해결하십시오 quadratic equation. 실제 솔루션이 있고 해당 지점이 내부 상자의 범위 내에 있으면 포인트입니다. 원본 데이터의 제약 조건을 감안할 때, 두 가지 점을 발견해야합니다.

+0

고마워, 그게 좋은 해결책이야. 나는 이미 그것을 구현했다. 현재 사소한 문제로 싸우고 있지만 곧 해결해야합니다. – McNumber

관련 문제