Buenas a todos.
Me gustaría exponeros un problema que arrastro de hace un a par de días.
Tengo tres vértices A B C, con sus respectivas coordenadas, y los he de almacenar en un vector de tres posiciones, por ejemplo:
vector[0] = A
vector[1] = B
vector[2] = C
En este caso, el triangulo queda definido como A B C. Quiero ir una paso más allá, y partiendo de un primer vertice cualquiera (A B o C) definir los vértices del el triangulo en sentido horario (por el tema de las normales).
Se os ocurre algún sistema ?. Muchas gracias !!
Si hay alguna parte de este mensaje que haya quedado mal explicada, la vuelvo a redactar sin problema.
Muchas gracias otra vez !
Un saludo
No acabo de enteder lo que quieres decir.
Si coges el segundo vertice el orden sera BCA.
El tercer vertice CAB.
Y el primer vertice ABC.
Ya los estas guardando en el orden correcto, en las posiciones 0, 1 y 2.
Cita de: "samsaga2"No acabo de enteder lo que quieres decir.
Si coges el segundo vertice el orden sera BCA.
El tercer vertice CAB.
Y el primer vertice ABC.
Ya los estas guardando en el orden correcto, en las posiciones 0, 1 y 2.
Hola,
Primero de todo, muchas gracias por interesarte, te lo agradezco.
Fijate en siguiente ejemplo,entre paréntesis las coordenadas (x,y,z):
vertice A (0 1 0)
vertice B (1 0 0)
vertice C (-1 0 0)
El dibujo tendria esta forma:
A
/ \
C--B
Tengo los vertices y las coordenadas, y las de almacenar de forma correcta en el vector de 3 posiciones.
Partiendo de que el primer vertice es el A ( totalmente aleatorio, casi que me da igual que vértice sea el primero ), existen dos posibles definiciones para el triangulo:
A B C -> Sentido horario
A C B -> Sentido anti-horario
Pues bien, en este caso he de almacenar la primera definicion ( A B C ).
El problema es que me cuesta escribir "un cacho" de codigo de que tenga en cuenta cualquier posición de los vertices del triangulos y siempre guarde los vertices en sentido horario.
Gracias de nuevo.
Un saludo.
Hi,
a lo mejor lo que esta queriendo decir es como a partir de la segunda posicion del vector, accede a la tercera y luego a la primera.
Si es eso, yo creo que podrias jugar con los iteradores del vector, coger el iterador que apunte a la posicion actual, ir corriendolo y cuando llegue al final volver al principio hasta que se encuentre en la posición de arranque. Aunque tambien puede hacerlo usando un contador que recorra el vector y el modulo para acceder al vector.
Es muy sencillito, no se si preguntabas eso...
Un saludo,
Rubén
PD: Vale ya creo que se lo que quieres decir. Hay un algoritmo para ordenar los vertices en sentido horario. Se llama "Graham scan". Te dejo el link a ver si te ayuda: http://en.wikipedia.org/wiki/Graham_scan
No puedes hacerlo tomando en cuenta solo 3 vértices porque realmente el orden correcto depende de a que lado del triángulo te encuentres.
Necesitas un cuarto punto que defina la posición del semiespacio positivo (cara visible).
Cita de: "Ruben"
PD: Vale ya creo que se lo que quieres decir. Hay un algoritmo para ordenar los vertices en sentido horario. Se llama "Graham scan". Te dejo el link a ver si te ayuda: http://en.wikipedia.org/wiki/Graham_scan
Muchas gracias !
Ya tengo material para romperme los cuernos un buen rato :P. Ya te contaré como me ha ido.
Un saludo y muchas gracias otra vez.
Cita de: "senior wapo"No puedes hacerlo tomando en cuenta solo 3 vértices porque realmente el orden correcto depende de a que lado del triángulo te encuentres.
Necesitas un cuarto punto que defina la posición del semiespacio positivo (cara visible).
Hola,
Me parece que lo entiendo, el orden es distinto dependiendo a que lado del plano - trinagulo estés.
Si lo he dicho bien. Añado lo siguiente a mi primer post:
tengo los tres puntos A B C (sin colocar),
y un vector normal correcto ( que apunta hacia afuera )
Podria calcular las normales de las dos posibles definiciones del triangulo ( ABC y de ACB ).
Entonces tendria la normal correcta, y las dos normales de ABC y de ACB
Como averiguo cual de las dos normales (la de ABC y la de ACB) se "parece" mas a la normal correcta ?
He probado lo siguiente: comparo los signos de los componentes (de la normal correcta y la del trangulo ABC o ACB) y si tienen los mismos signos la normal correcta y la del triangulo, considero el triangulo bien definido, esto me resuleve la gran mayoria de casos pero no todos, (solo que no coincida algun signo de alguna componente x y z, ya no lo considera bien definido).
Espero que se entienda, si necesitais que lo vuelva a redactar sin problema!
Muchismas gracias por vuestro tiempo.
Un saludo.
Así de repente se me ocurre que con conocer el sentido correcto de un polígono y estando todos conectados con algún otro, puedes averiguar el orden de cada vértice de un polígono conociendo el sentido de cualquiera de los que comparta dos vértices.
no sé si me explico o si estaré en lo cierto.
Citar
Si lo he dicho bien. Añado lo siguiente a mi primer post:
tengo los tres puntos A B C (sin colocar),
y un vector normal correcto ( que apunta hacia afuera )
Podria calcular las normales de las dos posibles definiciones del triangulo ( ABC y de ACB ).
Entonces tendria la normal correcta, y las dos normales de ABC y de ACB
Normalizándolas debería darte el mismo resultado.
Los componentes de la normal a la que debe mirar la cara y los de la que ya conoces deberán tener todos el mismo signo.
¿no es eso?
Cita de: "marcode"Los componentes de la normal a la que debe mirar la cara y los de la que ya conoces deberán tener todos el mismo signo.
¿no es eso?
Hola,
Si !, es la técnica con que mejores resultados he obtenido, y sinceramente creo que es la que presentaré, aunque me mosquea un poco. Usando este método, (comparar el signo de cada componente (x,y,z) de la normal correcta, con el signo de cada componente de la normal obtenida y si son iguales -> OK ) se dan situaciones en que no funciona, En la malla de triangulos aparecen unos pocos (4 o 5 de unos 5000 ) con la normal invertida.
Supongo, y me estoy tirando a la piscina ( quizá me equivoque ), que se pueden dar situaciones en que algun componente no coincida en signo, pero las dos normales sean salientes respecto el mismo punto exterior.
Cualquier consejo o ayuda, soy todo orejas.
Gracias por tu interés
Un saludo
A ver, a ver, hay algo que no entiendo en todo esto. Tengo los vertices A, B, C y una normal correcta n. Lo único que necesito es saber si el orden A, B, C me orienta el triángulo de forma que la normal obtenida de ese orden apunte en la misma dirección a la normal correcta. ¿No?
Porque si es eso creo que del punto de vista matemático-geométrico bastaría ver si
(BA x CA) · n
es positivo o no. ( 'x' es producto vectorial y '·' escalar, BA y CA son vectores diferencia )
¿O hay algo que no entiendo?
Es que eso de comparar signos no me agrada, la verdad :-P
Cita de: "tito"Como averiguo cual de las dos normales (la de ABC y la de ACB) se "parece" mas a la normal correcta ?
Hola tito,
Como has dicho antes, los signos de las componentes no te van a funcionar en todos los casos. Lo que tienes que hacer es calcular el ángulo entre los dos vectores. Uno de los dos te saldrá menor de 90 grados, ese es el que te interesa.
un saludo
Hola,
fiero, gdl, gracias por vuestro interés.
Gracias a vuestras últimas indicaciones ya lo he conseguido, tengo a todos los triángulos "mirando pal frente".
Gracias a todos los que havéis aportado ideas y hasta otra.
Un saludo.
PD: Si, lo de mirar los signos, es un poco mmmh "chapuzilla", pero era lo mejor que tenia :roll: