C++:2次元配列における2つの座標間の「距離」
-
21-12-2019 - |
質問
私が書いているゲームでは、次のことが必要です 2 つの座標セットの間の距離の整数値を見つけます. 。それは 2次元配列 さまざまなマップを保持します。(初代ゼルダみたいに)そこから遠ざかるほど、 センター (5,5) 敵の難易度が上がるため、数値を大きくする必要があります。理想的にはそうあるべきです 0から14の間. 。の 配列は11x11です.
さて、使ってみましたが、 ピタゴラス 高校時代に覚えた公式だけど吐き出してしまう オーバーフロー数値. 。理由がわかりません。
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
戻る 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