2009-12-31 13 views
2

Je veux trouver une équation de plan 3D donnée 3 points. J'ai la normale calculée après l'application du produit croisé. Mais l'équation d'un plan est connue pour être la multiplication normale par un autre vecteur que ce que l'on m'apprend comme étant P.OP. Je remplace mon point de référence principal par OP et je veux que P soit sous la forme (x, y, z). Alors que je peux obtenir quelque chose comme par exemple,Équation de plan pour les vecteurs 3D

OP = (1, 2, 3) 

Je veux obtenir quelque chose comme ça:

(x-1) 
(y-2) 
(z-3) 

Puis-je savoir comment? Ci-dessous est mon code de référence (Note: plane_point_1_x(), plane_point_1_y(), plane_point_1_z() sont toutes les fonctions demandant l'entrée d'utilisateur des points respectifs).

""" 
I used Point P as my reference point so I will make use of it in this section 
""" 

vector_pop_x = int('x') - int(plane_point_1_x()) 
vector_pop_y = int('y') - int(plane_point_1_y()) 
vector_pop_z = int('z') - int(plane_point_1_z()) 

print vector_pop_x, vector_pop_y, vector_pop_z 

Tout ce qui précède est ce que je l'ai fait, mais pour une raison quelconque, cela n'a pas fonctionné. Je pense que le problème réside dans la partie x, y, z.

+1

Ne pensez-vous pas que ce n'est pas exactement lié à la programmation? Btw, 'int (" x ")' ne fonctionne pas, qu'essayez-vous d'y atteindre? –

+1

@gs - confus pourquoi ce serait inapproprié. Poser des questions sur les algorithmes et la façon de les implémenter a une longue tradition ici. –

Répondre

2

Avion équation implicite:

Tous les points P = (x, y, z) vérifiant

< n, QP> = 0

  • n est le plan vecteur normal,
  • Q est un point du plan (tout fera l'affaire)
  • QP est le vecteur de Q à P
  • < un, b> est l'opérateur du produit scalaire (point).

(Rappelez-vous que QP peut être calculé comme P - Q)

2

Une bonne manière est la suivante:

| x1 y1 z2 1 | 
| x2 y2 z2 1 | 
| x3 y3 z3 1 | = 0 
| x y z 1 | 

Lorsque les tubes verticaux signifie le déterminant de la matrice , et (x1 y1 z1), (x2 y2 z2), et (x3 y3 z3) sont vos points donnés.

+0

comment puis-je définir une variable? Et puis-je savoir comment ça marche en python? Désolé pour la question de débutant parce que je ne comprends pas vraiment et il ne semble pas fonctionner, peut-être je l'ai fait à tort ou quelque chose – blur959

+0

Le plan est l'ensemble de tous les points '(x y z)' qui satisfont cette équation.Donc, si vous avez vos trois points de référence, branchez-les, et vous pouvez tester tout autre point pour être sur le plan avec l'équation ci-dessus. Ou, si vous avez, par exemple, les coordonnées «x» et «y» du point, vous pouvez résoudre pour l'autre. – pavpanchekha

2

Je souhaite que cette réponse existe déjà. Codé de http://www.had2know.com/academics/equation-plane-through-3-points.html

Supposant 3 points p1, p2, p3 - composé de [x1, y1, z1], etc.

vector1 = [x2 - x1, y2 - y1, z2 - z1] 
vector2 = [x3 - x1, y3 - y1, z3 - z1] 
cross_product = [vector1[1] * vector2[2] - vector1[2] * vector2[1], -1 * vector1[0] * v2[2] - vector1[2] * vector2[0], vector1[0] * vector2[1] - vector1[1] * vector2[0]] 
d = cross_product[0] * x1 - cross_product[1] * y1 + cross_product[2] * z1 

a = cross_product[0] 
b = cross_product[1] 
c = cross_product[2] 
d = d 
+1

Attention: cette réponse contient des erreurs arithmétiques. Voir la réponse de MasterAler pour la version correcte de ceci. – Gabriel

1

Disons que vous avez trois points connus, chacun (x, y, z). Par exemple:

p1 = (1, 2, 3) 
p2 = (4, 6, 9) 
p3 = (12, 11, 9) 

Faites-les en symboles qui sont plus faciles à regarder pour un traitement ultérieur:

x1, y1, z1 = p1 
x2, y2, z2 = p2 
x3, y3, z3 = p3 

Déterminer deux vecteurs des points:

v1 = [x3 - x1, y3 - y1, z3 - z1] 
v2 = [x2 - x1, y2 - y1, z2 - z1] 

Déterminer la cross product du deux vecteurs:

cp = [v1[1] * v2[2] - v1[2] * v2[1], 
     v1[2] * v2[0] - v1[0] * v2[2], 
     v1[0] * v2[1] - v1[1] * v2[0]] 

un avion peut être décrit en utilisant une équation simple ax +par + cz = d. Les trois coefficients du produit croisé sont un, b et c et d peuvent être résolus en remplaçant un point connu, par exemple le premier:

a, b, c = cp 
d = a * x1 + b * y1 + c * z1 

maintenant faire quelque chose d'utile, comme déterminer le z valeur à x = 4, et = 5. Réarranger l'équation simple, et résoudre pour z:

x = 4 
y = 5 
z = (d - a * x - b * y)/float(c) # z = 6.176470588235294 
3

Si je ne me trompe pas, une bonne solution ici contient mistypes

vector1 = [x2 - x1, y2 - y1, z2 - z1] 
vector2 = [x3 - x1, y3 - y1, z3 - z1] 

cross_product = [vector1[1] * vector2[2] - vector1[2] * vector2[1], -1 * (vector1[0] * vector2[2] - vector1[2] * vector2[0]), vector1[0] * vector2[1] - vector1[1] * vector2[0]] 

a = cross_product[0] 
b = cross_product[1] 
c = cross_product[2] 
d = - (cross_product[0] * x1 + cross_product[1] * y1 + cross_product[2] * z1) 

Essayé version précédente (auteur), mais a dû vérifie ça. Avec quelques plus de moins dans les formules semble correct maintenant.