2012-06-09 2 views
4

나는 확률이 낮은 답변을 찾고 있습니다. 속도가 느려서 라인 세그먼트와 원이 충돌했는지를 판단 할 수 있습니다. 자바 스크립트 (캔버스 작업)JavaScript에서 라인과 원 사이의 충돌 감지

아래와 같은 함수는 충돌이 발생하면 true를 반환하고 그렇지 않으면 false를 반환합니다. 아기를 기부 할 수도 있습니다.

function isCollided(lineP1x, lineP1y, lineP2x, lineP2y, circlex, circley, radius) { 

    ... 
} 

like this one 수식을 많이 찾았지만 제 머리 위에 있습니다.

enter image description here 당신이 일반적으로 방정식을 해결하는 방법을 모르는 경우이 기본 개념이다 :

+1

수학을 따르지 않았더라도 응답에 제시된 코드가 있었기 때문에 유용 할 것입니다. –

+4

이것은 고등학교 대수학이 당신의 삶에서 당신을 도울 정확한 순간입니다. –

+0

@Oli Charlesworth : 나는 그렇게 생각했을 것이다. 하지만 나는 첫 번째 줄에서 혼란 스러웠다 : "float a = d.Dot (d)": – Jarrod

답변

5

여기에 몇 가지 수학이 필요합니다. 나는 나머지 생각들을 너에게 맡길 것이다. ;) CD의 길이를 알아내는 것은 그렇게 어렵지 않습니다.

당신이 그 방법은 어떻게 요청하는 경우 : 자바 스크립트에서 enter image description here 찾기 충돌이 가지 복잡하다.

+0

정말 지금까지 저에게 해주신 도움을 진심으로 감사드립니다. 그러나 "각도 ABE를 찾아 각도 DBE 빼기"는 정말 쉽지 않습니다. 저는 수학적으로 기울어지지 않았기 때문에 저는 전에 stackoverflow를 줄 것이라고 생각하는 이유입니다. – Jarrod

+1

좋은 그래픽 남자! @ 자롯드 : 숫자를 빼면 문제가되지 않아야한다. 그래서 문제는 삼각법/벡터와 같을 까? 인터넷에 대한 많은 정보가 있습니다.이 질문에 대해 구체적으로 요약하는 것이 현명 할 것입니다. –

+1

(단순히'Math.atan ((m1 - m2)/(1 + m1 * m2))', 여기서'm'은 기울기 임) –

0

Matt DesLauriers는 https://www.npmjs.com/package/line-circle-collision에이 문제의 Javascript 라이브러리를 게시했습니다. API는 간단합니다 :

var circle = [5, 5], 
    radius = 25, 
    a = [5, 6], 
    b = [10, 10] 

var hit = collide(a, b, circle, radius)