2011-07-04 22 views
1

私は束のtetrahedraでいくつかの3Dグラフィックスをレンダリングしようとしています。私は1つの四面体を他の四面体と完全に対面するように回転させる方法を理解しようとしています。これが混乱している場合、対面する複数の四面体はthisのように見えます。3次元テッセレーションのための四面体の回転

私はプログラムでオブジェクトを回転させるためにOpenGLを使用していますので、一度に3つの軸のうちの1つだけを回転させることができます。例えば、Xで時計回りに20度、Zで反時計回りに45度回転することができます。

私はこのプログラムのプログラミング面を理解しています(OpenGLのglRotatef()関数を使って一度に1つの軸で回転します)。 3dテッセレーションを達成するためには、各軸に必要な特定の角度にもっと関心があります。

何か助けていただきありがとうございます、より明確にする必要がある場合はお知らせください。

答えて

3

完全に対面している必要がある場合は、回転をまったく見つけようとしません。

代わりに、私は四面体から始めます。どの顔が次の顔と共有されるかを決めます。

この面の2つの辺の積をとってください(4点目の方向を指している確率は50%です。この場合、ベクトルを反転します)。ノーマライズ。 sqrt(6)/ 3 * edge_length(これは定数です、あらかじめ計算してください)で乗算してください。

新しい四面体の高さの長さで、新しい四面体の4番目の頂点の方向を指しているベクトル(すでに知っている3つは、顔のものと同じです)があります。

あなたが今必要とするのは、ベクトルの原点です。3つの共有頂点の座標の算術平均を取ると、その面の中心点が得られます。

そのポイントにベクトルを加えて、最終点を与えます。

これで、1つの面を共有する2面体(向きにかかわらず)、回転計算は不要です。

+0

ありがとうございました。問題は、実行時に追加の四面体を追加または削除しようとしていることです(おそらくこれを指定しているはずです)。各四面体は、tetradronオブジェクトのちょうど一つのインスタンスに関連付けられている必要があります。これは理にかなっていますか?あなたの興味深い解決策への可能な変更? –

+0

基本的には、常に何かが接続されている限り、同じことができます。別のインスタンスを作成するには、既存の3つの頂点(接続先の面のもの)を複製し、上記のように4番目の頂点を計算します。実行時にエッジの長さを変更することはできません。また、適切に接続することもできないため、高さは事前に計算された定数のままです。 – Damon

+0

だから、おそらく、コンストラクタに隣接する四面体のインスタンスと新しいものが隣接している特定のエッジを渡すことによって、1つの四面体のインスタンスを常に作成しなければならないでしょう。それは受け入れられると思う。ありがとう! –

関連する問題