(57)【要約】【課題】穴を埋める作業を実施することなく、内外判定処理の判定精度を従来よりも向上させることができる。【解決手段】物体のｎ（ｎは２以上の整数）次元形状が多角形の複数の面からなる多面体で表現された表面形状データを用いて任意の点が前記多面体の内側にあるか否かを判定する情報処理装置であって、前記複数の面のうち、前記格子点から垂線が引ける前記面である直交面を特定する特定部と、前記特定部により特定された前記直交面の重心位置から前記格子点への第１のベクトルと、当該直交面の法線ベクトルである第２のベクトルとのなす角を算出する算出部と、前記算出部が算出した前記なす角が９０度以上であれば、前記格子点が前記多面体の内側にあると判定する第１判定部と、を備える。【選択図】図１
2020205005.tif 000002
【特許請求の範囲】
【請求項１】
物体のｎ（ｎは２以上の整数）次元形状が多角形の複数の面からなる多面体で表現された表面形状データを用いて任意の格子点が前記多面体の内側にあるか否かを判定する情報処理装置であって、
前記複数の面のうち、前記格子点から垂線が引ける前記面である直交面を特定する特定部と、
前記特定部により特定された前記直交面の重心位置から前記格子点への第１のベクトルと、当該直交面の法線ベクトルである第２のベクトルとのなす角を算出する算出部と、
前記算出部が算出した前記なす角が９０度以上であれば、前記格子点が前記多面体の内側にあると判定する第１判定部と、
を備える情報処理装置。
【請求項２】
前記複数の面のうち１つの面を対象面として選択する選択部を備え、
前記特定部は、
前記対象面の法線方向に平行でかつ前記格子点を通る直線を生成する直線生成部と、
前記直線と前記面とが交差する交差位置が前記対象面の面内にあるか否かを判定する第２判定部と、
を備え、
前記算出部は、前記第２判定部において前記交差位置が前記対象面の面内にあると判定された場合には、前記対象面を前記直交面として当該対象面の重心位置から前記格子点への前記第１のベクトルと、当該対象面の前記第２のベクトルとの前記なす角を算出する、
ことを特徴とする、
請求項１に記載の情報処理装置。
【請求項３】
前記格子点と前記交差位置との距離が所定値以上か否かを判定する第３判定部をさらに備え、
前記第２判定部は、前記第３判定部により前記距離が所定値未満であると判定された場合のみ、前記交差位置が前記対象面の面内にあるか否かを判定する、
ことを特徴とする、
請求項２に記載の情報処理装置。
【請求項４】
コンピュータに、
物体のｎ（ｎは２以上の整数）次元形状が多角形の複数の面からなる多面体で表現された表面形状データを用いて、前記複数の面のうち、所定の格子点から垂線が引ける前記面である直交面を特定する特定ステップと、
前記特定ステップにより特定された前記直交面の重心位置から前記格子点への第１のベクトルと、当該直交面の法線ベクトルである第２のベクトルとのなす角を算出する算出ステップと、
前記算出ステップが算出した前記なす角が９０度以上であれば、前記格子点が前記多面体の内側にあると判定する判定ステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びプログラムに関する。
【背景技術】
【０００２】
物体の周囲の流れ場を解析する手法として、ＣＦＤ（数値流体力学）によるシミュレーションが知られている。上記ＣＦＤでは、モデル化された空間内を複数の計算格子に分割して、各計算格子点上で方程式を解くことで上記空間に置かれた上記物体周囲の流れ場を予測する。そのため、上記ＣＦＤを実施するためには、各計算格子点が物体の内側か外側かを判定する内外判定処理は必要不可欠である。従来の内外判定処理としては、Crossing Number Algorithmが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−３３０９７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記ＣＦＤに用いられる物体の表面形状データは、物体のＣＡＤデータからＳＴＬフォーマットで変換されたデータであることが多い。ただし、ＳＴＬフォーマットで変換された表面形状データは、物体のポリゴンモデルを構成する複数の面（ポリゴン面）の一部に穴が開いてしまうエラーが生じることが知られている。したがって、内外判定として、Crossing Number Algorithmを用いると、内外判定ができない計算格子点が発生したり、外側の計算格子点を内側の計算格子点として誤判定してしまう事象が多発する。そこで、別ソフトウェアで上記穴を埋める作業を実施する必要があり、内外判定処理に係る作業が煩雑である。
【０００５】
本発明は、このような事情に鑑みてなされたもので、その目的は、穴を埋める作業を実施することなく、内外判定処理の判定精度を従来よりも向上させることである。
【課題を解決するための手段】
【０００６】
（１）本発明の一態様は、物体のｎ（ｎは２以上の整数）次元形状が多角形の複数の面からなる多面体で表現された表面形状データを用いて任意の点が前記多面体の内側にあるか否かを判定する情報処理装置であって、前記複数の面のうち、前記格子点から垂線が引ける前記面である直交面を特定する特定部と、前記特定部により特定された前記直交面の重心位置から前記格子点への第１のベクトルと、当該直交面の法線ベクトルである第２のベクトルとのなす角を算出する算出部と、前記算出部が算出した前記なす角が９０度以上であれば、前記格子点が前記多面体の内側にあると判定する第１判定部と、を備える情報処理装置である。
【０００７】
（２）上記（１）の情報処理装置であって、前記複数の面のうち１つの面を対象面として選択する選択部を備え、前記特定部は、前記対象面の法線方向に平行でかつ前記格子点を通る直線を生成する直線生成部と、前記直線と前記面とが交差する交差位置が前記対象面の面内にあるか否かを判定する第２判定部と、を備え、前記算出部は、前記第２判定部において前記交差位置が前記対象面の面内にあると判定された場合には、前記対象面を前記直交面として当該対象面の重心位置から前記格子点への第１のベクトルと、当該対象面の前記第２のベクトルとの前記なす角を算出してもよい。
【０００８】
（３）上記（２）の情報処理装置であって、前記格子点と前記交差位置との距離が所定値以上か否かを判定する第３判定部をさらに備え、前記第２判定部は、前記第３判定部におり前記距離が所定値未満であると判定された場合のみ、前記交差位置が前記対象面の面内にあるか否かを判定してもよい。
【０００９】
（４）本発明の一態様は、コンピュータに、物体のｎ（ｎは２以上の整数）次元形状が多角形の複数の面からなる多面体で表現された表面形状データを用いて、前記複数の面のうち、前記格子点から垂線が引ける前記面である直交面を特定する特定ステップと、前記特定部により特定された前記直交面の重心位置から前記格子点への第１のベクトルと、当該直交面の法線ベクトルである第２のベクトルとのなす角を算出する算出ステップと、前記算出部が算出した前記なす角が９０度以上であれば、前記格子点が前記多面体の内側にあると判定する判定ステップと、を実行させるためのプログラムである。
【発明の効果】
【００１０】
以上説明したように、本発明によれば、穴を埋める作業を実施することなく、内外判定処理の判定精度を従来よりも向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】本実施形態に係る情報処理装置１の概略構成の一例を示す図である。
【図２】本実施形態に係る内外判定処理を実行するためのプロセッサ１０の各機能部を示す図である。
【図３】本実施形態に係る内外判定処理について説明する図である。
【図４】本実施形態に係る情報処理装置１の動作の全体の流れを示す図である。
【図５】本実施形態に係る内外判定処理の動作のフロー図である。
【図６】本実施形態に係る本実施形態に係る内外判定処理の効果を説明する図である。
【図７】本実施形態に係る変形例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本実施形態に係る情報処理装置を、図面を用いて説明する。
【００１３】
図１は、本実施形態に係る情報処理装置１の概略構成の一例を示す図である。
本実施形態に係る情報処理装置１は、物体のｎ（ｎは２以上の整数）次元形状が多角形の複数の面からなる多面体で表現された表面形状データを用いて任意の点が当該多面体の内部にあるか否かを判定する内外判定処理を実行する。情報処理装置１は、例えば、コンピュータである。本実施形態では、ｎは３である。
【００１４】
本実施形態に係る内外判定処理は、上記物体の周囲の流れ場を予測するＣＦＤ（Computational Fluid Dynamics：数値流体力学）解析を行う前に実行される。ＣＦＤ解析処理は、モデル化された空間内を複数のメッシュ（以下、「計算格子」という。）に分割して、各計算格子点Ｐ上で方程式を解くことで上記空間に置かれた上記物体周囲の流れ場を予測する解析手法である。本実施形態に係る内外判定処理は、ＣＦＤ解析処理を実施するにあたって、計算格子点Ｐが物体の内側か外側かを判定する処理を計算格子点Ｐごとに行うことであり、Crossing Number Algorithmとは異なる処理である。
情報処理装置１は、内外判定処理だけを実行してもよいし、内外判定処理及びＣＦＤ解析処理を実行してもよい。なお、ＣＦＤ解析処理は、公知の技術であるため、詳細を省略する。
【００１５】
なお、本実施形態の表面形状データは、上記物体のＣＡＤデータからＳＴＬ（Standard Triangulated Languageの略でStereolithographyとも呼ばれる）フォーマットで変換されたデータである。したがって、ＳＴＬフォーマットで表現された物体は、小さな三角形（ボリゴン）の面（以下、「ポリゴン面」という。）Ｍの集合体で表現される。
【００１６】
なお、表面形状データは、ポリゴン面Ｍの向きの情報として法線ベクトルＶｎをポリゴン面Ｍごとに有している。法線ベクトルＶｎは、物体の外側を示す単位ベクトルである。
【００１７】
次に、本実施形態に係る情報処理装置１のハードウエア構成について、図１を用いて説明する。図１は、本実施形態に係る情報処理装置１のハードウエア構成の一例を示す図である。
【００１８】
図１に示すように、情報処理装置１は、プロセッサ１０、メモリ１１、記憶装置１２、入力インタフェース（入力Ｉ／Ｆ）１３、表示インタフェース（表示Ｉ／Ｆ）１４、及び通信インタフェース（通信Ｉ／Ｆ）１５を備える。情報処理装置１のハードウエアの各構成要素は、一例として、バスＢを介して相互に接続される。
【００１９】
プロセッサ１０は、情報処理装置１の全体を制御する。
プロセッサ１０は、記憶装置１２に記憶される第１のプログラムを実行することにより、内外判定処理を実行する。プロセッサ１０は、記憶装置１２に記憶される第２のプログラムを実行することにより、ＣＦＤ解析処理を実行する。
【００２０】
プロセッサ１０は、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＧＰＵ（Graphic s Processing Unit）、マイクロプロセッサ（microprocessor）、プロセッサコア（processor core）、マルチプロセッサ（multiprocessor）、ＡＳＩＣ（Application-Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）等を含み、集積回路（ＩＣ（Integrated Circuit）チップ、ＬＳＩ（Large Scale Integration））等に形成された論理回路（ハードウェア）や専用回路によって内外判定処理やＣＦＤ解析処理を実現してもよい。また、プロセッサ１０は、複数のＣＰＵにより構成されてもよい。
【００２１】
メモリ１１は、ストレージ２０３からロードしたプログラムを一時的に記憶し、プロセッサ１０に対して作業領域を提供する。メモリ１１には、プロセッサ１０がプログラムを実行している間に生成される各種データも一時的に格納される。例えば、メモリ１１は、ＲＡＭ（Random Access Memory）である。
【００２２】
記憶装置１２は、非一時的なコンピュータ可読媒体（non−transitory computer readable medium）である。記憶装置１２は、第１のプログラム及び第２のプログラムを格納する。また、記憶装置１２は、上記物体の表面形状データを格納する。さらに、記憶装置１２は、複数に分割された計算格子を有する３次元空間の情報（以下、「計算格子データ」という。）を格納する。例えば、記憶装置１２は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ等である。
【００２３】
入力Ｉ／Ｆ１３には、操作部１００が接続されている。例えば、操作部１００は、キーボード及びマウスを備える。ただし、操作部１００は、これに限定されず、入力ボタンやスイッチ、マイク、表示装置１０１の表示画面に対するポイント操作に用いられるマウスやタッチパッド等のポインティングデバイス等の入力デバイスを備えてもよい。また、操作部１００は、スマートフォンやタブレット等の携帯情報端末であってもよい。入力Ｉ／Ｆ１３は、操作部１００から送信される信号（以下、「操作信号」という。）をプロセッサ１０に送信する。
【００２４】
表示Ｉ／Ｆ１４には、表示装置１０１が接続されている。表示Ｉ／Ｆ１４は、プロセッサ１０からの命令に従って、表示装置１０１の表示画面に表示させる。例えば、表示装置１０１は、ＣＲＴ（Cathode Ray Tube）ディスプレイまたは液晶ディスプレイである。
【００２５】
通信インタフェース（通信Ｉ／Ｆ）１５は、通信ネットワーク１０２に接続されている。通信Ｉ／Ｆ１５は、通信ネットワーク１０２を介して、他の情報処理装置（例えば、コンピュータ）との間でデータの送受信を行う。通信ネットワーク１０２は、無線通信の伝送路であってもよいし、有線通信の伝送路であってもよいし、無線通信の伝送路及び有線通信の伝送路の組み合わせであってもよい。通信Ｉ／Ｆ１５は、各種データをプロセッサ１０からの命令に従って、他の情報処理装置に送信する。また、通信Ｉ／Ｆ１５は、他の情報処理装置から送信された各種データを受信し、プロセッサ１０に伝達する。
【００２６】
次に、本実施形態に係る内外判定処理を実行するためのプロセッサ１０の機能部について、図２を用いて説明する。図２は、本実施形態に係る内外判定処理を実行するためのプロセッサ１０の各機能部を示す図である。
【００２７】
プロセッサ１０は、三次元空間内の複数の計算格子点Ｐのそれぞれに対して、計算格子点Ｐが物体の内側か外側かを判定する内外判定処理を実行する。具体的には、プロセッサ１０は、三次元空間内の複数の計算格子点Ｐのうち、内外判定処理の処理対象の計算格子点Ｐ（以下、「対象格子点Ｐｔ」という。）を選択する。そして、プロセッサ１０は、対象格子点Ｐｔから垂線が引けるポリゴン面の法線ベクトルＶｎと、当該ポリゴン面の重心位置から対象格子点Ｐｔまでのベクトル（以下、「距離ベクトルＶｄ」という。）とのなす角αを求め、なす角αが９０度以上である場合には対象格子点Ｐｔが物体の内側にあると判定する内外判定処理を実行する。なお、プロセッサ１０は、対象格子点Ｐｔから垂線が引けるポリゴン面がない場合には当該対象格子点Ｐｔの内外判定処理を終了して、他の計算格子点Ｐを対象格子点Ｐｔに選択して内外判定処理を実行してもよい。なお、距離ベクトルＶｄは、本発明の「第１のベクトル」である。なお、法線ベクトルＶｎは、本発明の「第２のベクトル」である。
【００２８】
プロセッサ１０は、データ読込部２０、モデル生成部２１、第１選択部２２、第２選択部２３、重心位置決定部２４、ベクトル算出部２５、特定部２６、角度算出部２７及び内外判定部２８を備える。なお、内外判定部２８は、本発明の「第１判定部」の一例である。
【００２９】
データ読込部２０は、計算格子データを記憶装置１２から読み込む。データ読込部２０は、表面形状データを記憶装置１２から読み込む。なお、表面形状データには、各ポリゴン面の法線ベクトルＶｎの情報も含まれている。
【００３０】
モデル生成部２１は、データ読込部２０に読み込まれた計算格子データ及び表面形状データに基づいて、複数の計算格子で分割された三次元空間上に、物体の形状を示す三次元モデルを生成する。この三次元モデルは、複数のポリゴン面Ｍ１〜Ｍｍ（ｍは４以上の整数）で表現されたポリゴンモデルである。なお、モデル生成部２１は、各ポリゴン面が法線ベクトルＶｎを有していない場合には、各ポリゴン面の法線ベクトルＶｎを計算してもよい。なお、各ポリゴン面の法線ベクトルＶｎは、すべて物体の外側を向く方向となる。
【００３１】
第１選択部２２は、複数の計算格子点Ｐのうち、一つを対象格子点Ｐｔとして選択する。例えば、第１選択部２２は、複数の計算格子点Ｐのそれぞれに内外判定処理が実行される順番を付し、その順番に沿って対象格子点Ｐｔを選択する。
【００３２】
第２選択部２３は、複数のポリゴン面Ｍ１〜Ｍｍのうち、一つを対象ポリゴン面Ｍｔとして選択する。例えば、第２選択部２３は、複数のポリゴン面Ｍ１〜Ｍｍのそれぞれに番号を付し、その番号の順に対象ポリゴン面Ｍｔを選択する。また、第２選択部２３は、複数のポリゴン面Ｍ１〜Ｍｍのうち、対象格子点Ｐｔから近い順に対象ポリゴン面Ｍｔを選択してもよい。なお、対象ポリゴン面Ｍｔは、本発明の「対象面」の一例である。
【００３３】
重心位置決定部２４は、対象ポリゴン面Ｍｔの重心位置Ｇを決定する。例えば、対象ポリゴン面Ｍｔの３つの頂点が（ｘ１，ｙ１，ｚ１）、（ｘ２，ｙ２，ｚ２）、（ｘ３，ｙ３，ｚ３）である場合には、重心位置決定部２４は、以下に示す公知の公式でポリゴン面Ｍの重心位置Ｇを求める。
【００３４】
重心位置Ｇ＝（（ｘ１＋ｙ１＋ｚ１）／３），（（ｘ２＋ｙ２＋ｚ２）／３），（（ｘ３＋ｙ３＋ｚ３）／３）
【００３５】
ベクトル算出部２５は、対象ポリゴン面Ｍｔの重心位置Ｇから対象格子点Ｐｔまでのベクトルである距離ベクトルＶｄを求める。ここで、三次元空間における各計算格子点Ｐの位置のデータ（例えば、座標）は、計算格子データに含まれている。そのため、ベクトル算出部２５は、計算格子データから対象格子点Ｐｔの位置を取得することができる。したがって、例えば、ベクトル算出部２５は、重心位置Ｇから対象格子点Ｐｔの位置までの距離ベクトルＶｄを公知のベクトルの公式を用いることで算出する。
【００３６】
特定部２６は、複数のポリゴン面Ｍ１〜Ｍｍのうち、対象格子点Ｐｔから垂線が引けるポリゴン面である直交面を特定する直交面特定処理を実行する。例えば、特定部２６は、複数のポリゴン面Ｍ１〜Ｍｍのうち、対象格子点Ｐｔから垂線が引けるポリゴン面（直交面）があるか否かを判定する。「対象格子点Ｐｔから垂線が引けるポリゴン面がある」ことは、対象格子点Ｐｔが複数のポリゴン面Ｍ１〜Ｍｍの少なくとも一つ以上のポリゴン面の垂直方向に存在することと同義である。換言すれば、「対象格子点Ｐｔから垂線が引けるポリゴン面がある」ことは、対象格子点Ｐｔが複数のポリゴン面Ｍ１〜Ｍｍの少なくとも一つ以上のポリゴン面の垂線上に存在することと同義である。
なお、特定部２６は、複数のポリゴン面Ｍ１〜Ｍｍのうち、対象格子点Ｐｔから垂線が引けるポリゴン面である直交面が特定できない場合（直交面がない場合）には、当該対象格子点Ｐｔが物体の外側であると判定してもよいし、当該対象格子点Ｐｔの内外判定処理を終了して内外判定処理が実施されていない計算格子点Ｐを対象格子点Ｐｔに設定して直交面特定処理を実行してもよい。
【００３７】
以下に、上記直交面特定処理を行うための特定部２６の各機能部について説明する。
例えば、特定部２６は、直線生成部３０、交差有無判定部３１及び面内外判定部３２を備える。交差有無判定部３１は、本発明の「第３判定部」の一例である。面内外判定部３２は、本発明の「第２判定部」の一例である。
【００３８】
直線生成部３０は、対象ポリゴン面Ｍｔの法線ベクトルから法線方向を読み取る。そして、直線生成部３０は、対象格子点Ｐｔを通り、法線方向に平行でかつ対象ポリゴン面Ｍｔに向かう直線Ｌｐを生成する直線生成処理を実行する。
【００３９】
交差有無判定部３１は、直線Ｌｐが複数のポリゴン面Ｍ１〜Ｍｍのいずれかのポリゴン面と交差するか否かを判定する交差判定処理を実行する。交差有無判定部３１は、直線Ｌｐが複数のポリゴン面Ｍ１〜Ｍｍのいずれかのポリゴン面と交差すると判定した場合には、当該ポリゴン面Ｍと直線Ｌｐとが交差する位置（以下、「交差位置Ｚ」という。）を求める。
【００４０】
面内外判定部３２は、交差位置Ｚが対象ポリゴン面Ｍｔの面内にあるか否かを判定する面内外判定処理を実行する。例えば、対象ポリゴン面Ｍｔの３つの頂点が位置Ｐ１〜Ｐ３である場合において、面内外判定部３２は、位置Ｐ１から位置Ｐ２へのベクトルと位置Ｐ２から交差位置Ｚへのベクトルとの外積である第１の外積を求める。面内外判定部３２は、位置Ｐ２から位置Ｐ３へのベクトルと位置Ｐ３から交差位置Ｚへのベクトルとの外積である第２の外積を求める。面内外判定部３２は、位置Ｐ３から位置Ｐ１へのベクトルと位置Ｐ１から交差位置Ｚへのベクトルとの外積である第３の外積を求める。そして、面内外判定部３２は、第１の外積、第２の外積及び第３の外積の各外積の符号がすべて一致していれば、交差位置Ｚが対象ポリゴン面Ｍｔの面内にあると判定する。一方、面内外判定部３２は、第１の外積、第２の外積及び第３の外積の各符号のいずれかが他の符号と異なれば、交差位置Ｚが対象ポリゴン面Ｍｔの面外にあると判定する。ただし、面内外判定部３２は、交差位置Ｚが対象ポリゴン面Ｍｔの面内にあるか否かを判定できればよく、上記外積を用いた方法以外にも、公知の技術を用いてもよい。
【００４１】
面内外判定部３２によって交差位置Ｚが対象ポリゴン面Ｍｔの面内にあると判定された場合には、当該対象ポリゴン面Ｍｔが対象格子点Ｐｔから垂線が引けるポリゴン面、すなわち直交面であると特定されたことになる。
【００４２】
角度算出部２７は、特定部２６により特定された直交面の重心位置Ｇから対象格子点Ｐｔへの距離ベクトルＶｄを求め、その距離ベクトルＶｄと当該直交面の法線ベクトルＶｎとのなす角αを算出する。
【００４３】
内外判定部２８は、角度算出部２７が算出したなす角αが９０度以上であれば、対象格子点Ｐｔが三次元空間における物体の内部にあると判定する。一方、内外判定部２８は、角度算出部２７が算出したなす角αが９０度未満であれば、対象格子点Ｐｔが三次元空間における物体の外部にあると判定する。
【００４４】
図３を用いて、本実施形態に係る内外判定処理について、説明する。図３は、本実施形態に係る内外判定処理について説明する図であって、説明の便宜上、２次元の空間について示している。
【００４５】
図３に示すように、プロセッサ１０は、複数の計算格子点Ｐ（図３に示す●）のうち、計算格子点Ｐ１を対象格子点Ｐｔに選択したとする。この場合には、例えば、プロセッサ１０は、ポリゴン面Ｍ１を対象ポリゴン面Ｍｔとして選択して、ポリゴン面Ｍ１の重心位置Ｇ１を求める。さらに、プロセッサ１０は、計算格子点Ｐ１からポリゴン面Ｍ１に対して、ポリゴン面Ｍ１の法線方向と平行な直線Ｌｐ１を引く。図３に示す例では、計算格子点Ｐ１は、ポリゴン面Ｍ１の垂線上に存在しているため、垂線Ｌｐ１とポリゴン面Ｍとの交差位置Ｚ１は、面内外判定処理により対象ポリゴン面Ｍｔであるポリゴン面Ｍ１の面内にあると判定される。したがって、プロセッサ１０は、ポリゴン面Ｍ１の重心位置Ｇ１から計算格子点Ｐ１への距離ベクトルＶｄ１を求め、その距離ベクトルＶｄ１とポリゴン面Ｍ１の法線ベクトルＶｎ１とのなす角α１を算出する。そして、プロセッサ１０は、なす角α１が９０度未満か否かを判定する。図３に示す例では、なす角α１が９０度未満であるため、プロセッサ１０は、計算格子点Ｐ１が物体の外側であると判定する。
【００４６】
次に、図３において、プロセッサ１０は、複数の計算格子点Ｐ（図３に示す●）のうち、計算格子点Ｐ２を対象格子点Ｐｔに選択したとする。この場合には、例えば、プロセッサ１０は、ポリゴン面Ｍ４を対象ポリゴン面Ｍｔとして選択して、ポリゴン面Ｍ４の重心位置Ｇ２を求める。さらに、プロセッサ１０は、計算格子点Ｐ２からポリゴン面Ｍ４に対して、ポリゴン面Ｍ４の法線方向と平行な直線Ｌｐ２を引く。図３に示す例では、計算格子点Ｐ２は、ポリゴン面Ｍ４の垂線上に存在しているため、垂線Ｌｐ２とポリゴン面Ｍとの交差位置Ｚ２は、面内外判定処理により対象ポリゴン面Ｍｔであるポリゴン面Ｍ４の面内にあると判定される。したがって、プロセッサ１０は、ポリゴン面Ｍ４の重心位置Ｇ２から計算格子点Ｐ２への距離ベクトルＶｄ２を求め、その距離ベクトルＶｄ２とポリゴン面Ｍ４の法線ベクトルＶｎ２とのなす角α２を算出する。そして、プロセッサ１０は、なす角α２が９０度未満か否かを判定する。図３に示す例では、なす角α２が９０度以上であるため、プロセッサ１０は、計算格子点Ｐ２が物体の内側であると判定する。
【００４７】
次に、本実施形態に係る情報処理装置１の動作の全体の流れについて、図４を用いて説明する。図４は、本実施形態に係る情報処理装置１の動作の全体の流れを示す図である。
【００４８】
プロセッサ１０は、物体のＣＡＤデータをＳＴＬフォーマットに変換したデータである表面形状データを記憶装置１２に保存する（ステップＳ１０１）。また、プロセッサ１０は、解析対象である物体を包含する三次元空間の範囲の計算格子のデータ、すなわち上記計算格子データを記憶装置１２に保存する（ステップＳ１０２）。プロセッサ１０は、ＣＡＤデータ及び計算格子データを通信ネットワーク１０２から取得してもよいし、外部の記憶装置から取得してもよい。
【００４９】
プロセッサ１０は、ＣＦＤ解析処理を実行するための第２のプログラムを通信ネットワーク１０２から取得して記憶装置１２に保存する（ステップＳ１０３）。
プロセッサ１０は、入力Ｉ／Ｆ１３から内部判定処理を指示するコマンドを示す操作信号を受信すると（ステップＳ１０４）、記憶装置１２から内部判定処理を実行するための第１のプログラムを読み込み、読み込んだ第１のプログラムを実行することによりすべての計算格子点に対して内外判定処理を実行する（ステップＳ１０５）。これにより、情報処理装置１は、ＣＦＤ解析処理を実行するにあたって、ポリゴン面Ｍと交差する計算格子点の位置を把握することができる。すなわち、情報処理装置１は、複数の計算格子で分割された三次元空間において、どこに各ポリゴン面Ｍがあるのかを特定できる。
【００５０】
プロセッサ１０は、すべての計算格子点に対して内外判定処理が終了した場合には、記憶装置１２から第２のプログラムを読み込み、読み込んだ第２のプログラムを実行することによりＣＦＤ解析処理を実行する（ステップＳ１０６）。そして、ＣＦＤ解析処理が完了すると、表示Ｉ／Ｆ１４は、ＣＦＤ解析処理の解析結果を表示装置１０１に表示する（ステップＳ１０７）。
【００５１】
次に、本実施形態に係る内外判定処理の動作の流れについて、図５を用いて説明する。図５は、本実施形態に係る内外判定処理の動作のフロー図である。
【００５２】
プロセッサ１０は、計算格子データを記憶装置１２から読み込む（ステップＳ２０１）。プロセッサ１０は、表面形状データを記憶装置１２から読み込む（ステップＳ２０２）。そして、プロセッサ１０は、データ読込部２０に読み込まれた計算格子データ及び表面形状データに基づいて、複数の計算格子で分割された三次元空間上に、複数のポリゴン面Ｍ１〜Ｍｍで表現されたポリゴンモデルを生成する。
【００５３】
プロセッサ１０は、複数の計算格子点Ｐのうち、一つを対象格子点Ｐｔとして選択する（ステップＳ２０３）。また、プロセッサ１０は、複数のポリゴン面Ｍ１〜Ｍｍのうち、一つを対象ポリゴン面Ｍｔとして選択する（ステップＳ２０４）。
【００５４】
プロセッサ１０は、対象ポリゴン面Ｍｔを選択すると、その選択した対象ポリゴン面Ｍｔの重心位置Ｇを算出する（ステップＳ２０５）。そして、プロセッサ１０は、算出した対象ポリゴン面Ｍｔの重心位置Ｇから対象格子点Ｐｔまでの距離ベクトルＶｄを求める（ステップＳ２０６）。
【００５５】
プロセッサ１０は、対象ポリゴン面Ｍｔの法線ベクトルから法線方向を読み取り、対象格子点Ｐｔを通り、当該法線方向に平行でかつ対象ポリゴン面Ｍｔに向かう直線Ｌｐを生成する（ステップＳ２０７）。プロセッサ１０は、直線Ｌｐと複数のポリゴン面Ｍ１〜Ｍｍとが交差するか否かを判定する交差判定処理を実行する（ステップＳ２０８）。プロセッサ１０は、直線Ｌｐが複数のポリゴン面Ｍ１〜Ｍｍのいずれかのポリゴン面と交差すると判定した場合には、当該ポリゴン面Ｍと直線Ｌｐとの交点位置Ｚを求める。一方、プロセッサ１０は、直線Ｌｐが複数のポリゴン面Ｍ１〜Ｍｍのいずれかのポリゴン面とも交差しないと判定された場合には、すべてのポリゴン面Ｍを対象ポリゴン面Ｍｔとして選択したか否かを判定する（ステップＳ２０９）。プロセッサ１０は、対象ポリゴン面Ｍｔとして選択していないポリゴン面Ｍがある場合には、ステップＳ２０４の処理に移行する。一方、プロセッサ１０は、対象ポリゴン面Ｍｔとして選択していないポリゴン面Ｍがない場合には、ステップＳ２１５の処理に移行する。
【００５６】
プロセッサ１０は、交点位置Ｚを求めると、交差位置Ｚが対象ポリゴン面Ｍｔの面内にあるか否かを判定する面内外判定処理を実行する（ステップＳ２１０）。プロセッサ１０は、交差位置Ｚが対象ポリゴン面Ｍｔの面内にあると判定された場合には、当該対象ポリゴン面Ｍｔが対象格子点Ｐｔから垂線が引けるポリゴン面、すなわち直交面であると判定する。一方、プロセッサ１０は交差位置Ｚが対象ポリゴン面Ｍｔの面内にないと判定された場合には、ステップＳ２０９の処理に移行する。
【００５７】
プロセッサ１０は、交差位置Ｚが対象ポリゴン面Ｍｔの面内にあると判定された場合には、対象ポリゴン面Ｍｔの重心位置Ｇから対象格子点Ｐｔへの距離ベクトルＶｄを求め、その距離ベクトルＶｄと当該対象ポリゴン面Ｍｔの法線ベクトルＶｎとのなす角αを算出する（ステップＳ２１１）。そして、プロセッサ１０は、なす角αが９０度未満か否かを判定し（ステップＳ２１２）、なす角αが９０度未満であれば対象格子点Ｐｔが物体の外側にあると判定する（ステップＳ２１３）。一方、内外判定部２８は、なす角αが９０度以上であれば、対象格子点Ｐｔが物体の内側にあると判定する（ステップＳ２１４）。
【００５８】
プロセッサ１０は、対象格子点Ｐｔの内外判定が終了すると、全ての計算格子点に対して物体の内側か外側かの処理が終了したか否かを判定する（ステップＳ２１５）。プロセッサ１０は、全ての計算格子点に対して物体の内側か外側かの処理が終了したと判定した場合には、図５に示す処理を終了する（ステップＳ２１５）。一方、プロセッサ１０は、全ての計算格子点に対して物体の内側か外側かの処理が終了していないと判定した場合には、ステップＳ２０３の処理に移行する。
【００５９】
次に、本実施形態に係る内外判定処理の効果について、図６を用いて説明する。図６（ａ）は、ポリゴン面Ｍ１に穴がある場合における従来の内外判定処理であるCrossing Number Algorithmを説明する図である。図６（ｂ）は、ポリゴン面Ｍ１に穴がある場合における本実施形態に係る内外判定処理を説明する図である。
【００６０】
図６（ａ）に示すように、Crossing Number Algorithmは、ある点からの直線とポリゴン面との交差する数で内外判定を行う。したがって、ポリゴン面の一部に穴が開いていると、図６（ａ）に示す領域Ｈ全体が物体の内側と判定されてしまう。
一方、図６（ｂ）に示すように、本実施形態に係る内外判定処理では、ポリゴン面の一部に穴が開いている場合には、局所的に計算格子点Ｐ１のみ内側と判定されるだけであって、従来のように領域Ｈ全体が物体の内側と判定されることがない。したがって、本実施形態に係る内外判定処理は、内外判定の判定精度を従来よりも向上させることができる。
【００６１】
なお、本発明は上記実施形態に限定されるものではなく、例えば以下のような変形例が考えられる。
【００６２】
（変形例１）上記実施形態において、プロセッサ１０は、すべての計算格子点Ｍについて、内外判定処理を実行したが、これに限定されない。例えば、プロセッサ１０（例えば、特定部２６）は、対象格子点Ｐｔと交差位置Ｚとの間の距離が所定値以上である場合には、当該対象格子点Ｐｔの内外判定処理を停止してもよい。この場合には、プロセッサ１０は、他の計算格子点を対象格子点Ｐｔに選定して、その対象格子点Ｐｔに対して内外判定処理を実行する。一例として、例えば、図７に示すように、ステップＳ２０８において、特定部２６（例えば、交差有無判定部３１）は、交差判定処理を実行して、交点位置Ｚを求めた場合には、対象格子点Ｐｔと交差位置Ｚとの距離が所定値以上か否かを判定する（ステップＳ３０１）。そして、プロセッサ１０は、対象格子点Ｐｔと交差位置Ｚとの距離が所定値以上である場合には、ステップＳ２１５に移行し、当該距離が所定値未満である場合にはステップＳ２１０に移行する。
【００６３】
対象格子点Ｐｔと交差位置Ｚとの間の距離が所定値以上である場合とは、当該対象格子点が物体から遠い位置であることを示す。ここで、ＣＦＤ解析処理では、どこに物体の壁があるのかという情報のみが重要であって、物体から遠い位置にある計算格子点の情報はそもそもＣＦＤ解析処理を行うにあたって不必要な場合がある。そこで、プロセッサ１０は、対象格子点Ｐｔと交差位置Ｚとの間の距離が所定値以上である場合には、当該対象格子点が内側か外側かを判定する処理を行わなくてもよい。これにより、情報処理装置１は、処理負荷を低減することができる。
【００６４】
（変形例２）上記実施形態において、プロセッサ１０は、対象格子点Ｐｔが物体の外側か内側かを判定した場合には、すべてのポリゴン面Ｍを対象ポリゴン面Ｍｔとして選択していなくても、次の計算格子点に対して内外判定処理を実施したが、これに限定されない。例えば、プロセッサ１０は、一つの対象格子点Ｐｔにおいて、直交面が２つ以上ある場合には、各直交面に対してなす角αを求め、各なす角αがそれぞれ９０度未満か否かを判定してもよい。
【００６５】
（変形例３）上記実施形態において、特定部２６は、複数のポリゴン面Ｍ１〜Ｍｍのうち、対象格子点Ｐｔから垂線が引けるポリゴン面である直交面を特定できればよく、その特定方法には特に限定されない。
【００６６】
以上、説明したように、本実施形態に係る情報処理装置１は、対象格子点Ｐｔから垂線が引けるポリゴン面Ｍの重心位置Ｇから対象格子点Ｐｔへの距離ベクトルＶｄと、当該ポリゴン面Ｍの法線ベクトルＶｎとのなす角αを算出する。そして、情報処理装置１は、なす角αが９０度以上であれば、対象格子点Ｐｔが多面体、すなわち物体の内側にあると判定する。
【００６７】
このような構成によれば、情報処理装置１は、ＳＴＬフォーマットで表現された表面形状データに対して、穴を埋める作業を実施することなく、内外判定の判定精度を従来よりも向上させることができる。
【００６８】
ところで、内外判定処理を実施する上で、処理負荷を低減させるために、三次元空間を複数の領域に分割してそれぞれの領域で並列に内外判定処理を実行する場合がある。この内外判定処理の並列化を実現する場合において、内外判定処理として従来のCrossing Number Algorithmを用いると、各領域間でポリゴン面と交差する直線の位置や交差数の整合性をとる必要があり、上記並列化を実現するにあたって制約がある。
一方、本実施形態に係る情報処理装置１は、距離ベクトルＶｄと法線ベクトルＶｎとのなす角αに基づいて内外判定処理を実施するため、上記整合性を考慮する必要がなく、上記並列化を実現する上で制約がない。
【符号の説明】
【００６９】
１  情報処理装置
１０  プロセッサ
１２  記憶装置
２０  データ読込部
２１  モデル生成部
２２  第１選択部
２３  第２選択部
２４  重心位置決定部
２５  ベクトル算出部
２６  特定部
２７  角度算出部
２８  内外判定部（第１判定部）
３１  交差有無判定部（第３判定部）
３２  面内外判定部（第２判定部）
【図１】
2020205005.tif 000003
【図２】
2020205005.tif 000004
【図３】
2020205005.tif 000005
【図４】
2020205005.tif 000006
【図５】
2020205005.tif 000007
【図６】
2020205005.tif 000008
【図７】
2020205005.tif 000009