0

行は次のとおりです。

Ax + By + Cz = D

Ex + Fy + Gz = H

これらの方程式を満たす任意の点 (x、y、z) が必要です。

ゼロに設定する座標を 1 つ選択してから、他の 2 つを解決してみました。これは、次を除いて正しく機能します。

1)いくつかの係数がゼロまたはゼロに近い場合、数値的な不安定性を引き起こすことなく、どの座標をゼロにするかを選択する信頼できる方法がわかりません。

2) 多くの if ステートメントが含まれているため、コードが煩雑になり、条件のすべての組み合わせをテストするのが難しくなります。

編集:どのポイントが見つかったかは気にしません。それらすべてを検出できるようにする必要はありません。

4

2 に答える 2

3

jh314のソリューションを補完したいと思います:

次のようなより複雑な問題を解くことでポイントを獲得することもできます。

Ax + By + Cz = D 
Ex + Fy + Gz = H 
(BG-CF)x+(-AG+CE)y+(AF-BE)z = 0

その方が数値的に安定すると思います

于 2013-07-13T04:21:21.663 に答える
2

2 つの平面があり、交点は線です。線は、点とベクトルによって定義されます。

ベクトルを取得するには、平面の法線ベクトルの外積を実行できます。

Ax + By + Cz = D has normal vector <A,B,C>
Ex + Fy + Gz = H has normal vector <E,F,G>

外積は

<BG-CF,-AG+CE, AF-BE>

外積が の場合<0,0,0>、平面は平行で、直線は存在しません。

次に、交点で点 (a、b、c) を見つけます (元の 2 つの方程式を解くことによって)。

Ax + By + Cz = D
Ex + Fy + Gz = H

そうするために、それがゼロであると仮定することができますz。次に、かどうかを確認します(A*F-E*B) != 0。これが true の場合、次のように評価しx,yます。

x = (D*F-B*H)/(A*F-E*B)
y = (E*D-A*H)/(E*B-A*F)

それ以外の場合は、チェックしてください(A*G-E*C) != 0。もしそうなら、あなたは知っています

x = (D*G-C*H)/(A*G-E*C)
z = (E*D-A*H)/(E*C-A*G)

それ以外の場合は、チェックしてください(B*G-C*F) != 0。もしそうなら、あなたは知っています

y = (D*G-C*H)/(B*G-C*F)
z = (B*H-D*F)/(B*G-C*F)

それからあなたはラインを持っています!

x = a + (BG-CF)t
y = b + (CE-AG)t
z = c + (AF-BE)t

パラメータはどこにtありますか。選択したものについてt、(x,y,z) は目的の線上の点になります。

于 2013-07-13T03:05:37.603 に答える