私は3D空間と2つの角度の点を持っています。この情報から結果の線を計算したいと思います。私は2D線でこれを行う方法を見つけましたが、3Dではありません。これはどのようにして計算できますか?3次元の開始点と角度から線を計算する
私はC++ & OpenGLを使用しており、ユーザーのマウスクリックの位置とカメラの角度を持っているので、この線を交差点でトレースしたいと思います。
私は3D空間と2つの角度の点を持っています。この情報から結果の線を計算したいと思います。私は2D線でこれを行う方法を見つけましたが、3Dではありません。これはどのようにして計算できますか?3次元の開始点と角度から線を計算する
私はC++ & OpenGLを使用しており、ユーザーのマウスクリックの位置とカメラの角度を持っているので、この線を交差点でトレースしたいと思います。
三角で言えば、三角で線を定義するには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?答えは世界からカメラへとカメラから世界への変換をカバーしています。
編集していただきありがとうございますが、すでにGluUnprojectを使用している点があります。 –
@Shawn B基本的には、あなたが持っているポイントは、Originが上記の数式で線を作成し、世界座標系の線の座標を得るための変換行列を適用することです。 – vdbuilder
「時間」のポイントとしてラインを見付けることができます。方程式はベクトル化されなければならない、または意味をなす方向性がなければならないので、時間はそれを考える自然な方法です。 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)であると仮定して埋め込まれています。カメラの角度や3D空間内の点を考えると、カメラを原点と仮定すると、3D線を推測することができます。両方を必要としません。 – Motes
カメラが原点になく、代わりにXとYの両方で45度の回転をしたらどうなりますか? –
あなたは、ユーザーがクリックした場所、カメラからの光線をキャストしようとしていますか? –
それは正しいです。私はこれに新しい、私は正しいボーカルを使用している場合はわからない。 –
あなたはどの言語を使用していますか? – vdbuilder