3D : 2 Vecteurs Perpendiculaire à leurs points d'aplication. [Algo] - Algo - Programmation
Marsh Posté le 27-07-2002 à 15:39:43
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)
Marsh Posté le 27-07-2002 à 15:42:24
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. |
Marsh Posté le 27-07-2002 à 16:19:30
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
Marsh Posté le 27-07-2002 à 17:34:07
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
Marsh Posté le 27-07-2002 à 17:47:36
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)
Marsh Posté le 27-07-2002 à 18:06:31
>>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.
Marsh Posté le 27-07-2002 à 18:12:05
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 :
|
Ca devrait deplacé la camera a droite
Marsh Posté le 27-07-2002 à 18:22:59
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.
Marsh Posté le 27-07-2002 à 18:40:14
Code :
|
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.
Marsh Posté le 28-07-2002 à 00:45:44
[OT]euh pourquoi mettre des lol a toutes les phrases?
on se croirait sur le chat caramail.. [/OT]
LeGreg
Marsh Posté le 27-07-2002 à 15:29:17
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 :
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