Raised This Month: $51 Target: $400
 12% 

Ecuación. Recta que corta al plano.


  
 
 
Thread Tools Display Modes
Author Message
fearAR
Veteran Member
Join Date: Oct 2010
Old 01-06-2013 , 20:00   Ecuación. Recta que corta al plano.
#1

Bien, mi problema es el siguiente, no logro hallar la forma para saber si un punto se encuentra dentro de un cubo definido por 8 puntos ( cada esquina es un punto ), a la misma vez el cubo se encuentra conformado por 6 caras, y cada cara contiene dos meshes ( mesh = triángulo que significaria parte de la cara ).

No puedo verificar mediante calculo mayor menor a su size, ya que el cubo obtiene la propiedad de poder girar en sus ejes euclideanos, pitch/yaw/roll.

Por lo tanto no me es conveniente, ya que hay casos en los que el punto quedaria fuera y me lo tomaria como que esta dentro.

Para resolver este problema, me plantee la forma interseccion recta/plano, en realidad no es recta si no que es segmento que tiene un inicio y un final. En fín las reglas serían las siguientes.

* Si la recta corta las caras del cubo en un número impar de veces, significaria que el punto final se encuentra dentro.

* Si la recta corta las caras del cubo en un número par de veces, significaria que lo atravesó y continuó.

* Si no lo corta, nunca lo atraveso, por lo tanto se descarta.

Imagen ilustrativa:
[IMG]http://img717.**************/img717/7564/cuboy.png[/IMG]

Para hacer esto necesito de un calculo. En el cual obtengo la normal al plano (mesh), y realizo despeje.

Para dar un ejemplo me guíe con este video, pero no funciona bien o no lo apliqué bien.
http://www.youtube.com/watch?v=3pj3vwpeFro

Para finalizar les dejo la función que recree y la determinación del calculo.

U = vector director ( Final - Inicio )
Xo, Yo, Zo = vector Inicio
a,b,c = vector normal al plano

aX + bY + cZ + D = 0

Vo = vector inicial
U = vector director
t = escalar del vector director
X, Y, Z = Vo + U*t

Reemplazo

a * ( Xo + Ux * t ) + b * ( Yo + Uy * t ) + c * ( Zo + Uz * t ) + D = 0

Separando en terminos:

aXo + aUxt + bYo + bUyt + cZo + cUzt + D = 0

paso los valores con t para un lado

aXo + bYo + cZo + D = -( aUxt ) -( bUyt ) - ( cUzt )

aXo + bYo + cZo + D = t( -aUx - bUy - cUz )

t = ( aXo + bYo + cZo + D ) / ( -aUx - bUy - cUz )

En fin, pasado a lenguaje de programación:

PHP Code:
/*Con un bucle recorro esquina y sus 2 puntos adyacentes para conformar el mesh o plano.*/

/*Y la aplico al siguiente STOCK:*/

stock intersection_lineplane( const Float:fLinePoints][ ], Float:fPlanePoints][ ], &Float:d, &Float:)
{
    new 
Float:f_vDirection], Float:f_vPlane][ ], Float:f_vNormal];
    
    
f_vDirection] = fLinePoints][ ] - fLinePoints][ ];
    
f_vDirection] = fLinePoints][ ] - fLinePoints][ ];
    
f_vDirection] = fLinePoints][ ] - fLinePoints][ ];
    
    
f_vPlane][ ] = fPlanePoints][ ] - fPlanePoints][ ];
    
f_vPlane][ ] = fPlanePoints][ ] - fPlanePoints][ ];
    
f_vPlane][ ] = fPlanePoints][ ] - fPlanePoints][ ];
    
    
f_vPlane][ ] = fPlanePoints][ ] - fPlanePoints][ ];
    
f_vPlane][ ] = fPlanePoints][ ] - fPlanePoints][ ];
    
f_vPlane][ ] = fPlanePoints][ ] - fPlanePoints][ ];
    
    
f_vNormal] = ( f_vPlane][ ] * f_vPlane][ ] ) - ( f_vPlane][ ] * f_vPlane][ ] ); 
    
f_vNormal] = -* ( ( f_vPlane][ ] * f_vPlane][ ] ) - ( f_vPlane][ ] * f_vPlane][ ] ) ); 
    
f_vNormal] = ( f_vPlane][ ] * f_vPlane][ ] ) - ( f_vPlane][ ] * f_vPlane][ ] ); 
        
    
=     - ( f_vNormal] * fPlanePoints][ ] )      
        - ( 
f_vNormal] * fPlanePoints][ ] )     
        - ( 
f_vNormal] * fPlanePoints][ ] );
                    
    
=     ( ( f_vNormal] * fLinePoints][ ] ) + ( f_vNormal] * fLinePoints][ ] ) + ( f_vNormal] * fLinePoints][ ] ) + 
        / ( - ( 
f_vNormal] * f_vDirection] ) - ( f_vNormal] * f_vDirection] ) - ( f_vNormal] * f_vDirection] ) );
    
        
/* Esta condicional es para saber si t no sobrepasa de 0.0 y 1.0, osea que el "segmento" inicio final atravieza al cubo y no mas adelantado ni retrasado como lo haria una recta... */
    
if( 0.0 1.0 ) return 1;
    
    return 
0;

Saludos. Espero sus respuestas.

PD: el calculo del vector normal ( producto vectorial / cross product ) al plano esta perfecto ya que lo represente con un Temp Entity TE_BEAMPOINTS, y es perfecto.
El problema puede provenir desde D hasta T y no logro arreglarlo.
__________________
~~~~ NPC AI ~~~~

