Hallar la coordenada mбs cerca -
Infernux - 29.06.2015
Buenas, pues me gustarнa saber como hago para que en un bucle (por ejemplo), que albergue 10 diferentes coordenadas x,y,z, se pueda saber cual es la coordenada mбs cerca del jugador.. No sй si me explique
Bueno jaja espero me hallan entendido y me puedan ayudar, un saludo.
Respuesta: Hallar la coordenada mбs cerca -
[DOG]irinel1996 - 29.06.2015
Si puedes dйjanos la matriz con las coordenadas y te desarrollarй el cуdigo.
Bбsicamente tienes que hacer una comparaciуn entre todos los valores, para ver cuбl estб mбs cerca.
Re: Hallar la coordenada mбs cerca -
Infernux - 29.06.2015
Pues lo usarй para un sistema dinбmico, no sй mira como...
Te dejo todo lo que se usarнa mбs o menos :P
pawn Код:
#define MAX_NEGOCIOS 80
// el enum incompleto, solo los necesarios para esta funcion...
enum NegociosData
{
Float:nExteriorX,
Float:nExteriorY,
Float:nExteriorZ,
nTipo
};
new Negocio[MAX_NEGOCIOS][NegociosData];
Osea, son 80 negocios, mi idea es que en el /gps den click en la opciуn de 'Encontrar 24/7 mбs cercano' (El 24/7 serнa el nTipo = 1), me entiendes? Espero que si :P
Osea, no te puedo pasar las coordenadas exactas, lo que necesito es algo que compruebe cual de todos los 24/7 estб mбs cerca
Respuesta: Hallar la coordenada mбs cerca -
[DOG]irinel1996 - 29.06.2015
Comprendo, en breve modificarй el mensaje para aсadir el cуdigo.
Re: Hallar la coordenada mбs cerca -
spell - 29.06.2015
pawn Код:
new b = -1, Float:tmpDist = 9999.0;
for (new i = 0; i < MAX_NEGOCIOS; i++) {
if (Negocio[i][nTipo] == <tipo de negocio>) {
new Float:dist = GetPlayerDistanceFromPoint(playerid, Negocio[i][nExteriorX], Negocio[i][nExteriorY], Negocio[i][nExteriorZ]);
if (dist < tmpDist) {
tmpDist = dist;
b = i;
}
}
}
// ahora b vale el negocio mбs cercano, y -1 si no encontrу
Re: Hallar la coordenada mбs cerca -
Infernux - 29.06.2015
Quote:
Originally Posted by spell
pawn Код:
new b = -1, Float:tmpDist = 9999.0;
for (new i = 0; i < MAX_NEGOCIOS; i++) { if (Negocio[i][nTipo] == <tipo de negocio>) { new Float:dist = GetPlayerDistanceFromPoint(playerid, Negocio[i][nExteriorX], Negocio[i][nExteriorY], Negocio[i][nExteriorZ]);
if (dist < tmpDist) { tmpDist = dist; b = i; } } }
// ahora b vale el negocio mбs cercano, y -1 si no encontrу
|
Gracias, te amo
Edit: Probando algo
a veces me salen hasta 3 negocios, pero normalmente sуlo 1 que es el mбs cerca, їa que se debe esto? Gracias!
Respuesta: Hallar la coordenada mбs cerca -
[DOG]irinel1996 - 29.06.2015
spell se me ha adelantado, pero aсadirй una pequeсa explicaciуn. El principio aplicado es el mismo que el de la soluciуn anterior ya que es el mбs rбpido.
Teniendo en cuenta que el mapa del GTA San Andreas es bбsicamente un cuadrado y las coordenadas en el eje X/Y van del -3000 hasta 3000, deducimos que de una esquina a otra habrб una distancia de 6000. La distancia mбxima que podrнa haber estarнa en la diagonal de dicho cuadrado (aproximadamente 8485,28 metros), se calcula aplicando el Teorema de Pitбgoras.
Redondeamos la distancia mбxima a 8600 y aplicamos bбsicamente lo que
spell puso mбs arriba.
PHP код:
stock GetNearestBusiness(playerid, tipo) {
new ID_cercana = -1,
Float:Pos = 0.0,
Float:maxPos = 8600.0;
for (new i = 0; i < MAX_NEGOCIOS; i++)
{
if (Negocio[i][nTipo] == tipo)
{
Pos = GetPlayerDistanceFromPoint(playerid, Negocio[i][nExteriorX], Negocio[i][nExteriorY], Negocio[i][nExteriorZ]);
if (Pos <= maxPos) {
maxPos = Pos;
ID_cercana = i;
}
}
}
return ID_cercana;
}
Se hace un bucle a travйs de todos los negocios que tienen
nTipo = tipo, se saca la distancia desde el jugador hasta tal negocio y se compara a la distancia mбxima posible. Si la distancia obtenida (Pos) es menor a la mбxima distancia, tomarб el lugar de "mбxima distancia" (maxPos). Luego, cualquier distancia que sea menor que la mбxima distancia, serб el negocio mбs cercano (ID_cercana).
EDIT: visto el cуdigo, solo es posible que devuelva un valor. Como mucho serнa posible que dos o mбs negocios se encuentren a la misma distancia. Ya he modificado el cуdigo.
Re: Hallar la coordenada mбs cerca -
Infernux - 29.06.2015
Ahora si! ЎЎMuchas gracias a los dos!!