2012-10-08 3 views
2

그래서 안드로이드에서 첫 번째 게임을 만들려고합니다. 것은 내가 작은 움직이는 공을 가지고 있고 나는 그것이 그린 선에서 튀어 나오길 원한다. 그 때문에 공의 x, y도 라인의 한 점의 좌표인지 찾아야합니다. 2D 공간에서 도트와 선의 충돌

는 I 라인

X = A1 + t의 *의 U1

Y = A2 + t의 *를 U2 => (X-A1)/U1 = (Y-A2)

/약 이들 방정식을 구현하기 위해 노력 u2 (점이 줄에 있어야하는 경우 t = t 임)

여기서 x와 y는 im 좌표를 나타내는 좌표이고, dot [a1, a2]는 줄에있는 점이며 u (u1 , u2)는 선의 벡터입니다.

을 heres 번호 :

 public boolean Collided() 
    { 
     float u1 =Math.abs(Math.round(begin_X)-Math.round(end_X)); 
     float u2 =Math.abs(Math.round(begin_Y)-Math.round(end_Y));   
     float t_x =Math.round((elect_X - begin_X)/u1); 
     float t_y =Math.round((elect_Y - begin_Y)/u2); 
     if(t_x==t_y) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     }  
    } 

점 [begin_X, end_X] 및 [begin_Y, end_Y 상기 라인 [elect_X, elect_Y]에서 두 지점 공

의 좌표이다 이론적으로는 작동해야하지만 현실에서는 대부분의 시간 동안 공이 라인을 통과하거나 다른 곳으로 튀어 오르게됩니다.

+0

[begin_x, begin_y] : [end_x, end_y] 및 [elect_x, elect_y] : [previous_elect_x, previous_elect_y]의 두 선분 충돌 검사는 어떻습니까? –

+0

체크 -> http://stackoverflow.com/questions/1073336/circleline-collision-detection – japrescott

+0

이 질문의 제목을 읽을 때 나는 즉시 http://en.wikipedia.org/wiki/The_Dot_and_the_Line을 생각했다. . – cobaltduck

답변

0

코드가 무엇인지 잘 모르지만 이상하게 보입니다. 할 일이 있습니다. 엑스 쿠에 대한 작업 귀하의 데이터의 rdinates, 그리고 y에, 그리고 결국 그들은 평등하고 싶어;

이동 여기 Shortest distance between a point and a line segment을 시도하고 거리 == 0 (같거나 작게 당신의 공의 반경을) 경우 충돌을

0

문제있을 것이다 '는 점 여부를 테스트하고 있다는 사실에있다 당신이 바운스하고자하는 라인을 때리십시오. 적은 양의 모든 프레임에서 점의 위치를 ​​증가시키고 있다고 가정합니다.

도트가 [1,1]에 있고, 선이 [0,0]에서 [5,0]까지이고, 도트의 속도가 초당 1 유닛이고 방향이 [-1, 0]. 더 매끄러운 애니메이션을 위해 프레임 당 시간을 기준으로 증가분을 계산한다고 가정합니다. 무엇이 일어나는

은 다음과 같다 :에

  1. 도트 [1,1] 닷 [0.3,0]
  2. 시험 교차점으로 이동 0,7
  3. 프레임 당
  4. 시간 = = 거짓
  5. --- --- 다음 프레임
  6. 도트 프레임 당 [0.3,0]
  7. 에서 시간 = 0.5 (V이 일반적

거짓 프레임 당 양궁)

  • 시험 교점 [0.2,0]로 이동된다 = 그러므로 검사는이 점의 개별 위치를 검사하기 때문에 교차점이 없었다 말한다.

    마찬가지로 Aki Suihkonen은 마지막 위치 + 현재 위치에 의해 형성된 선과 점을 충돌시키려는 선 간의 선 교차를 테스트하려고 함을 제안합니다.

    java.awt.geom.Line2D.linesIntersect (double X1, double Y2, double X2, double Y2, double X3, double Y3, double X4, double Y4) 이러한 교차점을 쉽게 확인할 수 있습니다.

  • 0

    수학은 정상이지만 코드는 아닙니다.

    genearl line equation y = y1 + a(x - x1)a = (y2 - y1)/(x2 - x1)(x1,y1)(x2,y2) 인 줄이 더 간단합니다. 볼이 점 (bx,by) 사용에있을 때

    라인으로부터의 거리 공을하려면 Math.abs(distance) 충돌을 확인하기 위해 특정 값 (즉 볼 직경) 우는 경우
    double a = (y2 - y1)/(x2 - x1); 
    double distance = (by - y1 - a * (bx - x1)) * Math.cos(Math.atan(a)); 
    

    이제 당신은 비교할 수 있습니다.

    참고 : 비 수직선에서만 작동합니다. 수직선이있는 경우 다음을 사용하십시오.

    double distance = bx - x1; 
    

    행운을 빕니다.