4

3 点が与えられた 3D 平面方程式を見つけたいです。外積を適用した後に法線を計算しました。しかし、平面の方程式は、私がP.OPとして教えられている別のベクトルによる法線乗算であることがわかっています。主な基準点を OP に置き換え、P を (x, y, z) 形式にしたいと考えています。たとえば、次のようなものを取得できるように、

OP = (1, 2, 3)

私はそのようなものを取得したい:

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

方法を教えてください。以下は私の参照コードです(注:plane_point_1_x()、plane_point_1_y()、plane_point_1_z()はすべて、それぞれのポイントのユーザー入力を求める関数です)

"""
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

上記はすべて私が行ったことですが、何らかの理由で機能しませんでした。問題は x, y , z 部分にあると思います。

4

5 に答える 5

5

それぞれ (x, y, z) を持つ 3 つの既知の点があるとします。例えば:

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

それらを、さらに処理するために見やすいシンボルにします。

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

点から 2 つのベクトルを決定します。

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

2 つのベクトルの外積を決定します。

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]]

平面は、単純な方程式ax + by + cz = dを使用して記述できます。外積からの 3 つの係数はab、およびcであり、dは既知の点 (最初の点など) を代入することで解くことができます。

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

ここで、 x =4、y =5でz値を決定するなど、何か役に立つことを行います。簡単な方程式を並べ替えて、zについて解きます。

x = 4
y = 5
z = (d - a * x - b * y) / float(c)  # z = 6.176470588235294
于 2014-07-31T08:43:08.283 に答える
5

私が間違っていなければ、ここでの1つの良い解決策にはミスタイプが含まれています

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)

以前の (作成者の) バージョンを試しましたが、確認する必要がありました。数式にマイナスをさらに2つ追加すると、今では正しいようです。

于 2014-09-12T13:06:52.720 に答える
4

1 つの良い方法は次のとおりです。

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

垂直パイプは行列の行列式を意味し、(x1 y1 z1)(x2 y2 z2)、および(x3 y3 z3)は指定されたポイントです。

于 2009-12-31T13:50:02.697 に答える
3

平面の暗黙の式:

すべての点P = (x, y, z) を満たす

< n , QP > = 0

どこ

  • nは平面法線ベクトル、
  • Qは平面上のある点です (何でも構いません)
  • QPはQからPへのベクトルです。
  • < a , b > はスカラー (ドット) 積演算子です。

( QPはP - Qとして計算できることに注意してください)

于 2009-12-31T13:39:23.797 に答える
2

この答えがすでに存在していたらいいのにと思います。http://www.had2know.com/academics/equation-plane-through-3-points.htmlからコーディング

[x1、y1、z1]などで構成される3つの点p1、p2、p3を想定します。

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
于 2014-07-02T21:00:13.893 に答える