ページ 11

線形ではないように見える透視変換がなぜ行列で表現できるのか?

Posted: 2019年10月10日(木) 20:58
by matrix太郎
座標変換に使っている行列ってやつは、線形代数でてくるヤツですよね。

入力座標を Xin Yin Zin Win
出力座標を Xout Yout Zout Wout

としたとき、

Xout = a*Xin + b*Yin + c*Zin + d* Win
Yout = e*Xin + f*Yin + g*Zin + h* Win
Zout = i*Xin + j*Yin + k*Zin + l* Win
Wout = m*Xin + n*Yin + o*Zin + p* Win

という式があったときに、この係数 a〜p だけを抜き出したものが行列になるわけですよね

a b c d
e f g h
i j k l
m n o p

ここで不思議なのは透視変換です。
透視変換って、たとえばスクリーン上でのx座標はz距離に比例ではなく反比例すると思うんです。

zが遠くなればなるほど、限りなくxはゼロに近づきますよね。このとき、Zout = 定数/Zin のような形になると思うのですが、行列で表すのは Zout = 定数 * Zin の形だけですよね?何故この反比例の形が行列で表現できるのでしょう???

Re: 線形ではないように見える透視変換がなぜ行列で表現できるのか?

Posted: 2019年10月10日(木) 21:03
by Matrix太郎
すみません
Zout = 定数/ Zin は
Xout = 定数 / Zin の間違いです

Re: 線形ではないように見える透視変換がなぜ行列で表現できるのか?

Posted: 2019年10月11日(金) 12:00
by usao
「同次座標」とかで調べると良いかと思います.

スクリーン上への投影座標は,XYout,Yout,ZoutをWoutで割ることで得られます.
要は,
その4x4行列を掛けただけでは,「反比例」に対応する割り算はまだ行われていない,ということになるでしょうか.

Re: 線形ではないように見える透視変換がなぜ行列で表現できるのか?

Posted: 2019年10月12日(土) 18:39
by Matrix太郎
ああ、Wの意味って、それだったんですね。
確かに最終的な座標を求めるときは最後に
x = X/W
y = Y/W
z = Z/W てやってますから、
w に z の値を突っ込んでおけば z に反比例させることができますね。
ありがとうございました!