2016-07-26 6 views
-5

私は可能な限り最善の解決策が必要であり、可能であれば汚れたコードではなく、スマートコードが必要です。ポイントが3Dキューブ内にあるかどうかを確認

私は3Dプログラミングに精通していません。

ポイントが3D空間(x、y、z)にある場合に返される関数を記述する必要があります。スペース内の立方体の範囲が供給されます(たとえば、範囲{{1,2,1}、{5,6,4}})

アイデアはありますか?

+4

問題を考えましたか?たとえば、x座標がその単一軸を満たすと判断する方法はありますか? –

+1

この宿題はありますか?それはあまりのことではありませんが、完全な "スマートな"コードは期待できません。正しい方向にポインタを置くと、より多くのことができます。 – Jamiec

+0

3Dプログラミングに慣れていない人は、自分が誰かを見つけたり、自分でそれを学んだりすることができます。 –

答えて

2

指定された点にポイント間にあるすべての座標があるかどうかをテストするだけで十分です。したがって、(x1、y1、z1)が最小コーナーで(x2、y2、z2)が最大点である場合、点(x、y、z)をテストするために、x1 < = x < = yとzについても同様です。

座標軸に揃えられた立方体が、平面x = x1の左にあり、平面x = x2の右にあり、平面y = y1の上にある領域であることと、 y = y2以下である。立方体内の点は、6つの不等式をすべて同時に満たす点である。これは確かにあなたが確認しているものです。

キューブが座標軸と整列していない場合は、2つのコーナーからキューブを特定することはできません。むしろ、サイズ面を決定する平面に不等式を与えることによって記述される。あなたは6つすべてが満足していることを確認する必要があります。これは常に行列不等式として書くことができます。この場合、点が3d空間にあり、各制約に対して1行であるので、6x3行列、3列。これは一般的なケースですが、上記のように問題が残っています。

+0

Hmmmm。うまくいくかもしれない。私は行列を使うことができると理解しましたが、私の数学は錆びています – Systellence

+0

はい、行列を使うことができますが、それは過剰です。あなたの立方体が常に座標平面と整列している場合、この解法は正しいです。立方体は、x座標がx1とx2の間、y座標がy1とy2の間です。 –

+1

標識には注意してください。たとえば、P1が(-10,10、-10)でP2が(10、-10.10) –

0

たとえば、(軸ごとに)3つの投影を計算できます。たとえば あなたはZ斧用の突起を持たせたい場合は、ちょうどあなたのポイントからZ値を消去することができ座標:

projection({1,2,3}) -> {1,2} 

そしてちょうど決定はまた、単なる投影である正方形の内部の突起(ポイント)です下(または上)の4点。 アッシャー軸の場合も同様です。

1

ポイントp = (x, y, z)は、点の座標のそれぞれがx、y、zのそれぞれの範囲内にある場合には、[x_0, x_1] x [y_0, y_1] x [z_0, z_1]の立方体内にあります。それは間隔が私が正しくということ[1,5]×[2,6]×[1,4]を読んだことがあるならば、あなたの特定のキューブで

bool PointIsInCube(Point3D p, float x_max, float x_min, float y_max, float y_min, float z_max, float z_min) 
    { 
     return (p.x <= x_max && p.x >= x_min) && (p.y <= y_max && p.y >= y_min) && (p.z <= z_max && p.z >= z_min); 
    } 

擬似コード

です。 (xの最初の間隔、yの秒、zの3番目)

関連する問題