1

すべてが平面として定義されている 3 つの多角形が与えられた場合 (横から見た場合、残りの部分と一致する点がないため、基本的に 3D 空間では 2D 形状です)、正確に 4 つの点で構成され、凸状であり、次の追加情報があります。各ポリゴンは、それぞれ正確に 2 点で他の 2 つのポリゴンに接続されます...

これらのポリゴンを「平らに置く」ことから始めます。つまり、それらの値はすべて x、y 平面上にあり、Z 値はすべて 0 です...

...これらのポリゴンが接続点で接続されるように、これらのポリゴンを 3D 空間に配置する方法を見つけるにはどうすればよいですか?

4

2 に答える 2

1

すべてのポリゴンを 1 点で合わせたいと仮定します。三角形の問題をどのように行うかを次に示します (四角形に簡単に適用できます)。

2D の世界では、対応する 2 つの辺のペアが隣り合うように三角形が既に配置されており、三角形の共通点が原点であるとします。つまり、O を原点とすると、点 A、B、C、D があり、3 つの三角形は AOB、BOC、COD になります。(この状況に到達するために、いつでもいくつかの変換を適用できます。) ここでのタスクは、三角形を「折り畳む」ことによって OA を OD (これらは同じ長さであると想定されます) に揃えることです。 * 疑似コードで行うことは次のとおりです。

assert(length(OA) == length(OD))
let L_A = line through A perpendicular to OB
let L_D = line through D perpendicular to OC
let E = intersection of L_A and L_D
let z = sqrt(length(OA) * length(OA) - length(OE) * length(OE))

let O' = (0, 0, 0), B' = (B.x, B.y, 0), C' = (C.x, C.y, 0)
let A' = (E.x, E.y, z)

次に、 にA'O'B'対応しAOB、 にB'O'C'対応しBmOC、 にC'O'A'対応しCODます。

*注: これは、角度 AOB、BOC、および COD の合計が 360 未満の場合にのみ可能です。

于 2016-08-17T21:13:16.490 に答える
1

ポリゴンに A、B、C のラベルを付けます。折り畳む前に B と C がそれぞれエッジを共有するように A を選択し、変換中は XY 平面にとどまると見なします。

折り畳む前に、3 つのポリゴンすべてが接続するポイントが 1 つだけ存在するか、または存在しません (この場合、折り畳み後の結果の形状には貫通する穴が含まれます)。

前者の場合、その点 (d) を考慮してください。それに接続されているエッジの 1 つは、折り畳んだ後、B と C によって共有されます。e を、d とエッジを共有するが A に接触しない B 上の点とします。C についても同様に f です。折り畳み後、e と f は同じ点です。A と B が共有するエッジを中心に e を回転させて記述される円を考えます。同様に、A と C が共有するエッジを中心に f を回転させます。これらの円は、正確に 2 点 (XY 平面の上に 1 つ、下に 1 つ) で交差します。円方程式を書き、解いて、2 つの解のいずれかを任意に選択します。これで、B と C が A と共有するエッジを中心に回転した角度になり、残りのメッシュは完全に拘束されました。

後者の場合、一方の端が B に接続し、もう一方の端が C に接続するような A のエッジを見つけます。前述のように、エッジをこれらの点と共有するが A とは共有しない B および C 上の点を考え、A のエッジを中心に回転します。交点を解きます。

図を描きます。助けになる。

于 2016-08-15T13:45:57.800 に答える