Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Problème pour calculer les pondérations d'un barycentre

Posté par
Drown
31-05-12 à 03:05

Tout d'abord bonjour à la communautée.
Je vais tout d'abord exposer le sujet sur lequel je travail pour ensuite vous parler de mon problème.
Afin de pouvoir effectuer à partir d'un programme des images de synthèse, je dois calculer des intersections entre divers objets tels que la sphère, le plan ou encore le cylindre. Ces objets étant limités, je souhaite passer à une méthode utilisé pas des logiciels de 3D : la représentation d'un objet par une multitude de triangles ou de parallélogrames.
Afin de calculer si le rayon que j'envoie parcourir sur ma scene touche une objet, dans le cas du triangle, je dois calculer tout d'abord le point d'intersection entre le plan formé par le triangle et mon rayon projetté. Ensuite il faut que je détermine si ce point obtenu se situe dans le triangle ou est a l'exterrieur, ce qui me permettra de savoir la couleur que je doit afficher sur le pixel séléctionné.

On peut maintenant parler maths, je vais reprendre tout mes calculs depuis le début jusqu'à mon soucis actuel.

Tout d'abord il faut calculer la distance entre ma caméra (un point de mon rayon que je lance) et mon plan.
Pour représenter cela, appelons le triangle ABC dont les coordonnées de chaque sommet sont connues celui avec lequel je dois trouver une intersection et le point O la position de la caméra (connu aussi).
Pour commencé j'ai calculé les vecteurs AB et AC qui déterminent mon plan. Ensuite j'ai calculé le vecteur normal (que nous allons appeler n) en faisant un produit vectoriel des deux vecteurs calculés précédaments. Grace à ce vecteur, je peux donc calculer la distance entre mon oeil (O) et mon plan (qui représente le triangle).
La formule utilisée est : k = |(nx * (0x - xA) ny * (Oy - yA) + nz * (0z - zA)) / (sqrt(nx2 + ny2 + nz2))|

Grace à l'affichage graphique que j'obtiens, celon les points du triangle, mon plan s'orriente bien, je ne pense donc pas avoir de soucis dans cette partie.

C'est ici que ca se corse. Grace à cette distance je peux calculer les coordonnée du point I intersection entre mon rayon projeté et mon plan.
Je pose donc I barycentre de (A, a) (B, b) (C, c).
Je dois donc calculer les coefficients a, b et c, car s'ils sont tous positifs mon point se situera dans le triangle et c'est gagné, sinon ce n'est pas bon et je ne change donc pas la couleur de mon pixel.
Le problème c'est que je n'arrive pas à trouver une équation générale disant a = ..., b = ... et c = ..., avec dans chaque équation non pas des chiffres mais des variables.
Si vous souhaitez que je précise mon problème, merci de l'indiquer à la suite.

Pour ce qui est de mes pistes :
Je sais que xI = (a * xA + b * xB + c * xC) / (a + b + c). De même pour le y et le z en remplacant les x par y ou z.
On peux ignorler le coefficient a puisqu'on peux le diviser par a pour qu'il donne 1 ce qui nous rammene à xI = (xA + b * xB + c * xC) / (b + c).
J'isole donc b, après plusieures modifications j'arrive à :
b = ((yI - yC) * xA - (xG - xC) * yA) / ((xG - xB) * (yG - yC) - (yG - yB) * (xG - xC))

Grace à cela je peux réinjecter le b dans l'équation plus haut pour trouver le c.
Mais ceci ne me donne aucun résultat concluant. (Valeurs toutes égales à 99000...)
Si vous aurriez une piste pour que je puisse résoudre mon problème je suis preneur.

Cordialement,
Drown

Posté par
lafol Moderateur
re : Problème pour calculer les pondérations d'un barycentre 31-05-12 à 14:28

bonjour

déjà quand tu remplace a par 1, a+b+c devient 1+b+c et pas b+c

ensuite je me demande s'il ne serait pas aussi simple de diviser par a+b+c, qui est toujours non nul, plutôt que par a, qui lui peut être nul si I est sur (BC)

tu cherches donc les coeff a, b et 1-a-b tels que \vec{MI} = a\vec{MA} + b\vec{MB} +(1-a-b)\vec{MC} pour M quelconque. par exemple pour M = C :

\vec{CI} = a\vec{CA} + b\vec{CB}

un moyen d'éliminer a serait de calculer le produit scalaire de tout ceci avec un vecteur orthogonal à \vec{CA} mais pas à \vec{CB}, histoire de pouvoir en déduire b, puis même méthode pour obtenir a

Posté par
lafol Moderateur
re : Problème pour calculer les pondérations d'un barycentre 31-05-12 à 14:30

avec les balises LaTeX c'est plus lisible :

déjà quand tu remplace a par 1, a+b+c devient 1+b+c et pas b+c

ensuite je me demande s'il ne serait pas aussi simple de diviser par a+b+c, qui est toujours non nul, plutôt que par a, qui lui peut être nul si I est sur (BC)

tu cherches donc les coeff a, b et 1-a-b tels que \vec{MI} = a\vec{MA} + b\vec{MB} +(1-a-b)\vec{MC} pour M quelconque. par exemple pour M = C :

\vec{CI} = a\vec{CA} + b\vec{CB}

un moyen d'éliminer a serait de calculer le produit scalaire de tout ceci avec un vecteur orthogonal à \vec{CA} mais pas à \vec{CB}, histoire de pouvoir en déduire b, puis même méthode pour obtenir a

Posté par
Drown
re : Problème pour calculer les pondérations d'un barycentre 31-05-12 à 15:57

