2012-02-03 2 views
0

여기 내 게임을 해결하려고하는 문제가 있습니다. 나는 녹색 사각형의 위치와 크기에 대한 해결하기 위해 노력하고있어 enter image description here선과 원의 교차를 포함하는 위젯의 위치를 ​​지정 하시겠습니까?

:

나는이 시나리오를 가지고있다. 원은 화면의 50 %, 40 %이고 반지름은 화면 높이에 비례합니다.

녹색 사각형은 항상 아래쪽에서 10 픽셀 떨어져 있어야합니다. 그 왼쪽 구석도 10 픽셀 떨어져 있어야합니다. 그리고 이미지에서 볼 수 있듯이 오른쪽 위 모퉁이에서 사각형이 원형에 닿을 때까지의 거리는 10 픽셀입니다.

또 다른 제약 조건은 녹색 사각형이 항상 높이 (가로 세로 비율)보다 3 배 넓어야한다는 것입니다.

이러한 제약 조건이 주어지면 녹색 직사각형의 위치와 크기를 어떻게 해결할 수 있습니까?

기본적으로 게임 창에는 다양한 종횡비가있을 수 있으므로 녹색 직사각형은 이러한 상황에서 잘보아야합니다.

코드를 찾는 것이 아니라 코드를 찾는 방법에 대한 아이디어입니다.

감사합니다 당신이 고전 원 - 라인 교차 문제가 무엇을 가지고

+0

이것은 알고리즘 질문보다는 삼각법 문제입니다. 이것을 Math로 옮길 수도 있습니다. – templatetypedef

답변

2

이러한 상황에서해야 할 일은 제약 조건을 수학적으로 설명하고 단순화하는지 확인하는 것입니다. 이는 기하학적 처리에 필수적인 기술입니다.

이미지 영역의 왼쪽 하단이 (0,0)이라고 가정 해 봅시다. 그러면 직사각형의 왼쪽 아래 모서리가 (10,10)에 놓입니다. 우상 구석 (x1, y1)을 호출합니다. 저는 여러분이 이미 원이 어디에 있는지를 계산했다고 가정 할 것입니다. 그 원은 꽤 간단합니다. 우리는 중심 (x2, y2)와 반경 r을 호출 할 것입니다.

첫 번째 제한 : 직사각형은 높이보다 3 배 넓습니다.

x1-10 = 3 * (y1-10) or x1 = 3 * (y1-10) + 10 or x1 = 3*y1 - 20 

두 번째 제약 조건 : x1, y1은 원에서 10 픽셀 떨어져 있습니다. 첫 번째 원보다 10 픽셀 큰 다른 원을 설명하면 그 점이 그 위에 놓입니다.

(x1-x2)^2 + (y1-y2)^2 = (r+10)^2 

1 개를 대체 :

(3*y1 - 20 - x2)^2 + (y1-y2)^2 = (r+10)^2 

R, X2 및 Y2가 알려져 있기 때문이 중대하다; 유일하게 알려지지 않은 왼쪽은 y1입니다. 모든 y1을 모을 수 있는지 봅시다.

(3*y1 + (-20 - x2))^2 + (y1-y2)^2 = (r+10)^2 
3^2*y1^2 + 2*(3*y1*(-20-x2) + (-20-x2)^2 + y1^2 + 2*y1*-y2 + y2^2 = (r+10)^2 
3^2*y1^2 + y1^2 + 6*(-20-x2)*y1 + 2*-y2*y1 + y2^2 = (r+10)^2 
(3^2+1)*y1^2 + (-120 - 6*x2 - 2*y2)*y1 + y2^2 = (r+10)^2 

이 시점에서 이차 방정식과 거의 같습니다.또 하나의 작은 비틀기 :

10 * y1^2 + (-120 - 6*x2 - 2*y2) * y1 + (y2^2 - (r+10)^2) = 0 

마지막 단계는 Quadratic Formula을 적용하는 것입니다.

2 차 방정식에서 가능한 두 가지 대답이 있지만 그 중 하나는 원의 맨 반대쪽에 사각형을 배치합니다. 이 경우를 제거하는 것이 쉬워야합니다.

+0

"첫 번째 원보다 10 픽셀 큰 다른 원을 묘사하면 그 점이 그 위에 놓입니다." 정말? 직사각형의 상단에있는 수평선이 원의 반경과 일치하지 않습니다 ... 아니면 뭔가 빠졌습니까? (나는 당신이 원을 10 픽셀 왼쪽으로 이동시키고 반지름을 증가시키지 않기를 원한다고 생각한다.) – Nemo

+1

@ Nemo, 나는 그 수평 거리가 정말로 여기서 요구 된 것이 아닐 것이라고 생각했다 - 그것은 전체 거리가 교차하는 곡선의 일부. 또한이 문제로 교체되기 전에 문제의 원래 진술을 보았습니다. –

0

. 선상에있는 사각형의 왼쪽 아래 모서리를 알 수 있습니다. 그리고 선의 기울기 (종횡비로부터)를 알 수 있습니다. 교차하는 원은 빨간색 원을 10만큼 왼쪽으로 이동하여 10 픽셀 갭을 줄 수 있습니다. 교차점은 원하는 직사각형의 오른쪽 위 모서리입니다. 그게 아이디어로 충분할거야.

관련 문제