1

問題は簡単です:

1) ポイント 1 (x,y,z) からポイント 2 (x,y,z) に移動する光子があり、どちらも 3D 空間のどこにでも配置できます。

2) x 軸および/または y 軸上でランダムに回転し、3D 空間の任意の場所に配置されたポリゴンがあります。

3) 次のことを見つけたい: a) 光子がポリゴンと衝突する場合、b) 衝突する場合、(x,y,z) はどこになるか?

問題の画像: http://dl.dropbox.com/u/3150177/Programming/3D/Math/Photon%20Path/Photon%20Path.png

これの目的は、フォトンのパスがポリゴンとの相互作用からどのように変更されるべきかを計算することです。

私は今この件について読んでいますが、誰かが私に有利なスタートを切ることができるかどうか疑問に思っていました. 前もって感謝します。

4

5 に答える 5

2

レイ/ポリゴンの交差テストを探しているようです。

詳細は覚えていませんが、2 つの部分に分けられたと思います。まず、光線が交差するポリゴンの平面上の点を見つけます。これは、単純な光線/平面交差テストから取得できます。次に、多角形の平面で座標系を使用して、交点が多角形内にあるかどうかをテストします。これは、ポイント イン ポリゴン テストから取得できます。

于 2010-06-01T15:15:24.627 に答える
1

総括:

1) セグメント平面交点:ポイント 1 と 2 を結ぶ線分がポリゴンを含む平面と交差するかどうかを決定します。そうでない場合は、ポリゴンと交差することはなく、完了です。

2) 交点を見つける: 線分と平面が交差する点を決定します。これにより、質問の 3-b で必要な情報が提供されます。この点をQとする

3) Qが多角形の内部にあるかどうかを判断する: これを判断する方法の 1 つがここにありますが、巧妙に作成された Google 検索によって別の結果が得られる可能性があります。予想されるさまざまなタイプのポリゴン (つまり、凸面)、またはポリゴンを含む平面が軸方向に整列している (つまり、座標系の軸の 1 つがポリゴンを含む平面に対して垂直である) 場合に最適化できます。

前提:ポリゴンのすべてのポイントが同一平面上にあります。

于 2010-06-01T20:20:16.650 に答える
1

レイ トレーシングを行っています。最も効率的な方法は、多角形を三角形に分割し、Moeller ray-triangle テストを使用することです。あるいは、Wald 検定かもしれません。同じ三角形に対して複数のレイを実行している場合は、頂点情報だけでなく追加の保存データを使用するバリアントもあります。Google は非常に多くの結果を提供しているため、ここに掲載する「最良の」結果を選択していません。

于 2010-06-01T20:36:10.410 に答える
0

光子はベクトル v = p2 - p1 で p1 から移動し、次の線を作成します。

p1 + v * a 

光子がポリゴンと衝突するかどうかを調べるには、次の値を見つける必要があります。

p1 + v * a = polygon

例えば:

p1 is (15, 4, 5)
p2 is (10, 1, 3) 
and polygon is a 10x10 square: (-5...5, -5...5, 0)

v = p2 - p1 = (-5, -3, -2)

p1 + v * a = pol は次のようになります。

p1.x + v.x * a = pol.x
p1.y + v.y * a = pol.y
p1.z + v.z * a = pol.z

a = (pol.z - p1.z) / v.z = (0 - 15) / -2 = 7.5
pol.x = p1.x + v.x * a = 15 + -5 * 7.5 = -22.5
pol.y = p1.y + v.y * a = 10 + -3 * 7.5 = -12.5

-22.5 は -5 と 5 の間ではなく、-12.5 は -5 と 5 の間ではないため、フォトンはポリゴンと衝突しません。

久しぶりに作ったので、間違っているところもあるかもしれません。pol.z = 0 という事実を利用して a を計算しました。ポリゴンの中心を中心に p1 も回転する限り、ポリゴンを回転して 1 つの軸に揃える必要がある場合があります。

于 2010-06-01T15:58:24.247 に答える
0

Ray / triangle intersections are well understood and quite easy. The rotations are harder, though.

Perhaps you could transform the triangle's vertices using a rotation matrix and then use a simple ray / triangle intersection?

于 2010-08-13T17:57:24.113 に答える