SA-MP Forums Archive
se puede hacer esto con minx, miny, maxx, maxy?.. - 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: se puede hacer esto con minx, miny, maxx, maxy?.. (/showthread.php?tid=429577)



se puede hacer esto con minx, miny, maxx, maxy?.. - OTACON - 10.04.2013

Buenas a todos, alguien sabe si se puede crear una zona con minx, miny, maxx, maxy pero ke sea un triangulo?.

no estoy muy seguro pero creo ke la funcion CreateDynamicPolygon del include streamer es para eso, si es asi me podrian explicar como utilizarla?.

pawn Код:
native CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);
Desde ya muchas Gracias .


Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - [J]ulian - 10.04.2013

Tйcnicamente se deberнa poder, ya que un triangulo es un polнgono.

Con probar no perdes nada.


Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - OTACON - 10.04.2013

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
Tйcnicamente se deberнa poder, ya que un triangulo es un polнgono.

Con probar no perdes nada.
si por eso dije ke no sabia si era esa la funcion.

pero no entiendo como utilizarla :S


Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - [J]ulian - 10.04.2013

Nunca la use, segъn vi en el post del plugin podrнa ser asi:

pawn Код:
new Float:tri[]
{
    x1, y1,
    x2, y2,
    x3, y3
};

CreateDynamicPolygon(tri);



Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - PHudson - 10.04.2013

Las matemбticas no son mi fuerte. He estado intentando hacerlo y no lo he conseguido. Te indico por donde lo he intentado para que te hagas una idea:
  1. Se obtiene la ecuaciуn continua de las rectas que unen los tres vйrtices del triбngulo (mediante punto y vector).
  2. Se obtienen las ecuaciones continuas de la recta que unen el punto donde se encuentra el jugador con cada uno de los vйrtices.
  3. Se realizan tres sistemas de dos ecuaciones con dos incуgnitas. Si alguno de esos sistemas tiene soluciуn y esa soluciуn no es ninguno de los vйrtices, se supone que la recta corta a los lados del polнgono, por tanto el punto se encuentra fuera de йl.
Es mucha matemбtica. Ojalб supiese la forma de plantear un sistema de ecuaciones en PAWN para poder ayudarte.

No creo que pueda hacerse con la x mбxima, mнnima, etc., pues un triбngulo sуlo puede ser definido por sus vйrtices o por sus lados. De todas formas hay muchos includes que incluyen esta funciуn, aunque no como tъ la pides.


Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - [J]ulian - 10.04.2013

Es obvio que un triangulo no lo va a poder sacar con min y max xD. Con eso sуlo se puede hacer rectбngulos.

Para el resto se tiene que usar vйrtices (x e y del punto).


Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - OTACON - 10.04.2013

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
Es obvio que un triangulo no lo va a poder sacar con min y max xD. Con eso sуlo se puede hacer rectбngulos.

Para el resto se tiene que usar vйrtices (x e y del punto).
pero CreateDynamicPolygon es con min y max pero de la Z

