Para obtener el plano de un poligono se saca la normal de este y luego se resuelve "d".
Pero resulta que me parece que la forma de sacar d, puede variar, lo encuentro basicamente asi:
d=dot(n,p);
d=-dot(n,p);
n es la normal, p un punto en el plano y dot() la funcion de dot product. La segunda la suelo encontrar en temas de OpenGL (mano derecha), y la primera en sistemas que parece ser que tiran de mano izquierda.
Estoy en un error y solo una es valida?? por que el resultado para calcular colisiones puede cambiar del todo, y si es asi, cual es valida??? o se usan segun el sistema de coordenadas!??!?
(nooo) (nooo) (asco) En fin esta es una de esas cosas tan entretenidas como los vectores fila y los vectores columnas y su mania de hacer las cosas del reves el uno del otro.... y yo que no los sigo.....
Gracias, y saludos.
Creo que depende de si la ecuación es implícita o explícita:
ax+by+cz+d=0
ax+by+cz=d
Como sabras el vector (a,b,c) es la normal y, si el punto (x,y,z) pertenece al plano, entonces ax+by+cz es dot(n,p). Sustituyendo en las ecuaciones de arriba
dot(n,p)+d=0 => dot(n,p)=-d
dot(n,p)=d
Espero que te sirva de algo.
Normalmente la ecuación que se utiliza es ax+by+cz+d=0, así que ya sabes.
Bien, usare la "-dot(n,p);" como norma habitual..... espero hacer bien... :rolleyes:
Saludos.
PD:Cualquier comentario filosofico matematico o de standares bla bla bla es bien venido.
Metidos en esto me ha asaltado una duda básica.
Si hubiese sabido en clase de matemáticas que me hubiera servido para esto habría prestado más atención, en fin, me jodo por payaso...
D es la distancia del plano al origen (0,0,0). Encontes como hay que interpretar el resultado del producto escalar (ax+by+cz) para que sumado a D de 0. ¿es la distancia de ese punto al origen pero de signo opuesto?
Iluminarme please!!!
Un saludo.
Si no recuerdo mal, la "d" es igual a la distancia (mínima) del plano al origen dividido por la magnitud de la normal (a,b,c). Luego si esta está normalizada, d = distancia al origen.
En efecto, no es la distancia a no ser que la normal sea un vector unitario. Además, eso explica por qué aparece un signo negativo en la ecuación implícita.
Pongo un post que he visto en gamedev:
I recently changed my math code base about it due to SIMD optimizations. So I just wondered :
Question what convention are you using ?
(1) Plane.N * P + Plane.d; // (* P.w), * being the dot prod
or
(2) Plane.N * P - Plane.d
In other words, for you, does the signed distance d (projected on the normal
axis) mean :
Plane to Origin (1)
or
Origin to plane (2)
Por lo que dice aquí parece que es por convención.
Gracias por la anterior aclaración Colson.
Un saludo.
Osea que :
d=dot(n,p); -> Es de plano al origen
y
d=-dot(n,p); -> Es de origen al plano
Si entiendo bien....
No siempre porque la normal puede orientarse hacia dos sentidos distintos. Sólo cuando esté orientada hacia el origen será verdad lo que has dicho.
Cita de: "_Grey"Osea que :
d=dot(n,p); -> Es de plano al origen
y
d=-dot(n,p); -> Es de origen al plano
Si entiendo bien....
De plano al origen o de origen a plano ¿el qué? Si te refieres a la distancia, una distancia siempre es positiva, así que toma el valor absoluto y ya está.
¿O es que si de Madrid a Barcelona hay X kilómetros, de Barcelona a Madrid hay -X?
A ver...
---------O
---------|\
---------|-\
-------N |--\r
-------d |--- \
---------|-----\
**********P***********plano !Vaya gráfico!
O = Origen(0,0,0)
N = Normal al plano
d = Distancia del plano en su punto más cercano (la perpendicular)
r = Vector OP o PO
P = Punto del plano
Proyectando el vector r sobre N obtenemos d:
d =N.r/|N|
Tomando R como (P - O) entonces R = P
d*|N| = N1r1 +N2r2 + N3r3 que es lo mismo que D = Ax + By + Cz;
Si tomamos R como (O - P) entonces es -R
d*|N| = -N1r1 -N2r2 -N3r3 que es lo mismo que Ax + By + Cz = -D
A todo esto si la normal está normalizada por un buen normalizador D sería igual a d.
Bueno que esto lo revise un matemático de verdad y me ponga verde.
Un saludo