1

AI를 프로그래밍하고 다른 프로그래머와 경쟁해야하는 게임이 있습니다. 나는 그 게임을하고있다. 그것은 경주에서 구성되며, 포드는 순서대로 일부 검사 점을 통과해야합니다.내 알고리즘의 정확성은 숫자가 더 크면 작은 숫자와 드롭에 완벽합니다. 항상 그렇습니다

당신은 알고리즘에 사용하는 몇 가지 입력 인수가 :

nextCheckpoint (x,y) -> nX,nY 
lastCheckpoint (x,y) -> lnX,lnY 
currentposition (x,y) -> x,y 

및 코드의 출력은 방향과 추진이다. 내가 뭐하는 거지 여기

DirectionX = nX-errorX(); 
DirectionY = nY-errorY(); 

의 일부 사진을 :

the theory of what should happen

I를

int pod::errorX(){ 
    int R[2]; 
    int X1; 
    float b; 
    int DeltaX; 
    //Vector of the line between Checkpoints 
    R[0] = nX-lnX; 
    R[1] = nY-lnY; 
    //calculation of the distance in the X axis between the ship and the line 
    b =(R[0]*(lnX-x) + R[1]*(lnY-y))/((-pow(R[0],2))-(pow(R[1],2))); 
    X1 = lnY + b*R[0]; 
    DeltaX = x-X1; 
    cerr<<"Dx: "<<DeltaX<<endl; 
    return DeltaX; 

} 

또한 동등한 포드 :: errorY() 마지막으로

이 관성이 내 우주선을 궤도에 들게하는 대부분의 시간 때문에 이것을 원합니다. 체크 포인트, 이것은 많은 시간을 소비하고 나를 경주에서 풀어줍니다.

이제는 문제에 직면하자. 때때로 작동하고 다른 것들은 가까이 있지 않습니다.

입력이 작은 경우.

nX= 2; 
nY= 2; 
lnX=0; 
lnY=0; 
x=0; 
y=0; 

같은 출력은 다음과 같습니다

directionX = 3 
directionY = 1 

을하지만 그들은 때 더 큰 :

nX= 6553; 
nY= 7817; 
lnX=13044; 
lnY=1908; 
x=13921; 
y=3530; 

출력 :

DirectionX=6940; 
DirectionY=1907; 

나는 일이 무엇인지 모른다. 어쩌면 b가 십진수일까요? 본 오류가 있습니까?

#include <iostream> 
#include <string> 
#include <cmath> 
using namespace std; 

int main() 
{ 

    int lnX = 13044; 
    int lnY = 7817; 
    int nX = 13044; 
    int nY = 1908; 

    int x = 13921; 
    int y = 3530; 

    int R[2]={}; 

    //Vector de la recta entre Checkpoints 
    R[0] = nX-lnX; 
    R[1] = nY-lnY; 
    //puro algebra, para calcular el desfase de X 
    int X1,DeltaX; 
    long double b; 
    b =(R[0]*(lnX-x) + R[1]*(lnY-y))/((-pow(R[0],2))-(pow(R[1],2))); 
    X1 = lnY + b*R[0]; 
    DeltaX = x-X1; 
    //desfase de y; 
    int Y1,DeltaY; 
    Y1 = lnY+b*R[1]; 
    DeltaY = y-Y1; 

    //dirección 
    int DirectionX; 
    int DirectionY; 

    DirectionX = nX-DeltaX; 
    DirectionY = nY-DeltaY; 
    cout<<X1<<" "<<Y1<<endl; 
    cout<<DeltaX<<" "<<DeltaY<<endl; 
    cout<<b<<" "<<DirectionX<< " "<<DirectionY<<endl; 
+0

당신은 환영해야하지만, 수 :

아마이 코드는 게임을 필요가없는 렸기 때문에 테스트하는 것이 더 편하지 솔직히, 절반을 읽은 후 나머지 질문을 끝내기 위해 건너 뛰었습니다. 불행하게도 나는 무엇이라도 발견하지 않았다). 귀하의 질문이 무엇인지 명확하지 않습니다. – user463035818

+0

관련/dupe : http://stackoverflow.com/questions/588004/is-floating-point-math-broken – NathanOliver

+0

플로팅을해야 할 때 정수 계산을 수행 할 수있는 것처럼 보입니다. 수학을 선택하고 필요한 경우 잘라내거나 반올림합니다. – AndyG

답변

1

이 줄 오른쪽? X1 = lnY + b*R[0]; 가 아니면이 X1 = lnX + b*R[0];

관련 문제