Cercar en aquest blog

dimecres, 10 de març del 2010

Selecció de cares

M'he adonat que l'algorisme que estava utilitzant per a determinar quina cara es seleccionava no era del tot correcte.
Per a trobar la cara seleccionada, per a cada cara pertanyent al cos, cal calcular el pla que aquesta formava. Llavors trobava el punt d'intersecció entre aquest pla i el raig que es genera al fer el click amb el ratolí (això ja ho explicaré en un altre punt, si cal; només ens hem d'imaginar un raig des de l'origen de l'observador fins allà on fem clic).
Un cop obtenim aquest punt, hem de determinar si forma part o no del polígon.

El que estava fent fins ara era mirar les x,y,z mínimes i màximes dels vèrtexs dels polígons, i si les coordenades del punt d'intersecció amb el pla queien dins aquest marge, considerava que el punt pertanyia al polígon.

Ara bé, això només funcionarà per a polígons quadrilàters amb forma de rectangle!
A la que treballo amb polígons triangulars i paral·lelograms no rectangulars, l'algorisme falla.

El que necessito, doncs, és un algorisme que donat un triangle i un punt, em digui si aquest punt forma part del triangle. Un cop sàpiga trobar això, serà aplicable directament pels polígons triangulars. Quan als quadrilàters, hauré de dividir-los en dos triangles per a fer aquesta comprovació en cada una de les dues meitats triangulars.

Buscant per internet, m'he trobat amb aquesta pàgina web:
http://mathforum.org/library/drmath/view/54503.html

Explica com saber si un punt forma part d'un triangle. El que passa és que ho explica amb equacions en el pla, no a l'espai.
Bé a dir que donat un triangle ABC i un punt P, per a saber si P està dins l'àrea d'ABC hem de fer les següents comprovacions:
- Donada la recta AB, l'equació d'aquesta recta pel punt C ha de donar un resultat de símbol igual que pel punt P. Altrament podem assegurar que P no forma part d'ABC, ja que voldria dir que P cau a l'altra banda de la recta AB que C.
- Fer el mateix càlcul per a les rectes AC (amb els punts B i P) i BC (amb els punts A i P).

Treballant amb 3 coordenades, he pensat que el millor serà trobar les equacions de les rectes de la forma
(x-x0) / (v_x) = (y-y0) / (v_y) = (z-z0) / (v_z)

D'aquesta manera, trobaré les 3 rectes AB, AC i BC.
Pel cas AB, haurè de comprovar que els numeradors de les 3 expressions tinguin el mateix signe pel punc C que pel punt P; així mateix faré les comprovacions per les altres dues rectes.




Bé, aquest és el problema que he estat resolent avui. Quan el tingui acabat, penjaré la nova versió del programa, que ja ha estat restructurat tal i com vaig dir que faria.