[Archives] Mathématiques pures, physique, chimie, etc. : problèmes d'entraînement cérébral sans rapport avec le commerce. - page 557

 

Cela semble fonctionner pour l'image plate. Il me semble que cela fonctionnera également pour le cas à N dimensions. Des objections ?

Il me semble qu'il est temps d'écrire un script et de le vérifier... :)

 

Le vecteur normal à l'unité donnée peut être construit plus facilement - il suffit de remplacer l'une de ses coordonnées xi par -sqrt(1-xi^2). Cela équivaut en fait à une rotation de 90 degrés dans le plan du vecteur par rapport au i-ème axe (c'est-à-dire qu'en remplaçant le cosinus par le -sinus, on obtient le cosinus de l'angle+pi/2). Après cela, il ne reste plus qu'à normaliser le résultat.

Mais ce n'est pas du tout un fait que l'on puisse obtenir un vecteur normal à tous les autres de l'ensemble de cette manière. Ainsi que toute autre méthode qui sélectionne un vecteur normal parmi toutes les variantes...

 
alsu:

Le vecteur normal à l'unité donnée peut être construit plus facilement - il suffit de remplacer n'importe laquelle de ses coordonnées xi par -sqrt(1-xi^2). Cela équivaut en fait à une rotation de 90 degrés des pôles du vecteur par rapport au i-ème axe (c'est-à-dire que si l'on remplace le cosinus par le -sinus, on obtient le cosinus de l'angle +pi/2). Après cela, il ne reste plus qu'à normaliser le résultat.

Mais ce n'est pas du tout un fait que l'on puisse obtenir un vecteur normal à tous les autres de l'ensemble de cette manière. Ainsi que toute autre méthode qui sélectionne un vecteur normal parmi toutes les variantes...

Exactement. Pas dans le cas général.

--

Il semble que j'ai trouvé une solution rapide. Quand je me suis assis pour écrire et me détendre sur l'algorithme, il est apparu comme ça.

Ainsi, à partir du vecteur généré x1r, il suffit de soustraire sa projection sur x0 (c'est-à-dire x0*sp(x0,x1r), où sp() est le produit scalaire).

En résumé, la formule tient en une ligne : x1 = x1r - x0*sp(x0,x1r);

:))

 
En bref, la formule en une ligne : x1 = x1r - x0*sp(x0,x1r) ;

:))

Oui. Mais tu dois le rapprocher après.

Bon de toute façon en une ligne : x1 = norm(x1r - x0*sp(x0,x1r))

 
MetaDriver:

Cela semble fonctionner pour l'image plate. Il me semble que cela fonctionnera également pour le cas à N dimensions. Des objections ?

On dirait qu'il est temps d'écrire un script et de vérifier... :)

Tu n'as pas besoin de l'écrire. Preuve :

sX = (a1+b1,a2+b2) ; dX = (a1-b1,a2-b2) ;

Les vecteurs a et b étant des vecteurs unitaires, le parallélogramme correspondant est un losange et ses diagonales sont perpendiculaires, de sorte que la somme et la différence sont orthogonales entre elles. Ainsi, l'échange de modules équivaut à tourner l'un d'eux de 90 degrés vers la droite et l'autre vers la gauche. En coordonnées cartésiennes, nous pouvons exprimer cela simplement en réarrangeant les première et deuxième coordonnées :

sXtr = (a2-b2,a1-b1) ; dXtr = (a2+b2,a1+b1)

=>

sXtr+dXtr = (2*a2,2*a1) est un vecteur modulo 2 et évidemment orthogonal au vecteur (a1,a2), c'est-à-dire au vecteur a. H.t.c.

 
Il ne reste plus qu'à tourner en boucle. for(i=0 ; i<InpVectorCount ; i++) {....}
 
MetaDriver:
Il ne reste plus qu'à tourner en boucle. for(i=0 ; i<InpVectorCount ; i++) {....}
Non, il s'agit toujours de sélectionner initialement le bon vecteur "arbitraire", qui donnera finalement l'orthogonalité à l'ensemble. C'est-à-dire que l'arbitraire s'avère ne pas être arbitraire du tout. Nous revenons encore une fois sur la façon de calculer le vecteur initial requis.
 
alsu:
Non, il s'agit toujours de choisir initialement le bon vecteur "arbitraire", qui donnera l'orthogonalité à l'ensemble. C'est-à-dire que l'arbitraire n'est même pas arbitraire du tout. Nous revenons encore une fois sur la façon de calculer le vecteur initial requis.
Conneries. Je vérifie à chaque étape. Si, à une étape quelconque de la transformation, un vecteur devient contigu au suivant dans l'ensemble, nous générons à nouveau un vecteur aléatoire initial et répétons la procédure. Comme ce cas est peu probable (avec une dimension finie), c'est plus facile (moins cher) que de suspecter immédiatement une dépendance linéaire (en cherchant le rang de la matrice).
 
MetaDriver:
Conneries. Il suffit de vérifier à chaque étape. Si, à une étape quelconque de la transformation, un vecteur devient contradictoire avec le vecteur suivant de l'ensemble, nous générons à nouveau le vecteur aléatoire initial et répétons la procédure. Comme ce cas est peu probable (avec une dimension finie), c'est plus facile (moins cher) que de suspecter immédiatement une dépendance linéaire (en cherchant le rang de la matrice).
Il peut ne pas être co-dirigé, mais simplement former un angle indirect avec tous ou certains vecteurs.
 
MetaDriver:
Conneries. Il suffit de vérifier à chaque étape. Si, à une étape quelconque de la transformation, un vecteur devient contradictoire avec le vecteur suivant de l'ensemble, nous générons à nouveau le vecteur aléatoire initial et répétons la procédure. Comme ce cas est peu probable (avec une dimension finie), c'est plus facile (moins cher) que de suspecter immédiatement une dépendance linéaire (en cherchant le rang de la matrice).
Et c'est moins cher car le produit scalaire doit encore être calculé (par l'algorithme). S'il s'avère être égal à un, nous revenons au début et répétons le processus. C'est-à-dire qu'à chaque étape, il suffit de vérifier si(cp(a,b) ! = 1.0) {}