[ Pathfinding - OK ]
[ Citizen AI - OK ]
[ Handle Weapons - --- ]

Last edited by fearAR; 01-06-2013 at 20:11.
fearAR is offline
Send a message via MSN to fearAR
meTaLiCroSS
Gaze Upon My Hat
Join Date: Feb 2009
Location: Viña del Mar, Chile
Old 01-06-2013 , 20:14   Re: Ecuación. Recta que corta al plano.
#2

https://forums.alliedmods.net/forumdisplay.php?f=11

Ahi estan los maestros de la matematica
__________________
Quote:
Originally Posted by joropito View Post
You're right Metalicross
meTaLiCroSS is offline
fearAR
Veteran Member
Join Date: Oct 2010
Old 01-06-2013 , 20:16   Re: Ecuación. Recta que corta al plano.
#3

Lo iba a postear ahí, esperaba que algun usuario español con conocimientos en geometria me ayudara, yo se que hay, por ejemplo Gladius un par de veces me ayudo.

PD: Gracias igualmente, lo voy a postear ahí y ver si tengo chances aquí también.

Saludos.
__________________
~~~~ NPC AI ~~~~

[ Pathfinding - OK ]
[ Citizen AI - OK ]
[ Handle Weapons - --- ]
fearAR is offline
Send a message via MSN to fearAR
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 01-06-2013 , 20:23   Re: Ecuación. Recta que corta al plano.
#4

Y si creás una entidad invisible del tamaño del cubo y registrás un touch? Para saber si lo que vos querés que esté dentro del cubo está o no. Si lo que querés ver si cruza una linea obviamente no sirve, pero no especificaste qué querés saber si está dentro del cubo.
__________________

Last edited by Neeeeeeeeeel.-; 01-06-2013 at 20:25.
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
meTaLiCroSS
Gaze Upon My Hat
Join Date: Feb 2009
Location: Viña del Mar, Chile
Old 01-06-2013 , 20:35   Re: Ecuación. Recta que corta al plano.
#5

Quote:
Originally Posted by Neeeeeeeeeel.- View Post
Y si creás una entidad invisible del tamaño del cubo y registrás un touch? Para saber si lo que vos querés que esté dentro del cubo está o no. Si lo que querés ver si cruza una linea obviamente no sirve, pero no especificaste qué querés saber si está dentro del cubo.
Quote:
No puedo verificar mediante calculo mayor menor a su size, ya que el cubo obtiene la propiedad de poder girar en sus ejes euclideanos, pitch/yaw/roll.
Los mins/maxs de una entidad son estaticos al mundo
__________________
Quote:
Originally Posted by joropito View Post
You're right Metalicross

Last edited by meTaLiCroSS; 01-06-2013 at 20:35.
meTaLiCroSS is offline
fearAR
Veteran Member
Join Date: Oct 2010
Old 01-06-2013 , 20:40   Re: Ecuación. Recta que corta al plano.
#6

Claro como dijo metalicross, si utilizo esa forma, devolveria valores erroneos, ya que la entidad no gira en torno a sus angulos, es estatica, lo cual no pasa con mi cubo, que tiene un offset para cada uno de sus esquinas, las cuales pueden alterarse dependiendo al giro de la misma, o a su tamaño definido.
__________________
~~~~ NPC AI ~~~~

[ Pathfinding - OK ]
[ Citizen AI - OK ]
[ Handle Weapons - --- ]
fearAR is offline
Send a message via MSN to fearAR
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 01-06-2013 , 20:42   Re: Ecuación. Recta que corta al plano.
#7

Y si el cubo lo creás con bmod? (Seguramente ya lo estás usando al bmod xD)
__________________

Last edited by Neeeeeeeeeel.-; 01-06-2013 at 20:42.
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
fearAR
Veteran Member
Join Date: Oct 2010
Old 01-06-2013 , 20:45   Re: Ecuación. Recta que corta al plano.
#8

El cubo, me refiero a un cubo inexistente, determinado por cada esquina, no es una entidad visible, solo quiero saber si un punto se encuentra dentro de sus limites.

Saludos.

PD: Como determinar una zona, no se si se me entiende.
__________________
~~~~ NPC AI ~~~~

[ Pathfinding - OK ]
[ Citizen AI - OK ]
[ Handle Weapons - --- ]

Last edited by fearAR; 01-06-2013 at 20:45.
fearAR is offline
Send a message via MSN to fearAR
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 01-06-2013 , 20:55   Re: Ecuación. Recta que corta al plano.
#9

https://forums.alliedmods.net/showthread.php?p=477672

Esto uso yo (modificado) para determinar si una lasremine está dentro de una zona que yo determino. El plugin te permite crear un cubo o rectángulo (mientras lo editás se hace visible un rectángulo formado por 12 lineas) y le podés variar el tamaño... una vez que lo guardás, si ponés un laser dentro de ese cubo (que obviamente no se ve, es invisible) te lo devuelve. La cosa es que es un rectángulo estático... pero quizás te pueda ayudar algo del code.
__________________
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
gladius
Veteran Member
Join Date: Jul 2008
Location: Santiago, Chile
Old 01-06-2013 , 20:58   Re: Ecuación. Recta que corta al plano.
#10

Esperame 10 min y me contecto al pc y te ayudo.
__________________
Proyects
Kreedz Chile Mod [100%] (Fixing some details).


Last edited by gladius; 01-06-2013 at 20:58.
gladius is offline
Send a message via MSN to gladius Send a message via Skype™ to gladius
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 20:35.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode