Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1489 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  [Algo] 3D : 2 Vecteurs Perpendiculaire à leurs points d'aplication.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Algo] 3D : 2 Vecteurs Perpendiculaire à leurs points d'aplication.

n°184276
Slide
Posté le 27-07-2002 à 15:29:17  profilanswer
 

Je realise un programme de 3D ou il sera possible de ce deplacé comme dans un jeu, mais pour les deplacements il me faut calculé certain truc, alors si quelqu'un pouvais m'aidais, je serais heureux :)
 
 
Un schema du probleme :
 
http://www.ifrance.com/yepslide/Pict0006.png
 
Ce que je sais, et que je dois trouver :
 
On connait les coordonnées des points A et B.
Les 2 vecteurs sont perpendiculaire en B.
La longeur de [BC] est de 1.
 
Trouvé les coordonnées du point C en fonction des coordonnées A et de B.
 
A(Xa,Ya);
B(Xb,Yb);
C(Xc,Yc);


Message édité par Slide le 27-07-2002 à 15:43:44
mood
Publicité
Posté le 27-07-2002 à 15:29:17  profilanswer
 

n°184279
mareek
Et de 3 \o/
Posté le 27-07-2002 à 15:39:43  profilanswer
 

c'est impossible de résoudre ce pb. En 2D il y a 2 solutions (C et sont symetrique par rapport à (AB) ) et en 3D il y en a une infinité (tous les points du plan contenant B et  perdendiculaire au vecteur AB qui sont à une disatnce de 1 du point B)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°184282
Slide
Posté le 27-07-2002 à 15:42:24  profilanswer
 

mareek a écrit a écrit :

c'est impossible de résoudre ce pb. En 2D il y a 2 solutions (C et sont symetrique par rapport à (AB) ) et en 3D il y en a une infinité (tous les points du plan contenant B et  perdendiculaire au vecteur AB qui sont à une disatnce de 1 du point B)




 
 
C'est dans un plan 2D, jai pas mis d'axe Z ;) : Donc c possible de résoudre puisque c'est pas en 3D (d'accord, le topic laisse desiré, mais, c'est pour faire de la 3D ce calcul, une fois que je l'aurais resulo, je pourrais me deplacé sur l'axe X et Y :).
Z, c'est pour plus tard.
 
Vous m'aidez :) ? svp
 
Au faite, j'ai modifier le 1er Message :
 

Slide a écrit a écrit :

 
Trouvé les coordonnées du point C en fonction des coordonnées A et de B.




 


Message édité par Slide le 27-07-2002 à 15:45:02
n°184300
youdontcar​e
Posté le 27-07-2002 à 16:19:30  profilanswer
 

A-B ( (xA-xB, yA-yB) ) te donne le vecteur directeur BA donc sur ton dessin (-4, 4) à peu près ...
 
formule de rotation d'un point / d'un vecteur dans le sens trigo :
 
x' = x*cos(a) - y*sin(a)
y' = x*sin(a) + y*cos(a)
 
(tu retrouves facilement cette formule avec un dessin)
 
ici, a = -pi/2, donc cos(a) = 0, sin(a) = -1
 
donc  
x'= y
y'= -x
 
ton vecteur directeur tourné est donc  
 
(yA - yB, - (xA - xB))
 
* tu le normalises pour trouver un vecteur unitaire : v1
* ton point C est alors B + v1 * l, où l est la distance entre B et C, ici 1.
 
edit : erreurs de signe :/


Message édité par youdontcare le 27-07-2002 à 16:22:08
n°184329
Slide
Posté le 27-07-2002 à 17:34:07  profilanswer
 

youdontcare a écrit a écrit :

A-B ( (xA-xB, yA-yB) )  
* tu le normalises pour trouver un vecteur unitaire : v1
* ton point C est alors B + v1 * l, où l est la distance entre B et C, ici 1.




 
Merci :) Je chercher avec une quelqu'un, et on trouvait des equations de 200 lignes lol :)  
 
