Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Definicion en sentido horario de los vértices de un triangul

Iniciado por tito, 28 de Agosto de 2006, 02:08:57 PM

« anterior - próximo »

tito

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

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.

tito

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.

Ruben

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

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

tito

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.

tito

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.

marcode

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.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

marcode

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.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

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?
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

tito

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

gdl

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

fiero

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
www.videopanoramas.com Videopanoramas 3D player

tito

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:






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.