1.13 3次元の空間オブジェクト
Oracle Spatialでは、3次元の空間データの格納および取出しがサポートされています(扱うことができる3次元の空間データは、点、点群(点の集合)、線、ポリゴン、面、ソリッドなど)。
ノート:
3次元の空間オブジェクトは、Oracle Autonomous Databaseサーバーレス・デプロイメントでOracle JVMが有効になっている場合にのみサポートされます。Oracle JVMを有効にするには、Oracle Autonomous Databaseサーバーレスの使用のOracle Javaの使用で詳細を参照してください。表1-1に、3次元のジオメトリに該当するSDO_GEOMETRY型のSDO_GTYPE属性および要素に関連する属性を示します。(SDO_GEOMETRY型については、「SDO_GEOMETRYオブジェクト型」を参照してください。)
表1-1 3次元ジオメトリのSDO_GEOMETRY属性
3-Dデータのタイプ | SDO_GTYPE | 要素タイプ、SDO_ELEM_INFOでの解釈 |
---|---|---|
点 |
3001 |
該当しません。SDO_POINT_TYPE属性に含まれる3次元の値をすべて指定します。 |
線 |
3002 |
2, 1 |
ポリゴン |
3003 |
1003, 1: 平面の外部ポリゴン 2003, 1: 平面の内部ポリゴン 1003, 3: 平面の外部矩形 2003, 3: 平面の内部矩形 |
表面 |
3003 |
1006, 1:表面(次にポリゴンの要素情報が続きます) |
コレクション |
3004 |
2次元の場合と同様に扱われます |
複数点(点群) |
3005 |
1, n(nは点の数) |
複数線 |
3006 |
2, 1 (線と同じ) |
複数面 |
3007 |
1つ以上の表面の要素定義 |
ソリッド |
3008 |
閉じられた1つの表面で形成される単純なソリッド: 1つの要素タイプ1007の後に、1つの要素タイプ1006(外部表面)が続き、オプションで1つ以上の要素タイプ2006(内部表面)が続きます。 隣接する複数の単純なソリッドで形成される複合ソリッド: 1つの要素タイプ1008(単純なソリッドの数を保持)の後に、任意の数の要素タイプ1007(それぞれが1つの単純なソリッド)が続きます。 |
マルチソリッド |
3009 |
1つ以上の単純なソリッドの要素定義(要素タイプ1007)または複合ソリッド(要素タイプ1008) |
次の空間演算子を使用する計算では、3次元すべてが使用されます。
-
SDO_INSIDE(ソリッド・ジオメトリのみ)
他の演算子では、最初の2次元のみ使用されます。前述した演算子には、この項で後述するように、測地データを処理するときに高さの情報が無視されるものもあります。(空間演算子については、「空間演算子」を参照してください。)
SDO_GEOM.SDO_VOLUMEファンクションはソリッド・ジオメトリ(その名のとおり3次元のジオメトリ)にのみ適用されます。ただし、このファンクションを測地データで使用することはできません。その他のSDO_GEOMサブプログラムにおける3次元のジオメトリのサポートについては、「SDO_GEOMパッケージ(ジオメトリ)」の使用方法を参照してください。
3次元ジオメトリでの距離計算は次のように行われます。
-
測地データ(地理3Dデータ)の場合、距離計算は測地面上で行われます。
-
非測地データ(投影データまたはローカル・データ)の場合、距離計算は、3次元すべての測定単位が同じ場合のみ有効です。
どのファンクション、プロシージャまたは演算子でも3次元すべてを使用できるようにするには、地理3Dデータ(経度、緯度、楕円体高)を含む空間表に空間索引を作成する際に、CREATE INDEX
文でPARAMETERS ('sdo_indx_dims=3')を指定する必要があります。このパラメータをCREATE INDEX文で指定しないと、2次元の索引が作成されます。
3次元すべてを使用する空間ファンクション、空間プロシージャおよび空間演算子では、距離および長さの計算は、高さ(標高)を適切に組み込んで行われます。たとえば、3次元の点が2つあり、1つの点はデカルト空間の基点(0,0,0)にあり、もう1つの点はY軸上のX=3の位置の、高さ(Z)が4の位置(3,0,4)にあるとします。
-
演算に3次元をすべて使用して計算すると、2点間の距離は5になります。(辺が3:4:5の直角三角形の斜辺と考えられます。)
-
演算に2次元のみ使用すると、2点間の距離は3になります。(つまり、3番目の次元である高さは無視されます。)
ただし、次の演算子およびサブプログラムでは、測地データを処理するときに、3次元ジオメトリでの距離が地上表現(たとえば、ビルの伏図の経度/緯度方向の広がり)で計算され、高さの情報は近似処理されます。
-
SDO_NN演算子
-
SDO_GEOM.SDO_DISTANCEファンクション
-
SDO_GEOM.WITHIN_DISTANCEファンクション
3次元データを使用した2次元問合せウィンドウでは、SDO_FILTER演算子は使用できますが、その他の空間演算子は使用できません。
様々なタイプの3次元空間ジオメトリの作成例は、「3次元のジオメトリ・タイプ」を参照してください。そこでは、3次元ジオメトリの空間メタデータの更新方法および空間索引の作成方法についても例を示しています。
3次元の座標参照系のサポートの詳細は、「3次元の座標参照系のサポート」を参照してください。
空間集計ファンクションおよびPL/SQLパッケージとサブプログラムの多くで、3次元はサポートされません。2次元ジオメトリのみがサポートされるものは次のとおりです。
-
空間集計ファンクション。SDO_AGGR_MBR(2次元と3次元の両方のジオメトリがサポートされる)を除きます。
-
SDO_GEOM(ジオメトリ)サブプログラム。次に示すサブプログラム(2次元と3次元の両方のジオメトリがサポートされる)を除きます。
-
SDO_SAM(空間分析およびマイニング)サブプログラム
-
SDO_MIGRATE.TO_CURRENTプロシージャ
表1-2では、Oracle Spatialで特定の測地3次元の計算を内部的に実行する方法について説明します。
表1-2 測地3次元の計算の実行方法
計算のタイプ | 実行される内部計算 |
---|---|
ANYINTERACT |
入力ジオメトリがGnomonic変換を使用して変換された後、結果のジオメトリを使用してANYINTERACT関係が計算されます。 |
Area |
入力ジオメトリがローカル交差平面に投影された後、結果の入力ジオメトリを使用して面積が計算されます。 |
DistanceまたはLength |
2次元の正確な楕円体距離が、2つの最近点の経度と緯度を使用して計算された後、高さまたは長さの差が近似値を使用して含められます。 |
Volume |
入力ジオメトリがローカル交差平面に投影された後、結果の入力ジオメトリを使用して容積が計算されます。 |
1.13.1 表面のモデル化
表面には面積はあるものの、容積はありません。また、2次元または3次元を使用できます。表面は、通常、一連の平面領域で構成されます。
表面は、表面タイプのSDO_GEOMETRYオブジェクトとして、または表面が非常に大きい場合はSDO_TINオブジェクトとしてモデル化されます。SDO_GEOMETRYにおける表面タイプは、隣接する3次元ポリゴンによって境界となる連続領域を定義する不定形面の場合があります。SDO_GEOMETRY内のポリゴンの数は、SDO_ORDINATES_ARRAYに指定可能な座標の数によって制限されます。一方、SDO_TINオブジェクトの場合、表面は三角形網としてモデル化され、三角形の数に対する明示的な制限はありません。
表面は、三角形網として、Triangulated Irregular Network (TIN)と呼ばれる形式で格納されます。TINモデルでは、面は連続した重ならない三角形の集合として表現されます。各三角形の表面は、1つの平面で表現されます。三角形は質点と呼ばれる一連の点で構成されます。慎重に質点を選択した場合、TINでは表面のモデルが正確に表現されます。山の頂上、谷底、または崖の縁(頂上や底)など、表面の形状に大きな変化がある場所では、質点が適切に配置されます。
TINは通常、経度(x)、緯度(y)および標高(z)の各次元における座標値を指定する3次元の点を基に計算されます。OracleのTIN生成ソフトウェアでは、デローニ三角分割法が使用されますが、デローニ三角分割法のみを使用してTINデータを形成する必要はありません。
TINの一般的な操作手順は次のとおりです。
-
SDO_TIN_PKG.INITファンクションを使用して、TINを初期化します。
-
SDO_TIN_PKG.CREATE_TINプロシージャを使用して、TINを作成します。
-
問合せが必要な場合は、SDO_TIN_PKG.CLIP_TINファンクションを使用して、TINをクリップします。
-
必要に応じて、SDO_TIN_PKG.TO_GEOMETRYファンクションを使用します(たとえば、クリップ操作の結果を1つのSDO_GEOMETRYオブジェクトに変換する場合)。
JavaによるTINの操作の例は、次のファイルを参照してください。
$ORACLE_HOME/md/demo/TIN/examples/java/README.txt $ORACLE_HOME/md/demo/TIN/examples/java/readTIN.java
親トピック: 3次元の空間オブジェクト
1.13.1.1 3Dメッシュのモデル化
TINのOracle Spatialサポートは、3Dメッシュをサポートするように拡張されています。メッシュは、垂直面、突出部、および現在TINでサポートされていない閉じた容積を含むオブジェクトの3D三角分割をモデル化できます。傾斜面はTINでよりよく表されますが、3Dメッシュはより複雑な風景、滝、崖、建物、車などのモデル化に使用できます。
TINのデローニ三角分割とは対照的に、ボール・ピボット・アルゴリズムに基づいて設定されたポイントから3Dメッシュが生成されます。メッシュ・ブロックの形状は、TIN用に生成されたスリム垂直ブロックとは異なります。
3Dメッシュは、SDO_TIN
データ型でも表されます。TINと3Dメッシュを区別するには、次のファンクションを使用してオブジェクト・メタデータを問い合せます。
次に、meshes
表のSDO_TINオブジェクトのメタデータを問い合せる例を示します。
SQL> SELECT
2 (cols.table_name || ':' || cols.column_name) "Column Name",
3 meshes.tin.tin_id "TIN ID",
4 sdo_tin_pkg.get_blocking_method(tin) "Model",
5 sdo_tin_pkg.get_num_points(tin) "# Pts",
6 sdo_tin_pkg.get_tin_block_sort_order(meshes.tin) "Blk Sort Order"
7 FROM
8 TABLE(sdo_tin_pkg.list_tin_columns()) cols,
9 TABLE(sdo_tin_pkg.list_tins(cols.table_name, cols.column_name)) meshes
10 ORDER BY
11 cols.table_name,
12 cols.column_name,
13 meshes.tin.tin_id;
この問合せの例では、次の出力が生成されます。
Column Name TIN ID Model # Pts Blk Sort Order
---------------- ---------- ---------------------- ---------- --------------------------------
MESHES:TIN 2 TIN 4 TIN by Delaunay triangulation
MESHES:TIN 3 Mesh 1097 Mesh by consecutive submesh
2 rows selected.
関連項目:
- 3Dメッシュの生成方法の詳細は、「SDO_TIN_PKG.CREATE_MESHES」を参照してください
SDO_TIN
オブジェクトを含むすべての列名をリストする場合、「SDO_TIN_PKG.LIST_TIN_COLUMNS」を参照してください- すべての
SDO_TIN
オブジェクトをリストする場合、「SDO_TIN_PKG.LIST_TINS」を参照してください
親トピック: 表面のモデル化
1.13.2 ソリッドのモデル化
最も単純なソリッドの種類は、サイコロや積み木のような立方形として表現できます。複雑なソリッドとして錐台があります。これは(3面以上の)大きなピラミッドを底面と平行な平面で切り取って形作ったピラミッドです。錐台は、空間演算子の問合せウィンドウとしてのみ使用できます。錐台および立方体は、通常、ソリッド・タイプのSDO_GEOMETRYオブジェクトとしてモデル化されます。図1-9に、ビュー・ポイントからの距離が異なる2つの空間オブジェクトを含む問合せウィンドウとしての錐台を示します。
点群(点の巨大な集合体)を使用して、ソリッド・ジオメトリおよび表面ジオメトリの形状または構造をモデル化することもできます。点群データを使用するほとんどのアプリケーションには、位置に基づく問合せが含まれます。アプリケーションは、Spatial外に出て、位置および可視性の両方に基づく問合せを実行する可視性のロジックを追加することもできます。
点群データを使用するアプリケーションのほとんどは、ビュー・ポイントからの距離に基づいてオブジェクトを取得することで、データ転送の最小化を図ります。たとえば、図1-9では、オブジェクトBはオブジェクトAよりもビュー・ポイントから離れています。したがって、アプリケーションは、オブジェクトAを細部まで(高解像度で)取得し、オブジェクトBを大まかに(低解像度で)取得する可能性があります。ほとんどの場合、ビュー・ポイントからの距離が遠くなるほど、オブジェクトの数は著しく増加します。また、離れているオブジェクトが近くにあるオブジェクトより低解像度で取得されると、問合せによって戻されるバイト数およびオブジェクトのレンダリング時間は飛躍的に減少します。
点群データの格納には、SDO_PCオブジェクトまたは平面表のいずれかを使用できます。使用する方法は、ご使用のハードウェア環境と使用方法に応じて異なります。平面形式の利点の1つは、その効果と動的な性質で、点データに対する更新であるため、再ブロック化を必要としません。
点群の一般的な操作手順は、その点群データがSDO_PCオブジェクトに格納されるか、平面表に格納されるかによって、次のようになります。
-
SDO_PCオブジェクトとして格納される点群データを使用するには:
-
SDO_PC_PKG.INITファンクションを使用して、点群を初期化します。
-
SDO_PC_PKG.CREATE_PCプロシージャを使用して点群を作成します。
-
問合せが必要な場合は、SDO_PC_PKG.CLIP_PCファンクションを使用して、点群をクリップします。
-
さらに、次を使用できます。
- SDO_PC_PKG.TO_GEOMETRY: クリップ操作の結果を1つのSDO_GEOMETRYオブジェクトに変換します。
- SDO_PC_PKG.PC_DIFFERENCE: 2つの点群間の差異を検出します。
- SDO_PC_PKG.GENERATE_CROSS_SECTION_AS_GEOMS: 点群の断面計算を実行します。
-
-
平面表に格納される点群データを使用するには:
-
点群データのための表(または該当する表に基づくビュー)を作成します。
各行には、1つの点の最初の3つの空間次元(およびオプションで非空間次元)の値が含まれます。表またはビューの定義は、VAL_D1 NUMBER、VAL_D2 NUMBERおよびVAL_D3 NUMBERの列で始まる必要があります。また、点群の非空間次元の列を含めることもできます。
-
表に点群データを移入します。
-
問合せが必要な場合は、SDO_PC_PKG.CLIP_PC_FLATファンクションを使用して、点群をクリップします。
-
Javaによる点群の操作の例は、次のファイルを参照してください。
$ORACLE_HOME/md/demo/PointCloud/examples/java/README.txt $ORACLE_HOME/md/demo/PointCloud/examples/java/readPointCloud.java
親トピック: 3次元の空間オブジェクト
1.13.3 3次元の最適化された矩形
3次元の矩形(3次元空間の矩形状のポリゴン)のすべての頂点を指定するかわりに、X、YおよびZ次元について最小座標値(min-corner)と最大座標値(max-corner)に対応する2つの角を指定するだけで矩形を表現できます。
この方法で定義された3次元の矩形の方向は、次のようになります。
-
矩形が<min-corner, max-corner>で指定された場合、法線は直交する3つ目の次元の正の方向を指します。
-
矩形が<max-corner, min-corner>で指定された場合、法線は直交する3つ目の次元の負の方向を指します。
たとえば、矩形がXY面にあり、頂点の順序が<min-corner, max-corner>の場合、法線は正のZ軸方向を指しますが、順序が<max-corner, min-corner>の場合、法線は負のZ軸方向を指します。
矩形におけるこれらの方向規則を使用して、次の要件を満たすように、矩形のmin-cornerとmax-cornerの各頂点の順序を適切に指定できます。
-
矩形がソリッドの一部である場合、ソリッドにおける各ポリゴンの法線は常にソリッドから外方向を指します。
-
矩形が面の一部である場合、内側の矩形ポリゴンはその外側の矩形ポリゴンとは反対の方向を向きます。
親トピック: 3次元の空間オブジェクト
1.13.4 テクスチャ・データの使用
ノート:
この項では、Spatialでテクスチャ・データを使用するために理解しておく必要のある概念について説明します。ただし、テクスチャ・メタデータはOracle Spatialにまだ完全には実装されておらず、ビューアはまだサポートされていません。この項は、テクスチャのサポートがリリースされるときに更新されます。
テクスチャは、フィーチャの1つ以上の部分を表すイメージです。テクスチャは、一般的に、空間ジオメトリとして格納されているオブジェクトを表示するビジュアライザ・アプリケーション(ビューア)で使用されます。たとえば、テクスチャを使用してオフィス・ビル(3次元ソリッド)をビューアで表示し、色だけを使用する場合よりさらにリアルな視覚化を実現することができます。テクスチャは、2次元と3次元のジオメトリで使用できます。
最も単純なケースでは、矩形ジオメトリをテクスチャ・ビットマップで覆うことができます。ただし、多くの場合、次のケースの例のように、テクスチャ・ビットマップのサブリージョンのみが使用されます。
-
テクスチャ・ビットマップに、同じビルの複数の側面、屋根および切妻屋根が含まれる場合。このケースでは、各ビットマップ部分が、ジオメトリの面の1つを覆っています。
-
テクスチャ・ビットマップがビルの面上にある1つのパネルまたは窓を表し、ジオメトリ面がこのようなパネルまたは窓を15個備えた壁(3つの階それぞれに5個ずつ)を表す場合。このケースでは、1つのテクスチャ・ビットマップを面上に15回並べます。
-
面が矩形以外のサブ面(切妻屋根など)である場合。このケースでは、テクスチャ・ビットマップの一部(可能な三角形)のみが使用されます。
図1-10に、表示すると3つのテクスチャで構成される大きな矩形面を示します(各テクスチャは、面の様々な場所で複数回繰り返されます)。
次に、図1-10について説明します。
-
イメージ全体は12個の小さな矩形面(表面ジオメトリ)で構成される大きな面であり、小さな矩形面はそれぞれ(A、BおよびCのラベルが付けられた)3つのイメージのうち1つで表すことができます。
-
(A、BおよびCのラベルが付けられた)3つのテクスチャ・ビットマップを使用すると、すべての面をビジュアル化できます。このケースでは、ビットマップAを3回、ビットマップBを6回、ビットマップCを3回使用します。
図1-11に、三角形の面にマッピングされたテクスチャ・ビットマップを示します。
次に、図1-11について説明します。
-
面(表面ジオメトリ)は三角形です。(たとえば、ビルの側面または屋根に、この面が複数含まれる可能性があります。)
-
テクスチャ・ビットマップ(イメージ)は矩形です(中央のボックスを参照)。
-
テクスチャ・ビットマップの一部が面のイメージを表します。この部分は右側のボックス内で破線で表されています。
アプリケーションでは、テクスチャ・ビットマップ内で座標を指定して、適切な部分を面ジオメトリにマッピングする必要があります。
面を表すイメージ・データの記憶域要件を最小化するために、必要となる重複していないテクスチャのみのイメージを格納する必要があります。テクスチャの格納に使用するデータ型はSDO_ORDINATE_ARRAYであり、これはSDO_GEOMETRY型定義(「SDO_GEOMETRYオブジェクト型」を参照)で使用されます。
たとえば、図1-10の大きな面が次のように定義されているとします。
SDO_GEOMETRY( SDO_POLYGON2D, -- two-dimensional polygon NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring) SDO_ORDINATE_ARRAY(1,1. 1,13, 13,13, 1,13, 1,1) )
次のように定義されたMY_TEXTURE_COORDINATES表があるとします。
CREATE TABLE my_texture_coordinates ( texture_coord_id NUMBER PRIMARY KEY, texture_name VARCHAR2(32), texture_coordinates SDO_ORDINATE_ARRAY);
例1-1では、この表に3つのテクスチャ座標の定義を挿入しています。テクスチャごとに、テクスチャ座標が図1-10で示す適切な小さな矩形のうち1つを反映します(ただし、各テクスチャに対しては、適切な矩形のうち任意のものを選択できます)。図1-1では、各テクスチャのSDO_ORDINATE_ARRAY定義で、図1-10の上部近くにあるポリゴンを反映しています。
例1-1 テクスチャ座標の定義の挿入
INSERT INTO my_texture_coordinates VALUES( 1, 'Texture_A', SDO_ORDINATE_ARRAY(1,9, 1,5, 5,12, 1,12, 1,9) ); INSERT INTO my_texture_coordinates VALUES( 2, 'Texture_B', SDO_ORDINATE_ARRAY(5,9, 9,9, 9,12, 5,12, 5,9) ); INSERT INTO my_texture_coordinates VALUES( 3, 'Texture_C', SDO_ORDINATE_ARRAY(1,12, 13,12, 13,13, 1,13, 1,12) );
1.13.4.1 テクスチャ・データのスキーマに関する考慮事項
テクスチャ・ビットマップ(VARCHAR2形式のBLOBまたはURLとして格納)とテクスチャ座標配列(SDO_ORDINATE_ARRAY型を使用して格納)は、SDO_GEOMETRY列として同じ表に格納したり、個別の表に格納することができますが、特にテクスチャ・ビットマップについては、通常、個別の表を使用することをお薦めします。テクスチャ・ビットマップはフィーチャ(異なるオフィス・ビルなど)間で共有可能になる可能性が高いのですが、テクスチャ座標の定義はフィーチャ間で共有可能になる可能性が低くなります。(たとえば、多くのオフィス・ビルは同じ一般的なガラスの外観を共有しますが、窓の数と階数が同じビルはほとんどありません。テクスチャとアプリケーションの設計では、同じテクスチャのサブリージョンを使用するビルの数、または同じサイズの反復マトリクスでテクスチャを覆うビルの数を考慮する必要があります。)
例外は、テクスチャ・ビットマップ全体で矩形のジオメトリ面を覆うテクスチャ座標配列です。この場合は、テクスチャ座標配列を(0,0, 1,0, 1,1, 0,1, 1,1)として指定することができます(左下、右下、右上、左上および最後に左下の頂点を定義します)。多くのデータ・セットで、このテクスチャ座標配列を広く使用していますが、これはデータ・セットでは主に矩形面を使用し、各テクスチャ・ビットマップに対して1つのファサードを格納するためです。
個別の表を使用している場合は、外部キーを使用してこれらの表を表面ジオメトリにリンクできます(例1-2を参照)。
例1-2 テクスチャ座標の表、テクスチャの表および面の表の作成
-- One row for each texture coordinates definition. CREATE TABLE my_texture_coordinates ( texture_coord_id NUMBER PRIMARY KEY, texture_coordinates SDO_ORDINATE_ARRAY); -- One row for each texture. CREATE TABLE my_textures( texture_id NUMBER PRIMARY KEY, texture BLOB); -- One row for each surface (each individual "piece" of a -- potentially larger surface). CREATE TABLE my_surfaces( surface_id NUMBER PRIMARY KEY, surface_geometry SDO_GEOMETRY, texture_id NUMBER, texture_coord_id NUMBER, CONSTRAINT texture_id_fk FOREIGN KEY (texture_id) REFERENCES my_textures(texture_id), CONSTRAINT texture_coord_id_fk FOREIGN KEY (texture_coord_id) REFERENCES my_texture_coordinates(texture_coord_id));
親トピック: テクスチャ・データの使用
1.13.5 3次元ジオメトリの検証
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTおよびSDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTサブプログラムで、2次元および3次元のジオメトリを検証できます。3次元ジオメトリの場合、これらのサブプログラムは、3次元ジオメトリ全体内で2次元ジオメトリに必要な検証(SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTの「使用上のノート」を参照)を行いますが、オブジェクト全体の3次元特性に固有の検証もいくつかの行います。
単純なソリッド(1つの外部表面と任意の数の内部表面を持つソリッド)の場合は、これらのサブプログラムで次の項目を確認します。
-
閉鎖性: ソリッドは閉じている必要があります。
-
到達可能性: ソリッドの各面は、隣接する各面と完全に共通なエッジを持つ必要があり、どの面からもすべての面に到達可能であることが必要です。(ただし、インナー・シェルは無視されます。インナー・シェルは、定義により、他のシェルに接続できないためです。)
-
内部と外部の非連結性: 内部表面は、複数の点や線で外部表面と交差しないことが必要です。つまり、内部表面で領域が重なることはできません。
-
面への追加がないこと: ソリッドを構成する表面上に、追加の表面を定義することはできません。
-
方向: すべての面で、法線ベクトル(面法線つまり法線)が外部ソリッドの外側(外部ソリッドから離れた方向)を指すように頂点が配置されている必要があります。したがって、外部ソリッドの容積は0 (ゼロ)より大きい必要があり、内部ソリッドの容積は0 (ゼロ)より小さい必要があります。
複合ソリッド(1つ以上のソリッドが相互に結合したもの)の場合は、これらのサブプログラムによって次の項目が確認されます。
-
連結性: 複合ソリッドに含まれるすべてのソリッドは、1つ以上の面を共有している必要があります。
-
容積0(ゼロ)の交差: 複合ソリッドに含まれるソリッドの交差部分の容積が0(ゼロ)であることが必要です。
マルチソリッド(単純なソリッドまたは複合ソリッドで構成される1つ以上のソリッド)の場合は、これらのサブプログラムによって次の項目が確認されます。
-
非結合性: マルチソリッドに含まれる任意の2つのソリッドは、点または線を共有できますが、これ以外の方法で交差していないことが必要です。
親トピック: 3次元の空間オブジェクト