Como obter a posiзгo mais prуxima? -
arakuta - 06.09.2012
Comeo faзo pra obter a posiзгo mais proxima, por exemplo:
pawn Код:
GetPlayerPos(playerid,x,y,z); // Obtenho a posiзгo a ser comparada
Entгo eu comparo com todas
pawn Код:
new Float:positions[2][3] = {
{2297.1064,2452.0115,10.8203},
{2297.0452,2468.6743,10.8203}
};
E seto a posiзгo do player nessa posiзгo que й a mais prуxima.
Alguйm sabe?
Re: Como obter a posiзгo mais prуxima? -
paulor - 06.09.2012
pawn Код:
ReturnPosProx(playerid) {
new Dist[3] = { 0xFFFF, ... };
for(new i = (sizeof(positions) - 1); i > -1 --i) {
if((Dist[1] = GetPlayerDistanceFromPoint(playerid, positions[i][0], positions[i][1], positions[i][2])) < Dist[0]) {
Dist[0] = Dist[1];
Dist[2] = i;
}
}
return Dist[2];
}
//Utilizando
new Prox = ReturnPosProx(playerid);
SetPlayerPos(playerid, positions[Prox][0], positions[Prox][1], positions[Prox][2]);
Nгo testei, mas й para funcionar!
Re: Como obter a posiзгo mais prуxima? -
leonardo1434 - 06.09.2012
Paulor nгo deveria ser uma float? axo que seria assim..
pawn Код:
stock ReturnPosProx(playerid)
{
static Float:result[2], i = 0,part;
for(; i < sizeof positions; ++i)
{
result[0] = GetPlayerDistanceFromPoint(playerid, positions[i][0], positions[i][1], positions[i][2]);
if(result[0] > result[1])
{
result[1] = result[0];
part = i;
}
}
return part;
}
Re: Como obter a posiзгo mais prуxima? -
paulor - 06.09.2012
Esqueci desse detalhe, Corrigido! E o seu vai pegar a distancia maior e nгo a menor!
pawn Код:
ReturnPosProx(playerid) {
new Float: Dist[2] = {65535.0, ...}, ReturnId;
for(new i = (sizeof(positions) - 1); i > -1; --i) {
if(Dist[0] > (Dist[1] = GetPlayerDistanceFromPoint(playerid, positions[i][0], positions[i][1], positions[i][2]))) {
Dist[0] = Dist[1];
ReturnId = i;
}
}
return ReturnId;
}
//Utilizando
new Prox = ReturnPosProx(playerid);
SetPlayerPos(playerid, positions[Prox][0], positions[Prox][1], positions[Prox][2]);
Re: Como obter a posiзгo mais prуxima? -
leonardo1434 - 06.09.2012
Nгo po, vai pegar a maior, pensa comigo.
pawn Код:
digamos que o resultado 1 й = 50m ( no caso result[0])
ele irб comparar com o segundo resultado que estб nulo se for maior, ele definirб como maior. (result[1])
entгo sempre que o result[0] for maior que o resulte anterior, ele serб substiuido.
cada vez que for maior, ele vai substituir, e assim por diante.
a mesma lуgica que vocк usou nesta sua nova versгo.
Re: Como obter a posiзгo mais prуxima? -
paulor - 06.09.2012
Quote:
Originally Posted by leonardo1434
Nгo po, vai pegar a maior, pensa comigo.
pawn Код:
digamos que o resultado 1 й = 50m ( no caso result[0]) ele irб comparar com o segundo resultado que estб nulo se for maior, ele definirб como maior. (result[1]) entгo sempre que o result[0] for maior que o resulte anterior, ele serб substiuido.
cada vez que for maior, ele vai substituir, e assim por diante.
a mesma lуgica que vocк usou nesta sua nova versгo.
|
Nгo, ele deseja que retorne a Posiзгo mais prуxima do Player, a sua funзгo vai retornar a mais distante do Player.
Re: Como obter a posiзгo mais prуxima? -
leonardo1434 - 06.09.2012
minha falha, pensava que era o mais distante. lol.
Re: Como obter a posiзгo mais prуxima? -
Jason` - 06.09.2012
Quote:
Originally Posted by leonardo1434
Paulor nгo deveria ser uma float? axo que seria assim..
pawn Код:
stock ReturnPosProx(playerid) { static Float:result[2], i = 0,part; for(; i < sizeof positions; ++i) { result[0] = GetPlayerDistanceFromPoint(playerid, positions[i][0], positions[i][1], positions[i][2]); if(result[0] > result[1]) { result[1] = result[0]; part = i; } } return part; }
|
Prevejo problemas com o static...