En resumé, ca donne ceci non ?
 
BD etant le vecteur realisé avec la formule de rotation que tu as donné.
 
->                        
V1 = ((Ya-Yb)/BDx ; -(Xa-Xb)/BDy)
 
Et C = (Bx + V1x ; By + V1y)
 
C'est bien ca ?
 
Edit : Ajout d'information sur l'origine du point D


Message édité par Slide le 27-07-2002 à 17:38:23
n°184340
Slide
Posté le 27-07-2002 à 17:47:36  profilanswer
 

Slide a écrit a écrit :

 
->                        
V1 = ((Ya-Yb)/BDx ; -(Xa-Xb)/BDy)




 
 
Heu, ca va donné (1;1) ca non lol ?
Arf, je n'arrive pas à normalisé... :(
 
hummm, ce serai pas plutot la longeur du vecteur BD ?
 
Ca donnerai ca donc non ?
 
->                        
V1 = ((Ya-Yb)/BD ; -(Xa-Xb)/BD)


Message édité par Slide le 27-07-2002 à 17:49:21
n°184358
youdontcar​e
Posté le 27-07-2002 à 18:06:31  profilanswer
 

>>hummm, ce serai pas plutot la longeur du vecteur BD ?  
 
si.
 
normaliser un vecteur = faire en sorte que sa norme (sa longueur) fasse 1.
 
norme d'un vecteur (x, y) = racine(x*x + y*y) = n.  
donc (x/n, y/n) est le vecteur normalisé (preuve, calcule sa norme).
 
tu en es où scolairement ? tout ça c'est la base de l'algèbre linéaire, tu devrais chercher des cours sous google.

n°184360
Slide
Posté le 27-07-2002 à 18:12:05  profilanswer
 

youdontcare a écrit a écrit :

>>hummm, ce serai pas plutot la longeur du vecteur BD ?  
 
si.
 
normaliser un vecteur = faire en sorte que sa norme (sa longueur) fasse 1.
 
norme d'un vecteur (x, y) = racine(x*x + y*y) = n.  
donc (x/n, y/n) est le vecteur normalisé (preuve, calcule sa norme).
 
tu en es où scolairement ? tout ça c'est la base de l'algèbre linéaire, tu devrais chercher des cours sous google.




 
En faite, c'est parce que j'ai trop de variable lol, et je commence a avoir bcp de code lol, c'est un programme en Delphi.
Bon ca devrait donner ca donc :)
 

Code :
  1. Vk_Right : begin      //droite
  2.                    VecteurABpx:= (positionCamZD-positionCamZT);
  3.                    VecteurABpy:= -(positionCamXD-positionCamXT);
  4. VecteurBCx:= VecteurABpx div trunc(sqrt((VecteurABpx)*(VecteurABpx) + (VecteurABpx)*(VecteurABpx)));
  5. VecteurBCy:= VecteurABpy div trunc(sqrt((VecteurABpx)*(VecteurABpx) + (VecteurABpx)*(VecteurABpx)));
  6.                  positionCamXT:=positionCamXT+VecteurBCx;
  7.                  positionCamZT:=positionCamZT+VecteurBCy;
  8.                    end;


 
Ca devrait deplacé la camera a droite :)


Message édité par Slide le 27-07-2002 à 18:13:32
n°184364
youdontcar​e
Posté le 27-07-2002 à 18:22:59  profilanswer
 

ton code n'est pas très lisible. si tu veux faire de la 3d, il est impératif que tu utilises des classes point, vecteur, matrice & co et que tu surcharges les opérateurs addition, multiplication, etc.  
 
un exemple c++ (ça doit être kif kif en delphi) si tu as une classe point/vecteur 2d, qui contient ses coordonnées x et y, des opérateurs d'addition, le calcul de norme ... :
 
// définition de tes deux points
Point A = Point(-3, 2);
Point B = Point(1, -3);
 
