C++:“Distanza” tra 2 coordinate nella matrice 2D
-
21-12-2019 - |
Domanda
Per un gioco che sto scrivendo ne ho bisogno trovare un valore intero per la distanza tra due insiemi di coordinate.È un matrice 2D che contiene le diverse mappe.(Come la Zelda originale).Più vai lontano da centro (5,5) più alto dovrebbe essere il numero poiché aumenta la difficoltà dei nemici.Idealmente dovrebbe essere tra 0 e 14.IL l'array è 11x11.
Ora, ho provato a usare il file Pitagora formula che ricordo dal liceo, ma sta vomitando numeri in eccesso.Non riesco a capire perché.
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];
Soluzione
srand(rand());
non ha senso, dovrebbe esserlo srand(time(NULL));
non usare pow
per quadrato, basta usare x*x
anche la tua formula è sbagliata, dovresti sommare i numeri e non i meno
sqrt
ritorno double
e lanciare a int
lo arrotonderà per difetto
Penso sqrt
restituisce sempre un numero positivo
Sai abs
esiste vero?perché non usarlo?Anche distance = -distance
è meglio di 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];
Altri suggerimenti
È A ^ 2 + B ^ 2= c ^ 2, non meno.Una volta chiamati SQRT con un argomento negativo, sei da solo.
stai sottraendo i quadrati all'interno della radice quadrata, invece di aggiungerli ("...- pow ...").