2011-10-19 2 views
4

시계 반대 방향으로 회전하는 이미지가 있습니다. 그 동안 또는 벽에 닿을 때마다 임의의 방향으로 움직이기를 원합니다. 문제는 내가 할 수 없다는 것입니다.이 문제에 대해 저를 도우십시오.내 이미지를 임의의 방향으로 이동시키는 방법은 무엇입니까?

private double x; 
private double y; 
private double speed; 

public void move(long dt) 
{ 
    double dt_s = dt/1e9; 
    double dx = speed * dt_s; 
    double dy = speed * dt_s; 

    final double right_border = 100; 
    final double up_border = 100; 
    final double down_border = 0.0; 
    final double left_border = 0.0; 


    x += dx; 

    if (x >= right_border) 
    { 
     x = right_border; 
     if (y >= down_border) 
     {    
    y += dy; 
     } 

    } 
    if (y > up_border) 
    { 
     y = up_border; 
     if (x >= left_border) 
     { 
      speed *= -1; 
     } 

    } 
    if (x <= left_border) 
    { 
     x = left_border; 
     if (y <= up_border) 
     { 
      y += dy; 
     } 

    } 
    if (y < down_border) 
    { 
     y = down_border; 
     if (x <= right_border) 
     { 
      speed *= -1; 
     } 

    } 

} 
+0

당신은 임의의 방향을 원하십니까, 아니면 테두리에서 "튀어 오게"하시겠습니까? – user995048

+0

임의의 방향입니다. – jinHo

+0

라디안 단위의 방향을 지정하고 삼각 함수를 사용하여 델타 x 및 델타 y를 계산하여 주어진 거리만큼 이동시킵니다. –

답변

2

먼저 방향이없는 수업 문제를 해결해야합니다. 속도는 있지만 북쪽 방향은 45도 (x와 y는 같은 값)로 고정되어 있습니다. 클래스에

추가 방향은 다음과 같이 이제

... 
private double speed; 
private double angle; // in radians - makes math easier 

public void move(long dt) { 
    ... 
    double dx = speed * dt_s * Math.sin(angle); 
    double dy = speed * dt_s * Math.cos(angle); 
    ... 

은 임의의 방향으로 머리 :

myObject.setAngle(Math.PI * 2 * Math.random()); // Math.PI * 2 = 360 degrees 

벽을 치는 것은, 당신의 각도에 각도를 제한해야 할 경우 away 당신이 타격을 가하는 벽에서. 나는 당신에게 그것을 맡길 것이지만, 그것은 형태를 취할 것입니다 :

myObject.setAngle(minAngle + ((maxAngle - minAngle) * Math.random())); 
+0

코드에서 "myObject"란 무엇입니까? – jinHo

+0

농담 해? 그것은 당신의 클래스의 인스턴스입니다! 당신은 당신의 클래스의 이름이 무엇인지 말하지 않았기 때문에, 나는 그것을 단지 "myObject"라고 불렀습니다. – Bohemian

+0

예, 알겠습니다. hehe. 그 죄송합니다. 감사. :-) – jinHo

2

이 하나 개의 가능한 솔루션입니다 :

내 코드입니다.

경계선 중 하나 (이미지가 닿은 경계선 제외)에서 임의의 점 (x, y)을 생성하고 그 점을 향해 이미지를 이동합니다. 당신이해야 할 일은 방금 쳤던 점 P1 (x1, y1)과 방금 생성 된 무작위 점 P2 (x2, y2) 사이의 기울기를 찾는 것입니다. 경사면을 사용하면 선의 등식을 찾을 수 있습니다. 여행을해야합니다. 끝났습니다!

관련 문제