Bonjour,
J'ai remarqué aussi que j'avais pas pris en compte le a = 1, j'ai retesté avec le a = 1, celà ne fonctionne toujours pas.
Je me penche sur ce que tu m'as expliqué.
Pour en déduire b je dois donc trouver un vecteur orthogonal à \vec{CA}, j'ai \vec{n} qui l'est mais il est aussi orthogonal à \vec{CB} puisque c'est le vecteur normal de mon plan. Je suis vraiment perdu dans ces problèmes de vecteurs...
Donc mon soucis est de trouver un vecteur orthogonal mais comment faire? Je sais que pour q'uil y ait l'orthogonalité le produit scalaire doit être nul. Je posède deux formules de produit scalaire. Il faut partir dans cette direction?

Cordialement,
Drown

Posté par
Drown
re : Problème pour calculer les pondérations d'un barycentre 31-05-12 à 17:48

Désolé du double post.
J'ai recherché un peu et je crois avoir mieux compris comment obtenir b.
Dit moi si j'ai bon :
Soit \vec{v} un vecteur orthogonal à \vec{CA}
\vec{CI}.\vec{v} = (a\vec{CA} + b\vec{CB}).\vec{v}
Eq à : \vec{CI}.\vec{v} = a\vec{CA}.\vec{v} + b\vec{CB}.\vec{v}
Eq à : \vec{CI}.\vec{v} = b\vec{CB}.\vec{v}
Car \vec{CA} est orthogonal à \vec{v}

Apres il suffirait de changer par des coordonnées des vecteurs pour avoir b. Après je suis pas totalement sur de moi et il me manque le vecteur \vec{v} que je ne sais pas comment calculer.

Cordialement,
Drown

Posté par
Drown
re : Problème pour calculer les pondérations d'un barycentre 31-05-12 à 20:08

Un petit up pour une réponse? On cherche à deux sur le calcul su vecteur orthogonal à CA, mais on trouve pas.

Posté par
lafol Moderateur
re : Problème pour calculer les pondérations d'un barycentre 31-05-12 à 23:59

si un vecteur a pour coordonnées (x,y,z), le vecteur (-y, x,0) par exemple lui est orthogonal....

Posté par
Drown
re : Problème pour calculer les pondérations d'un barycentre 01-06-12 à 00:58

Ah merci je ne le savais pas du tout. Je vais calculer tout ca alors, je te remercie.
Une autre question, j'ai la distance entre mon oeil et le point d'intersection de mon rayon projeté comment calculer les coordonnée du point d'intersection?
Je prends le vecteur normal du plan ou le vecteur directeur de la droite pour pouvoir faire x = xO + k * \vec{v} et de même pour les autres vecteurs?

Posté par
lafol Moderateur
re : Problème pour calculer les pondérations d'un barycentre 01-06-12 à 14:12

oulah ! des nombres égaux à des objets bizarroïdes sommes de nombres et de vecteurs ?

en plus j'avais lu en diagonale le début ...
je ne comprends pas bien ton histoire de distance entre ton oeil et le plan ?
qu'est-ce qui prouve que le rayon lumineux qui part de ton oeil sera perpendiculaire au plan de l'objet ?

Posté par
Drown
re : Problème pour calculer les pondérations d'un barycentre 01-06-12 à 19:18

En fait on s'est appercu qu'il était impossible de déterminer les points en position non simple dans un repaire. Du coup, on a du changer tout nos caluls. Mais plus rien ne fonctionne et le projet étant a rendre pour la fin de semaine je pense abandonner. Par contre cela m'intéresse de les avoir, même après la date du rendu.
Du coup si l'on repars du début. Je calcul les angles du plan pour pouvoir le mettre en position simple (c'est à sir z = 0 pour le plan). On passe ensuite au calcul du point d'intersection avec le vecteur directeur de ma droite et mon plan en position simple. Du coup on obtiens un k qui résouds l'équation : xI = xO + k * \vec{v} (v étant le vecteur directeur.
Après on a le point d'intesection et avec l'équation xI = axA + bxB + (1 - a - b)xC. De même pour y et z. En résolvant ces équations, on obtiens a et b et si a >= 0 et b >= 0 et a + b <= 1 alors il y a intersection avec le triangle.
Mais je ne trouve pas les bonnes valeurs à chaque foi, et du coup je n'ai pas de point d'intersection valide pour mon triangle. Rien ne s'affiche donc à l'écran.
Si tu peux voir si au moins ma méthode est bonne, après ce sont des erreurs de calcul qui sont assez dur à voir dans du code, ce qui m'embête pas mal...

Cordialement,
Drown

Posté par
lafol Moderateur
re : Problème pour calculer les pondérations d'un barycentre 04-06-12 à 18:34

x_I = x_O + k . \vec{v}

quel sens tu donnes à ça ?

Posté par
Drown
re : Problème pour calculer les pondérations d'un barycentre 05-06-12 à 10:34

Ca donne : la coordonnée x de l'intersection est égal à la position de l'oeil additionné à k multiplié par le vecteur directeur de la droite. k étant un coefficient déterminant le nombre de fois qu'il y a le vecteur directeur pour arriver jusqu'au point d'intersection. En gros c'est une équation paramétrique de droite où l'on remplace les données dedant.

Posté par
lafol Moderateur
re : Problème pour calculer les pondérations d'un barycentre 10-06-12 à 23:03

je n'arrive toujours pas à imaginer ce que donne la "somme" d'un nombre et d'un vecteur ....



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !