2011-03-21 7 views
0

주어진 X, Y 지점에서 앞, 뒤로, 왼쪽 및 오른쪽으로 이동할 수있는 개체가 제공됩니다. 가장 효율적이고 인간적인 자연스러운 방식으로 주어진 운동 메커니즘을 사용하여 개체를 X, Y 지점으로 효율적으로 유도하는 방법.C# 개체를 점 (X, Y)에서 점 (X, Y)으로 이동하는 경로 지정 알고리즘

개체는 실시간으로 이동 가능하며 "startMoving | Direction |()"및 "stopMoving | Direction |()"이라고 말할 수 있습니다. 추가 트위스트와 내가 문제를 겪고있는 부분은 객체의 대면이 알려지지 않았지만 현재 위치 만 알 수 있기 때문에 알고리즘은 방향을 감지해야합니다. 개체의 위치는 별도의 스레드에서 500-1 초 간격으로 업데이트됩니다. 알고리즘 내의 위치를 ​​갱신하는 「요구」는 어느 시점에서도 가능 합니다만, 즉시 이용할 수있는 것은 아니기 때문에 알고리즘에서는 그것을 고려하지 않으면 안됩니다. requestAndWaitForCoordUpdate()와 같은 일을하는 것은 완벽하게 받아 들일 수 있지만 필요하지는 않을 것이다.

또한 장애물이 나타나지 않습니다. 대부분 열린 비행기에 있다고 가정 할 수 있습니다. 경로 사이의 직선에서 멀리 떨어져 있으면 장애물이 발생할 수 있습니다. 대상과 소스 사이의 거리의 1/4이 주어진 직접 경로에서 너비로 사용 가능하다고 가정하는 것이 안전합니다.

제약 조건이 주어지면 구현하는 방법이 확실하지 않으면이 시나리오에 A *가 적용되는지 잘 모르겠습니다. 여기서 유일한 실제 변수는 물체의 방향입니다.

public int[] currentCoords; 
public void movement() { 
    currentCoords[0] = 1005; // starting y coord 
    currentCoords[1] = 1007; // starting x coord 
    moveTo(1050, 1025); 
} 

public void moveTo(int x, int y) { 
    ... how? 
} 

public void threadUpdatingCoords() { 
    ... periodically check for source coord updates 
    ... between 200ms and 1000ms apart. 
} 
+2

http://gamedev.stackexchange.com/ –

+0

좀 더 정확하게 대답 해주십시오. 어떻게 움직이기를 원합니까? – SLaks

+0

어떻게 이동합니까? 앞으로 나아갈 것인가? 또는 주어진 방향으로 나아가는가? 오리엔테이션은 어떻게 처리됩니까? NSEW 만 마주 치십니까? 아니면 대각선도 요소입니까? –

답변

0

당신이 A * 알고리즘을 사용해야 최적의 경로를 계산하려면 : 여기

몇 가지 예제 코드입니다. 그러나 가장 인간적인 방법으로 그것을하기 위하여, 당신은 다만 걷게하고 무작위 방향을 가지고 가게했다. 똑똑한 인간이 아니라면 그는 오른손을 벽에 붙이고 손을 놓치지 않고 계속 걷기 만하면 결국 목적지까지 갈 것입니다.

인간은 효율적이지 않으며 무작위입니다. A *는 무작위가 아니며 효율적입니다.