4

したがって、法線ベクトルで指定された平面で3D形状の断面を計算するこのアルゴリズムがあります。

ただし、現在の問題は、断面が3Dポイントのセット(すべてその平面上にある)であり、それを表示するには、この座標をXY平面にマップする必要があることです。

これは、平面法線が (0,0,c) のようなものである場合に完全に機能します。z を破棄して x 座標と y 座標をコピーするだけです。

そして、ここに私の質問があります。他のプレーンを変換する方法がわからないので、今何をすべきかについて誰かヒントを教えてもらえますか?

4

1 に答える 1

7

ペインは法線ベクトルによって定義されます

n=(xn,yn,zn)

座標変換には、ペインの 2 つの基本ベクトルとゼロ点が必要です

基本ベクトル

x/y ペインに「自然に」適合するものを選択しました (エッジ ケースについては後述します)。

b1=(1,0,zb1)
b2=(0,1,zb2)

そして、私たちは欲しい

b1 x b2 = n*c(c const スカラー)

これら2つが本当にベースであることを確認する

これを解決します:

b1 x b2= (0*zb2-zb1*1,zb1*0-1*zb2,1*1-0*0) = (zb1,zb2,1)
zb1*c=xn
zb2*c=yn
1*c=zn

c=zn,
zb2=yn/c=yn/zn
zb1=xn/c=xn/zn

b1=(1,0,yn/zn)
b2=(0,1,xn/zn)

そしてそれを正規化します

bv1=(1,0,yn/zn)*sqrt(1+(yn/zn*yn/zn))
bv2=(0,1,yn/zn)*sqrt(1+(xn/zn*xn/zn))

エッジ ケースは、zn=0 の場合です。この場合、法線ベクトルは x/y ペインに平行であり、自然なベース ベクトルは存在しません。この場合、審美的な POV によってベース b1 および b2 ベクトルを選択し、通過する必要があります。同じソリューション プロセスまたは単に bv1 と bv2 を選択します。

ゼロ点

OQ でペインのアンカー ポイントがないことについて話しましたが、ペインを並列ペインの無限ファミリーと区別する必要があります。

アンカー ポイントが (0,0,0) の場合、これは座標変換に最適なアンカー ポイントであり、ペインには

x*xn+y*yn+z*zn=0,
(y0,y0,z0)=(0,0,0)

そうでない場合は、(xa、ya、za)のアンカーポイントがあり、ペインが

x*xn+y*yn+z*zn=d

d const スカラー付き。自然な適合はペインの点であり、元のゼロ点のペインへの通常の投影によって定義されます。

P0=(x0,y0,z0)

(x0, y0, z0) = c * (xn,yn,zn)

これを解決する

x*xn+y*yn+z*zn=d

与える

c*xn*xn+c*yn*yn+c*zn*zn=d

c=d/(xn*xn+yn*yn+zn*zn)

したがって

P0=(x0,y0,z0)=c*(xn,yn,zn)

見つかった。

最終的な変換

ペインのすべてのポイント (つまり、表示したいポイント) を次のように表すことによって達成されます。

P0+x'*bv1+y'*bv2

x' と y' が新しい座標です。P0、bv1、bv2 がわかっているので、これは非常に簡単です。エッジ ケースでない場合は、bv1.y と bv2.x にゼロがあり、問題がさらに軽減されます。

x' と y' は、必要な新しい座標です。

于 2012-01-08T21:17:32.557 に答える