native CreateDynamicPolygon(Floatoints[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);



Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - [J]ulian - 10.04.2013

Quote:
Originally Posted by OTACON
Посмотреть сообщение
pero CreateDynamicPolygon es con min y max pero de la Z

native CreateDynamicPolygon(Floatoints[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);
їProbaste si funcionaba como te dije?


Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - WCrimson - 10.04.2013

- Tenemos un triбngulo, a sus esquinas les llamaremos A, B y C, cada una de estas determinada por una coordenada sobre el eje X y la otra sobre el Y ( X y Y ).
- Tenemos un jugador en un punto una coordenada determinada ( X y Y ) a la cual llamaremos P.

La lуgica que deberбs seguir es esta:
- Para saber sн el jugador se encuentra dentro del бrea de ABC deberбs de comprobar que la sumatoria de las бreas de los triбngulos PAB, PBC y PAC equivalgan a la misma cantidad del бrea de ABC.


Te dejo la funciуn abajo.
PHP код:
bool:isPlayerInTriangleFloat:f_pointXFloat:f_pointYFloat:s_pointXFloat:s_pointYFloat:t_pointXFloat:t_pointYplayerid)
{
    new
        
Float:check[5],
        
Float:playerPos[3];
    
GetPlayerPos(playeridplayerPos[0], playerPos[1], playerPos[2]);
    
check[0] = floatabs(floatdiv(floatadd(floatmul(f_pointX,floatsub(s_pointY,t_pointY)),floatadd(floatmul(s_pointX,floatsub(t_pointY,f_pointY)),floatmul(t_pointX,floatsub(f_pointY,s_pointY)))),float(2)));
    
check[1] = floatabs(floatdiv(floatadd(floatmul(playerPos[0],floatsub(s_pointY,t_pointY)),floatadd(floatmul(s_pointX,floatsub(t_pointY,playerPos[1])),floatmul(t_pointX,floatsub(playerPos[1],s_pointY)))),float(2)));
    
check[2] = floatabs(floatdiv(floatadd(floatmul(f_pointX,floatsub(playerPos[1],t_pointY)),floatadd(floatmul(playerPos[0],floatsub(t_pointY,f_pointY)),floatmul(t_pointX,floatsub(f_pointY,playerPos[1])))),float(2)));
    
check[3] = floatabs(floatdiv(floatadd(floatmul(f_pointX,floatsub(s_pointY,playerPos[1])),floatadd(floatmul(s_pointX,floatsub(playerPos[1],f_pointY)),floatmul(playerPos[0],floatsub(f_pointY,s_pointY)))),float(2)));
    
check[4] = ( check[1] + check[2] + check[3] );
    return ( 
check[0] == check[4] );




Respuesta: se puede hacer esto con minx, miny, maxx, maxy?.. - OTACON - 11.04.2013

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
їProbaste si funcionaba como te dije?
todavia no lo he testeado pero debe funcionar por ke tambien he visto en post y asi es como se utiliza.
y ya he entendido.

Quote:
Originally Posted by WCrimson
Посмотреть сообщение
- Tenemos un triбngulo, a sus esquinas les llamaremos A, B y C, cada una de estas determinada por una coordenada sobre el eje X y la otra sobre el Y ( X y Y ).
- Tenemos un jugador en un punto una coordenada determinada ( X y Y ) a la cual llamaremos P.

La lуgica que deberбs seguir es esta:
- Para saber sн el jugador se encuentra dentro del бrea de ABC deberбs de comprobar que la sumatoria de las бreas de los triбngulos PAB, PBC y PAC equivalgan a la misma cantidad del бrea de ABC.


Te dejo la funciуn abajo.
PHP код:
bool:isPlayerInTriangleFloat:f_pointXFloat:f_pointYFloat:s_pointXFloat:s_pointYFloat:t_pointXFloat:t_pointYplayerid)
{
    new
        
Float:check[5],
        
Float:playerPos[3];
    
GetPlayerPos(playeridplayerPos[0], playerPos[1], playerPos[2]);
    
check[0] = floatabs(floatdiv(floatadd(floatmul(f_pointX,floatsub(s_pointY,t_pointY)),floatadd(floatmul(s_pointX,floatsub(t_pointY,f_pointY)),floatmul(t_pointX,floatsub(f_pointY,s_pointY)))),float(2)));
    
check[1] = floatabs(floatdiv(floatadd(floatmul(playerPos[0],floatsub(s_pointY,t_pointY)),floatadd(floatmul(s_pointX,floatsub(t_pointY,playerPos[1])),floatmul(t_pointX,floatsub(playerPos[1],s_pointY)))),float(2)));
    
check[2] = floatabs(floatdiv(floatadd(floatmul(f_pointX,floatsub(playerPos[1],t_pointY)),floatadd(floatmul(playerPos[0],floatsub(t_pointY,f_pointY)),floatmul(t_pointX,floatsub(f_pointY,playerPos[1])))),float(2)));
    
check[3] = floatabs(floatdiv(floatadd(floatmul(f_pointX,floatsub(s_pointY,playerPos[1])),floatadd(floatmul(s_pointX,floatsub(playerPos[1],f_pointY)),floatmul(playerPos[0],floatsub(f_pointY,s_pointY)))),float(2)));
    
check[4] = ( check[1] + check[2] + check[3] );
    return ( 
check[0] == check[4] );

testeare con ese tambien.
____________________________________________

Gracias, testeo y cualkier cosa aviso.

Saludos.