プロが教える店舗&オフィスのセキュリティ対策術

タイトルにあるとおりです.
三次元の画像を二次元で表示するのに必要な計算式(変換式)をおしえてください.

A 回答 (6件)

「レンダリング」と呼ばれる技術の問題です。

参考書やHPは幾らもあると思いますが…

「形状」が何を意味しているか曖昧です。
 ひとつの捉え方として、三次元直交座標系(x,y,z)の各点に「色」を対応付ける関数f(x,y,z)が与えられていると考える。点がぱらぱらあるだけだったり、針金細工のような図形であるなら、f(x,y,z)はほとんど至るところで「透明」という色を与えています。不透明な面や体積の部分があると、ある方向から見て背後に隠れるものは何か、ということが問題になり、ちょっと面倒です。

 点がぱらぱらあるだけだったり、針金細工のような図形である場合には、点の集合、あるいは線分の集合として「形状」を表現しておくと計算しやすいです。以下、こちらの場合について解説します。

 さて、三次元空間から平面への投影の仕方は、三次元空間の中の何処に視点を置いてどっちを見るかによって決まります。無限遠から眺めるのなら、既に回答の出ている平行投影ですし、有限の距離から見たところが欲しいのなら投影変換が必要。
実際には、視点を動かすのではなく、視点を固定しておいて「形状」の方を動かします。

投影変換で考えましょう。
(1)「形状」の定義されている三次元空間に、もうひとつ三次元座標系(X,Y,Z)を導入します。この座標系は視点の位置を原点とし、平面pがZ=1の平面になるようにします。平面p上の点は(X,Y)で表現できることになります。

(2)次に「形状」を(X,Y,Z)座標系で表します。
(x,y,z)から(X,Y,Z)への変換は、平行移動と各軸まわりでの回転で表されます。平行移動は簡単ですね。また、たとえばx軸を中心軸とするθラジアンの回転は
1   0   0
0  cosθ  -sinθ
0  sinθ  cosθ
という行列をベクトル(x,y,z)に掛けることで行えます。y軸を中心軸とするθラジアンの回転は
cosθ  0   -sinθ
0    1   0
sinθ  0  cosθ
です。z軸についてどうなるかはもうお分かりでしょう。
このようにして、「形状」をあらわす各点の座標を一斉に変換して(X,Y,Z)座標系での値に書き換えます。

(3)「形状」を構成する一つの点(AX,AY,AZ)を視点(0,0,0)から平面pを透かして見たとき、平面p上のどこに見えるか、その場所を(aX,aY)としますと
ax=AX/AZ
ay=AY/AZ
であることが分かります。だからそこに点を打つ。
ちなみに、視点から(AX,AY,AZ)までの距離も計算できますから、遠くになるほどかすんで(色の彩度が低く)見える、というような効果を付けることも可能です。

「形状」を構成する線分はどうなるか。線分の両端の点(AX,AY,AZ)、(BX,BY,BZ)が平面p上のどこに来るかは上記のやり方で(aX,aY)、(bX,bY)と決まります。そしたら、この二点を結ぶ線分をp上に描けば良いのです。
    • good
    • 0
この回答へのお礼

御礼の返事が大変遅くなり,申し訳ありません.
この場をお借りして,回答してくださった皆さんに,お詫び申し上げます.

実を言いますと,私自身,質問の意味を良く理解していなかったものでして・・・
ある人(上司)にたのまれたことでして.
そんなもんですから,皆さんが補足要求や回答をしてくださっても,満足に返事が
できなく,迷惑を掛けてしまいました.
こういったことは,ここで質問するなということですね.深く反省しております.

結局,ネットで検索して,いくつかのHPにあった数式を,そのままコピーして提出しましたところ,なんだか解決してしまったみたいです.
ホント~に,すみませんでした.

お礼日時:2003/03/22 14:51

cactusronさんの補足として....


ある点(x0,y0,z0)が、平面α:ax+by+cz+d=0 への正射影ということは
ある点(x0,y0,z0)から平面αに垂線をひいた足の部分です。
具体的には、直線 (x-x0)/a=(y-y0)/b=(z-z0)/c とαとの交点です。

あとは計算すれば出ますよね....高校の数学です
(あとの計算は中学校レベルか)
x={(b^2+c^2)x0-aby0-acz0-ad}/(a^2+b^2+c^2)
になるかな...計算違っていたらごめんないさい
あとはy,zも対称になるので、計算してください。
    • good
    • 0

三次元の画像(形状?)を二次元に射影する方法を何でもよいから教えて・・・というのならば、


#2や#3の方々が答えていることの特殊な例として、(x,y,z)のどれかの成分を無視すればよいと思います。
たとえば、zの成分を無視して、(x,y)に対応させれば、簡単に二次元に射影できます。
    • good
    • 0

グラフィックソフトなんかで3D画像を表示する場合、


3次元の(x、y、z)という座標に対して、
平面α:ax+by+Cz=0 への正射影として計算しています。

より複雑になると、正射影した座標に対して、
元の点と平面の距離をパラメータにして、
図形の中心を掃除の中心にして縮小することで、
奥行きを表現したりします。

んで、その式をここに書くのは大変・・・
イメージだけ理解してもらえれば。
    • good
    • 0

投影の方法も、いろいろありますよ....


質問の意味は、立体を、画面に表示するときの式ということでほうか...

ただ、そのときの投影法も、一点から平面に落とす方法と、
平面から、平面へ落とす方法とで、変換式がかわるとおもいますが...

基本的には、空間上の点(x,y,z)が、平面上の点(x.y)のどの位置に行くかを
計算するだけですよ...
まずは、x軸y軸z軸がどういう式になるかをかいて、
それを各々で足し合わせるのが、簡単な方法です...(行列の考えかた)
    • good
    • 0

>三次元の画像を二次元で表示する


というのは,ある平面への写像を考えるということですか?
また,「画像」という言葉が意味するのはどんな物ですか?
質問が曖昧すぎて「数学的」に答えることは非常に難しいかと….

この回答への補足

そうです.写像です.
それから,画像とは「形状」のことです.
これでどうでしょうか?
よろしくお願いします.

補足日時:2003/02/19 12:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!