Ayuda con algo de matematica
#1

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
Reply
#2

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);

Reply
#3

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)
Reply
#4

ї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)).
Reply
#5

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).
Reply
#6

Muchas Gracias Miguel, +rep para tн..
Reply
#7

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?
Reply
#8

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.
Reply
#9

bm0z solo quiero 2 dimensiones.
Reply
#10

ї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
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)