ペインは法線ベクトルによって定義されます
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' は、必要な新しい座標です。