2011-12-31 23 views
0

私は3D空間と2つの角度の点を持っています。この情報から結果の線を計算したいと思います。私は2D線でこれを行う方法を見つけましたが、3Dではありません。これはどのようにして計算できますか?3次元の開始点と角度から線を計算する

私はC++ & OpenGLを使用しており、ユーザーのマウスクリックの位置とカメラの角度を持っているので、この線を交差点でトレースしたいと思います。

+0

あなたは、ユーザーがクリックした場所、カメラからの光線をキャストしようとしていますか? –

+0

それは正しいです。私はこれに新しい、私は正しいボーカルを使用している場合はわからない。 –

+0

あなたはどの言語を使用していますか? – vdbuilder

答えて

2

三角で言えば、三角で線を定義するには2つの角度と点が必要です。

X = R罪(Q)COS(F)

Y = R罪(Q)SIN(F:に(X、Y、Z)デカルトにだけ極座標は式である座標れること変換)

Z = RのCOS(Q)rは、点Pから原点までの距離である

。線OPと正の極軸との間の角度q(天頂)(z軸と考えることができる)。初期光線とOPの赤道面への射影(通常はx軸から測ったもの)との間の角度f(方位角)である。

編集:

これは、あなたが求めるものの最初の部分でした。それ以外の部分は、質問の更新後の本当の疑問であり、単に2つの角度と3次元空間の点から線を作成するよりもはるかに複雑です。これは、カメラからワールドへの変換行列を使用することを含み、他のSOの質問でもカバーされていました。ここでの便宜のために、How does one convert world coordinates to camera coordinates?答えは世界からカメラへとカメラから世界への変換をカバーしています。

+0

編集していただきありがとうございますが、すでにGluUnprojectを使用している点があります。 –

+0

@Shawn B基本的には、あなたが持っているポイントは、Originが上記の数式で線を作成し、世界座標系の線の座標を得るための変換行列を適用することです。 – vdbuilder

2

「時間」のポイントとしてラインを見付けることができます。方程式はベクトル化されなければならない、または意味をなす方向性がなければならないので、時間はそれを考える自然な方法です。 SO 3次元の線の方程式は実際X、Yの3つの2次元方程式、など時間に関連するZ、とすることができる:

x = ax*t + cx 
y = ay*t + cy 
z = az*t + cz 

カメラを仮定すると、方程式のセットを見つけるためには、原点です、 (0,0,0)、そしてあなたのポイントは、(X1、Y1、Z1)である

ax = x1 - 0 
ay = y1 - 0 
az = z1 - 0 

cx = cy = cz = 0 

ので

x = x1*t 
y = y1*t 
z = z1*t 

注:このも想定して、その行またはベクトルの "速さ"あなたのポイント(x1、y1、z1)にあるようなものです。af ter 1秒。

したがって、必要なだけ長く、たとえば10秒間などの1/1000秒ごとなど、ポイントを十分に細かく塗りつぶすだけで、実際には「線」を描くことがありますある距離から見たときに、10秒以上の距離で線として表示される点のうち、選択した「速度」によって決まるもの。

+0

私はカメラの角度を度で表していますが、計算の単位は何ですか? –

+0

角度情報は、カメラが(線が始まる)原点、点(0,0,0)であると仮定して埋め込まれています。カメラの角度や3D空間内の点を考えると、カメラを原点と仮定すると、3D線を推測することができます。両方を必要としません。 – Motes

+0

カメラが原点になく、代わりにXとYの両方で45度の回転をしたらどうなりますか? –

関連する問題