se puede hacer esto con minx, miny, maxx, maxy?..
#1

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

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

Con probar no perdes nada.
Reply
#3

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

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

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

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

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);
Reply
#8

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

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

Reply
#10

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


Forum Jump:


Users browsing this thread: 1 Guest(s)