C ++ : 2D 어레이의 2 좌표 사이의 "거리"
-
21-12-2019 - |
문제
게임의 경우 의 두 세트 사이의 거리에 대한 정수 값을 찾아야합니다.다른지도를 보유하는 2D 어레이 입니다.(원래 젤다처럼). 중심 (5,5) 에서 더 많은 것은 적을 증가시키는 데 어려움이 지남에 따라 숫자가 높아져야합니다.이상적으로는 0 ~ 14 이어야합니다. 배열은 11x11 입니다.
이제는 고등학교에서 기억하는 pythagoras 공식을 사용하려고 노력했지만 오버 플로우 숫자 을 분출합니다.나는 그 이유를 알아낼 수 없다.
srand(rand());
int distance=sqrt(pow((5-worldx), 2)-pow((5-worldy), 2));
if(distance<0) //alternative to abs()
{
distance+=(distance * 2);
}
if(distance>13)
{
distance=13;
}
int rnd=rand()%(distance+1);
Monster testmonster = monsters[rnd];
. 해결책
srand(rand());
가 의미가 없어, srand(time(NULL));
사각형을 위해 pow
를 사용하지 마십시오. x*x
수식도 틀렸어
를 뺀 값을 함께 추가해야합니다. sqrt
return double
를 반환하고 int
로 캐스팅합니다.
sqrt
가 항상 양수 숫자를 반환하는 것으로 생각합니다
abs
가 있음을 알고 있습니까?왜 사용하지 않습니까?또한 distance = -distance
가 distance+=(distance * 2)
srand(time(NULL));
int dx = 5 - worldx;
int dy = 5 - worldy;
int distance=sqrt(dx * dx + dy * dy);
if(distance>13)
{
distance=13;
}
int rnd=rand()%(distance+1);
Monster testmonster = monsters[rnd];
. 다른 팁
^ 2 + b ^ 2= c ^ 2, 빼기가 아닙니다.부정적인 인수로 SQRT를 호출하면, 당신은 자신의 것입니다.
( "... pow ...")를 추가하는 대신 사각형 루트 안에 사각형을 뺍니다.
제휴하지 않습니다 StackOverflow