2014-11-20 2 views
1

그래서 수식 기본적으로 : XD = X2-X1 에 버스 정류장 = Y2-Y1 거리 = SQRT (XD * XD + 야드 * 야드)2D 공간에서 2 점 사이의 거리를 계산 하시겠습니까?

그러나 반드시 공식은 무엇인가인지에 따라 다를 수 있습니다 다른 물체의 위, 아래, 왼쪽 또는 오른쪽?

화면 중간에 스프라이트가 있고 어딘가 아래에 적이 있다면 "x2-x1"을 변경해야합니다 (플레이어 스프라이트가 x1, 적 x2). 적이 대신 위에 있다면 주위에?

+1

몇 가지 간단한 예를 통해 작업하십시오. 제곱 된 용지를 사용하면 쉽게 이해할 수 있습니다. –

+0

'정상 크기의'숫자에는 차이가 없겠지만 수학 라이브러리 함수 hypot를 사용하는 습관에 빠질 가치가 있다고 생각합니다. 대신 hypot (x2-x1, y2-y1)를 사용하십시오. – dmuir

답변

4

위의 설명에서의 거리는 항상 양수 값입니다. 실수의 제곱의 합은 항상 양수이고, 양수의 제곱근도 항상 양수입니다. 따라서 xd = x2-x1 또는 xd = x1-x2을 정의하는지 여부는 중요하지 않습니다. 그들은 단지 그들의 기호에 따라 다르므로 둘 다 동일한 절대 값을가집니다. 즉, 둘 다 동일한 값으로 정사각형을 의미합니다.

그래서 여기에는 특별한 사례가 없습니다. 거리 측정 공식은 귀하가 제기 한 모든 우려 사항을 수용합니다.

+0

아, 고마워. 그건 의미가 있습니다. – StallMar

0

예, 당신이 옳습니다. 제 경우에는 2D에서 두 점 사이의 거리를 계산해야합니다. 나는 x1을 스톰에, x2를 침입자에게 X 축에, y1을 침입자로, y2를 스웜의 Y 축을 따라 배치했습니다. d = sqrt (swarm (de, 1) - (intruderX)).^2 + (swarm (de, 2) -intruderY).^2); [거리가 정확하게 계산되지 않아 침입자가 어떤 덩어리 입자의 원 안에 들어 왔을 때 탐지해야합니다. [1], 때때로 침입자가 원 안에 들어 오지만 탐지되지 않습니다. 이것은 내 문제입니다. 내 문제를 해결하는 사람은 누구에게나 매우 감사 할 것입니다.^2 + (swarm (de, 2) -intruderY).^2);for de = 1 : Ndrones
dd = sqrt ((swarm (de, 1) - (침입자 X)). if (d < = rad) % 침입자가 감지되었습니다. x = 침입자 X;
y = 침입자 Y; 제목 ('침입자 감지 됨'); 텍스트 (x, y + 5, sprintf ('침입자')); 텍스트 (500,900, sprintf ('반복 : % .2f', iter)); 플롯 (swarm (:, 1), swarm (:, 2)); for i = 1 : Ndrones swarm (:, 9) = 100; 최소 계산을 다시 시작하십시오. end return; 단부 단부 % 드 루프 의 단부 [1] : http://i.stack.imgur.com/SBP27.png

+1

안녕하세요 루크 칸, 그리고 스택 오버플로에 오신 것을 환영합니다. 당신의 대답은 상당히 철저하지만 읽는 것은 매우 어렵습니다. 더 쉽게 읽을 수 있도록 포맷 할 수 있습니까? 코드 스 니펫을 분리하고 마크 다운을 사용하여 대답의 다른 부분을 명확하게 할 수 있어야합니다. –

0

Math.Sqrt (Math.Pow (a.X b.X-2) + Math.Pow (a.Y b.Y-2));

시도해보십시오. 그것은 작동해야합니다!

관련 문제