22

私は、3D ポイントと平面の配列を取り、それらが平面のどちら側にあるかに基づいて、ポイントを 2 つの配列に分割しようとしています。デバッグに本格的に入る前に、これを行う方法についての理解が確実に機能するように、計画していることを投稿したいと思いました。

基本的に私は3点の平面を持っていて、私は(疑似コード)を使用しています:

var v1 = new vector(plane.b.x-plane.a.x, plane.b.y-plane.a.y, plane.b.z-plane.a.z);
var v2 = new vector(plane.c.x-plane.a.x, plane.c.y-plane.a.y, plane.c.z-plane.a.z);

これら 2 つのベクトルの外積をとって、法線ベクトルを取得します。

次に、ポイントの配列をループしてベクトルに変換し、法線に対する内積を計算します。

次に、ドット積を使用して、ポイントがある側を決定します。

これはうまくいくように聞こえますか?

4

3 に答える 3

35

a*x+b*y+c*z+d=0あなたの飛行機を決定する方程式にし ましょう。

点の[x,y,z]座標を方程式の左辺 (つまりa*x+b*y+c*z+d) に代入し、結果の符号を確認します。

同じ符号を持つ点は、平面の同じ側にあります。

正直なところ、私はあなたが書いた内容の詳細を調べていませんでした。私が提案するものがより単純であることにあなたは同意すると思います。

于 2013-03-28T20:00:36.350 に答える
1

あなたのアプローチは良さそうですね。しかし、「それをベクトルに変えて」と言うと、(文の意味にもよりますが)良くないかもしれません。

現在のポイントと平面内のポイントの1 つ (たとえば、平面を定義する 3 つのポイントの 1 つ) との間の座標の違いを計算することにより、「ポイントをベクトルに変換」する必要があります。あなたが書いたように、あなたはそれを誤解しているように聞こえます; でもそれ以外は大丈夫!

于 2013-03-28T20:14:48.610 に答える