se puede hacer esto con minx, miny, maxx, maxy?..
#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


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)