2010-11-23 3 views
1

나는 수영장 게임을 C#/java로 만들려고 노력하고 있습니다.풀/당구 trig

  • start = 백풀 큐 (X, Y)의
  • end 풀 신호 (X, Y)의 = 전면
  • circles 공 (X, Y, R)의 = 목록

그래서 마우스를 움직일 때마다 start, end을 업데이트 한 다음 '교차하는 경우 원 체크'를 반복합니다. 그렇다면 이것이 교차점에서 충돌하면 공이 어떻게 될지 알아 내야합니다 (문제는 바로 해결됩니다).

어떻게하면됩니까? 나는 구글에서 몇 가지 예를 살펴 보았지만, 그들이 벡터와 그 방법으로 내 머리 위로 한 예를 발견 할 수 있었다 ....

나의 첫 생각은 풀 큐의 각도와 원형 중간 점 그리기에서 얻은 것이었다. 동일한 각도로 선을 그 으려하지만 어떤 이유로 그 것이 잘못되었습니다. a

Math.ASin(a/r) 

이 선 사이의 최소 거리가 큐와 대표 : 그것은

public Point GetEnd(Point start, double angle, int len) 
    { 
     double y = start.Y + (len * Math.Sin(angle)); 
     double x = start.X + (len * Math.Cos(angle)); 

     return new Point((int)x, (int)y); 
    } 
+13

이 종류의 물리학은 항상 벡터에 의해 모델링됩니다. 기본 선형 대수학을 배우는 데 약간의 시간을 투자하십시오. 필요한 재료는 그다지 어렵지 않습니다. – Donnie

+0

나는이 단계에서 각도만으로 속도 나 마찰 또는 그 중 어떤 것도 필요로하지 않는다. – Pintac

+0

이 기사는 아마도 도움이 될 것이다. http://www.codeproject.com/KB/game/CSharpSnooker.aspx – Terrance

답변

0

내가 큐 포인트와 볼이 움직 인 방향 사이의 각도 생각 내 GetEnd 기능 수 있습니다 공의 중심, r 공의 반경.

lamda의 경우 a^2 = (Cue.Position+Cue.Direction*Lamda-Ball.Position)^2을 최소화 한 다음 해당 표현의 스퀘어 루트를 계산하여 a을 얻습니다.

하지만 저는 벡터가없는 표현식을 재구성하기에는 너무 게으른 편입니다.

관련 문제