2016-06-16 5 views
2

두 개의 원이 충돌 감지를 작성했습니다. 하지만 제가 정말 원하는 것은 기본 개체 만 보여주는 아래의 이미지처럼, 그 표면의 절반에 다른 물체와 충돌 할 것입니다 : 반 cricle면이 서로 다른 방향에서 다른 원과 충돌합니다 html5 캔버스에서 반원의 충돌을 감지하는 방법은 무엇입니까?

enter image description here

. 어떻게 이것을 시뮬레이션하는 함수를 작성해야합니까? 나는 두 개의 원 감지 순간에 발견 한 무엇

은 다음과 같이이다 :

var dx = circle1.x - circle2.x; 
var dy = circle1.y - circle2.y; 
var distance = Math.sqrt(dx * dx + dy * dy); 

if (distance < circle1.radius + circle2.radius) { 
    // collision detected! 
} 

하지만 어떻게 주요 원의 절반에 대해

을 포함됩니다? 어쨌든 원 표면의 일부만이 충돌에 관여합니까? 수학 만 말하십시오. 원/2 도가 충돌을 감지합니까?

답변

0

충돌을 탐지하는 코드가 정확하다고 가정하면 (테스트하지 않았 음) 어느 쪽이 어느 쪽이 충돌 할 것인지 알기 위해 어느 쪽 원이 더 오른쪽인지 판단하는 것뿐입니다.

이미지의 반원이 circle1 인 것을 고려하십시오.

if (distance < circle1.radius + circle2.radius) { 
    // collision detected! 
    if(circle1.x < circle2.x){ 
     // Circle collided on the right side of the other circle, 
     // which means it's a real collision.. 
    } 
} 
0

반원이 회전 할 수 있습니까? 그렇지 않다면 충돌은 오른쪽에서만 일어나므로 half_circle_center.x_positionhalf_circle_center.x_position + half_circle.radius

+0

사이를 확인해야합니다. 모든 방향으로 이동합니다. 평평한 부분의 충돌은 감지하지 못합니다. – newguy

+0

그러면 더 어렵습니다. 제가 알아낼 수있는 것은 두 개의 가장자리 점 (현재 경우에는 'centerX, centerY + -radius'이지만 수직선이 아닌 경우 까다로워집니다)을 결정하고 회전 각도로 a 모양. 그런 다음 임의의 X, Y 포인트가 반원 내에 있는지 확인할 수 있습니다. –

+0

하지만 충돌은 일반적으로 힘든 작업이므로 단순한 모양을 넘어서는 복잡성이 증가하고 싶다면 관련 라이브러리를 찾아 보시기 바랍니다. 예를 들어, PhaserJS는 훌륭한 물리 엔진을 가지고 있습니다. –

관련 문제