// calcul du vecteur directeur, rotation, normalisation pour avoir un vecteur unitaire
Point vD = A - B;  
vD.rotate(-PI/2);
vD.normalize();
 
// et hop !
Point C = B + vD;
 
non, je n'ai pas envie de debugguer ton code delphi. tu as tous les éléments pour calculer ton point, mais tu ne devrais pas mettre la charrue avant les boeufs. donc : potasse le code objet, potasse tes cours (si tu n'en as pas eu, google), et ensuite code.

n°184380
Slide
Posté le 27-07-2002 à 18:40:14  profilanswer
 

Code :
  1. Vk_Right :  begin      //gauche
  2.                    VecteurABpx:= -(positionCamZD-positionCamZT);
  3.                    VecteurABpz:= (positionCamXD-positionCamXT);
  4.                    VecteurBCx:= VecteurABpx div trunc(sqrt((VecteurABpx)*(VecteurABpx) + (VecteurABpz)*(VecteurABpz)));
  5.                    VecteurBCz:= VecteurABpz div trunc(sqrt((VecteurABpx)*(VecteurABpx) + (VecteurABpz)*(VecteurABpz)));
  6.                    positionCamXT:=positionCamXT+VecteurBCx;
  7.                    positionCamZT:=positionCamZT+VecteurBCz;
  8.                    positionCamXD:=positionCamXD+VecteurBCx;
  9.                    positionCamZD:=positionCamZD+VecteurBCz;
  10.                    end;
  11. Vk_left : begin      //droite
  12.                    VecteurABpx:= (positionCamZD-positionCamZT);
  13.                    VecteurABpz:= -(positionCamXD-positionCamXT);
  14.                    VecteurBCx:= VecteurABpx div trunc(sqrt((VecteurABpx)*(VecteurABpx) + (VecteurABpz)*(VecteurABpz)));
  15.                    VecteurBCz:= VecteurABpz div trunc(sqrt((VecteurABpx)*(VecteurABpx) + (VecteurABpz)*(VecteurABpz)));
  16.                    positionCamXT:=positionCamXT+VecteurBCx;
  17.                    positionCamZT:=positionCamZT+VecteurBCz;
  18.                    positionCamXD:=positionCamXD+VecteurBCx;
  19.                    positionCamZD:=positionCamZD+VecteurBCz;
  20.                    end;


 
Voilà, ca marche un peu, jai quelque bug, je vais trouvé ca.
Bon, k, je vais utilisé les variables prevu pour X et Y :), en faite, j'ai eu une TI 80 à mes 12 ans, et j'ai pris l'habitude de tt stocké comme ca lol ;p
 
Va falloir que je change.


Message édité par Slide le 27-07-2002 à 18:40:43
mood
Publicité
Posté le 27-07-2002 à 18:40:14  profilanswer
 

n°184616
LeGreg
Posté le 28-07-2002 à 00:45:44  profilanswer
 

[OT]euh pourquoi mettre des lol a toutes les phrases?
on se croirait sur le chat caramail.. [/OT]
 
LeGreg


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  [Algo] 3D : 2 Vecteurs Perpendiculaire à leurs points d'aplication.

 

Sujets relatifs
[xml] qq un pourrait me briefé les 5 points les + importants ?Qui connait l'algo du Passticket et sa mise en place en VB ?
[algo] les defits de koulip : probleme de piste[DELPHI / ALGO] Antialiasing [Done mais besoin d'avis]
[resolu] calculs sur des matrices et de vecteurs[D3D] les points d'une primitive
[ALGORITHME] utilité d'un algo sur les graphes[math/algo] efficacité d'une formule
Un algo qui renvoit toutes les possibilités d'arrangements d'un tab[C, c++, vb, ou autre] - algo de compression.. comment ca marche?
Plus de sujets relatifs à : [Algo] 3D : 2 Vecteurs Perpendiculaire à leurs points d'aplication.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR