アプリ版:「スタンプのみでお礼する」機能のリリースについて

50m×60mのグランドを高さ5m、20mから離れたところから写真を撮り、1m×1mごとに座標軸を引きたいと考えています。
やりたいことを画像にまとめました。
どうやら遠近法(減衰比)らしいのですが、線を引く座標の求め方がよくわかりませんでした。
どなたか、座標の求め方についてアドバイスをください。
よろしくお願いします。

「遠近法の計算方法を教えてください。」の質問画像

A 回答 (2件)

カメラからグランドの各点を見たときの、横方向の角度と、縦方向の角度を求め、それをX座標、Y座標にしたらどうですか。



3次元座標で考えて、
グランドの4隅を(-30,50,0),(-30,0,0),(30,0,0),(-30,50,0)
カメラの位置を(0,-20,5)とすると、
グランド上の座標(x,y)に対し、
横方向の角度 X=arctan(x/(y+20))
縦方向の角度 Y=arctan((y+20)/5)
    • good
    • 1
この回答へのお礼

早速の回答、ありがとうございます。
Excelで検証してみました。
イメージ通りのものができそうです。
ネットで調べていたら、今回質問した内容は一点透視図法って言うらしいですね。
上記のやり方で二点透視図法についても確認してみます。

お礼日時:2009/09/30 21:20

視点vから物体上の点Rを結ぶ線とスクリーン平面の交点を求めればよいです。



スクリーン上の原点をp,座標を与える基底ベクトルをex, eyとするとき、
平面上の点qはある(a,b)の組があって
q=p+a*ex+b*ey
で与えられます。
一方、視点vから物体上の点Rを結ぶ線上の点qはある値kがあって
q=v+k(R-v)
で与えられます。この2つのqが一致するような、a,b,kを求めれば良い分けです。つまり、
p+a*ex+b*ey=v+k(R-v) ・・・(☆)
をとけばよいわけです。

でも良く考えてください。スクリーンの基底ベクトルex, eyの取り方は自由です。
なので、それにはよらず点が決められるはずです。
ということは、aとかbとは関係なく、kだけが決められそう=簡単な計算がありそうです。

実際、外積×を使ってスクリーンの法線ベクトルを
ez=ex×ey
とすると☆の両辺にこれを掛けて内積・を取ると
p・ez=v・ez+k(R-v)・ez
よって、
k=(p-v)・ez/{(R-v)・ez}
が求められます。
q=v+k(R-v)
なので、kにこの値を代入すれば座標が求められます。

蛇足ですが、射影する平面の法線成分に着目すると、
kは、vからpへのベクトルとvからRへのベクトルの
射影する平面の法線成分の比になることが分かります。これは図面を書いてみるとよく分かります。

といった感じです。どうでしょうか?
    • good
    • 0
この回答へのお礼

ご丁寧な回答、ありがとうございました。

ただ、いまの私の知識では内容が難しく、理解するのに時間がかかりそうですが、確認させていただきます。

お礼日時:2009/09/30 21:24

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

このQ&Aを見た人はこんなQ&Aも見ています