SA-MP Forums Archive
Ayuda con algo de matematica - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Ayuda con algo de matematica (/showthread.php?tid=588831)



Ayuda con algo de matematica - Jastak - 12.09.2015

Hola, quiero hacer algo pero en teorнa no se como hacerlo (no soy del todo bueno en matemбticas), bien, lo que quiero hacer es saber el valor que avanza un auto en x y y mediante la rotaciуn y su velocidad, es decir una funciуn que retorne la cantidad del valor x y y por medio de la rotaciуn y a una velocidad. (creo que me explique..)

Espero que me ayuden.. muchas gracias de ante mano


Respuesta: Ayuda con algo de matematica - Zume - 12.09.2015

Que valor quieres que te retorne? el X y el Y por separado? y directamente el X o Y que avanzaste? en realidad no entendi muy bien que valor quieres si tomas en cuenta la velocidad. Se me ocurrio esto >

PHP код:
enum pPos{
    
Float:x,
    
Float:y
};
new 
TravelPlayer[MAX_PLAYERS][pPos];
COMMAND:start(playeridparams[])
{
    
GetPlayer2DPos(playeridTravelPlayer[playerid][x], TravelPlayer[playerid][y]);
    new
        
str[64];
    
format(strsizeof str"Iniciales: X [%.2f] . Y [%.2f]"TravelPlayer[playerid][x], TravelPlayer[playerid][y]);
    
SendClientMessage(playerid, -1str);
    return 
1;
}
COMMAND:check_x(playeridparams[])
{
    new
        
Float:fFinal[3];
    
GetPlayerPos(playeridfFinal[0], fFinal[1], fFinal[2]);
    new
        
str[64];
    
format(strsizeof str"X Recorrido: %.2f", (TravelPlayer[playerid][x] > fFinal[0]) ? (TravelPlayer[playerid][x]-fFinal[0]) : (fFinal[0]-TravelPlayer[playerid][x]));
    
SendClientMessage(playerid, -1str);
    return 
1;
}
COMMAND:check_y(playeridparams[])
{
    new
        
Float:fFinal[3];
    
GetPlayerPos(playeridfFinal[0], fFinal[1], fFinal[2]);
    new
        
str[64];
    
format(strsizeof str"Y Recorrido: %.2f", (TravelPlayer[playerid][y] > fFinal[1]) ? (TravelPlayer[playerid][y]-fFinal[1]) : (fFinal[1]-TravelPlayer[playerid][y]));
    
SendClientMessage(playerid, -1str);
    return 
1;
}
stock GetPlayer2DPos(playerid, &Float:X, &Float:Y){
    new
        
Float:fPosUnused;
    
#pragma unused fPosUnused
    
    
GetPlayerPos(playeridXYfPosUnused);




Re: Ayuda con algo de matematica - Jastak - 12.09.2015

no exactamente, lo que quiero es una funciуn que tenga como parбmetros la posiciуn inicial, el бngulo y la velocidad a la que va el coche y que retorne su posiciуn futura (eso exactamente es lo que quiero que retorne su posiciуn futura)


Re: Ayuda con algo de matematica - Miguel - 13.09.2015

їRealmente necesitas la rotaciуn del vehнculo? Puede suceder que el vehнculo estй apuntando hacia el oeste pero no se estй moviendo en esa direcciуn (que estй cayendo, por ejemplo).

Prueba con esto:
Xf = T*V + Xi

Donde:
Xi: posiciуn inicial
T: tiempo
V: velocidad EN UNA DE LAS COMPONENTES

Para predecir la posiciуn es necesario que hagas ese cбlculo para las tres componentes de la velocidad, Vx, Vy, Vz. Reuniendo los tres resultados deberнas obtener un punto (Xx, Xy, Xz) que representa coordenadas.

Nota: es un simple despeje de la ecuaciуn de velocidad, que es la diferencia de distancia entre la diferencia de tiempo (dx/dt = (x1-x0)/(t1-t0)).


Re: Ayuda con algo de matematica - Miguel - 13.09.2015

Si lo que tienes es la rapidez (y no la velocidad que es un vector), si serнa necesario usar la rotaciуn. Te muestro.

Como dije antes, la ecuaciуn de la velocidad en una componente es:

ECUACIУN 1:
V = (Xf-Xi)/T

Tambiйn puedes determinar la velocidad mediante la rotaciуn de la siguiente forma:

ECUACIУN 2:
V = r * cos(a) - para la velocidad en X
V = r * sen(a) - para la velocidad en Y

Donde:
V: velocidad en una componente
r: rapidez
a: бngulo (rotaciуn)

Como verбs, hay dos ecuaciones para la velocidad en una componente. Podemos igualarlas.
(Xf-Xi)/T = r * cos(a) - para la velocidad en X

Y de allн despejamos la Xf.
Xfx = V*cos(a)*T + Xi

Lo mismo hacemos para la posiciуn en Y pero con la tercera ecuaciуn de velocidad
Xfy = V*sen(a)*T + Xi

En resumen, necesitas estas dos ecuaciones:
Xfx = V*cos(a)*T + Xi
Xfy = V*sen(a)*T + Xi

Con ellas calculas un punto en el plano (x,y).


Re: Ayuda con algo de matematica - Jastak - 13.09.2015

Muchas Gracias Miguel, +rep para tн..


Respuesta: Ayuda con algo de matematica - SimonEliecer - 13.09.2015

Buenas Noches no se como colocar una duda, es q me baniaron a mi primo y a mi injustamente en el server de Fz roleplay (S1) y despues de alli no puedo ni siquiera poner otro server ni nada ya he desintalado y intaladoas varias veces pero nada no se que hacer alguien me ayuda?


Respuesta: Ayuda con algo de matematica - bm0z - 13.09.2015

Creo que no serнa nada efectivo ni eficiente hacerlo mediante rotaciones de euler, para hacer tal calculo es necesario convertirlo en un matrix y luego hacer una multiplicaciуn con la velocidad del vehнculo.

Ahora, si lo quieres hacer en 2D, basta con usar las funciones cos y sin.


Re: Ayuda con algo de matematica - Jastak - 13.09.2015

bm0z solo quiero 2 dimensiones.


Respuesta: Ayuda con algo de matematica - bm0z - 13.09.2015

їAlgo como esto es lo que quieres?

Код:
stock Algo(&Float:x, &Float:y, Float:angle, Float:speed)
{
	x += floatsin(-angle, degrees) * speed;
	y += floatcos(-angle, degress) * speed;
}
Estб es la soluciуn que te ha dado Miguel, en fin, creo que ya estaba resuelto el tema