(57)【要約】【課題】ベクトルを示す複数のオブジェクトを表示する場合の視認性を向上させる。【解決手段】記憶部１１は、モデル上の位置１４ａ〜１４ｄそれぞれにおけるベクトルを示すベクトルデータ１３を記憶する。表示制御部１２は、モデル上に、螺旋状に並ぶ点１６ａ〜１６ｅを算出する。表示制御部１２は、ベクトルデータ１３が示すベクトルに対応するオブジェクト１５ａ〜１５ｄを表示させる場合に、算出した点１６ａ〜１６ｅに基づいて、オブジェクト１５ａ〜１５ｄのうちの少なくとも一部の表示位置を、ベクトルデータ１３が示す位置１４ａ〜１４ｄから変更する。【選択図】図１
2016126557.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
モデル上の複数の位置それぞれにおけるベクトルを示すベクトルデータを取得し、
前記モデル上に、螺旋状に並ぶ複数の点を算出し、
前記ベクトルデータが示す複数のベクトルに対応する複数のオブジェクトを表示させる場合に、算出した前記複数の点に基づいて、前記複数のオブジェクトのうちの少なくとも一部の表示位置を、前記ベクトルデータが示す位置から変更する、
処理を実行させるシミュレーションプログラム。
【請求項２】
前記変更では、前記複数のオブジェクトそれぞれの表示位置を、前記複数の点の中から選択する、請求項１記載のシミュレーションプログラム。
【請求項３】
前記変更では、前記複数のオブジェクトそれぞれの表示位置を、前記複数の点に沿って螺旋の中心から放射状にのびる複数の曲線のうちの何れかの曲線上に移動させる、請求項１記載のシミュレーションプログラム。
【請求項４】
前記複数の点は、隣接する２つの点が所定の角度だけ離れるように算出する、請求項１乃至３の何れか一項に記載のシミュレーションプログラム。
【請求項５】
モデル上の複数の位置それぞれにおけるベクトルを示すベクトルデータを記憶する記憶部と、
前記モデル上に螺旋状に並ぶ複数の点を算出し、前記ベクトルデータが示す複数のベクトルに対応する複数のオブジェクトを表示させる場合に、算出した前記複数の点に基づいて、前記複数のオブジェクトのうちの少なくとも一部の表示位置を前記ベクトルデータが示す位置から変更する表示制御部と、
を有するシミュレーション装置。
【請求項６】
コンピュータが実行するベクトル表示方法であって、
モデル上の複数の位置それぞれにおけるベクトルを示すベクトルデータを取得し、
前記モデル上に、螺旋状に並ぶ複数の点を算出し、
前記ベクトルデータが示す複数のベクトルに対応する複数のオブジェクトを表示させる場合に、算出した前記複数の点に基づいて、前記複数のオブジェクトのうちの少なくとも一部の表示位置を、前記ベクトルデータが示す位置から変更する、
ベクトル表示方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシミュレーションプログラム、シミュレーション装置およびベクトル表示方法に関する。
【背景技術】
【０００２】
コンピュータの演算能力の向上に伴い、様々な物理現象に対してコンピュータを利用したシミュレーションが行われるようになっている。例えば、ある物体の表面における応力や磁力の分布を、コンピュータを利用してシミュレートすることが考えられる。シミュレーション結果は、モデル上の複数の位置について応力や磁力などの物理量を示すベクトルを記録したベクトルデータとして得られることがある。
【０００３】
ユーザがシミュレーション結果を確認する場合、数値としてのベクトルデータを読むよりも、ベクトルデータを可視化した画像を見たいことがある。ベクトルデータを可視化する方法としては、ベクトルに対応するオブジェクトをモデル空間上に配置し、ある観測点からオブジェクトを見たときの画像を表示装置に表示する方法が考えられる。オブジェクトとしては、例えば、ベクトルに応じた向きや大きさをもつ矢線を用いることができる。
【０００４】
なお、複数の平面図形を表示装置に表示する場合に、図形間の重なりを解消する魚眼拡大表示方法が提案されている。この魚眼拡大表示方法では、図形が密に配置されているエリアを示す直線を検出し、直線と各図形との距離（第１の距離）および直線と画面端との距離（第２の距離）を算出する。そして、第１の距離と第２の距離と媒介変数に基づいて、各図形を直線から離れるように画面端に向かって移動させる。
【０００５】
また、複数の立体図形を配置したモデル空間上で観測される画像を表示装置に表示する場合に、画像上での図形間の重なりを解消する三次元魚眼拡大表示方法が提案されている。この三次元魚眼拡大表示方法では、モデル空間上に直線を指定し、直線および観測点を含む平面と各図形との距離（第１の距離）および上記平面とモデル空間端との距離（第２の距離）を算出する。そして、第１の距離と第２の距離に基づいて、各図形を上記平面から離れるようにモデル空間端に向かって移動させる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−２４０９６１号公報
【特許文献２】特開平１１−１５４２４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
シミュレーション結果としてのベクトルデータを複数のオブジェクトを用いて可視化する場合、画像上においてオブジェクト同士が重なってしまうことがある。例えば、三次元のモデル空間上で、ベクトルデータが示す位置にベクトルに対応するオブジェクトを配置し、ある観測点からそれらオブジェクトを観測したとする。この場合、観測点と観測点に近い一のオブジェクトとを結ぶ線分の延長線上に他のオブジェクトが配置されていると、画像上では当該一のオブジェクトによって当該他のオブジェクトの少なくとも一部が隠されてしまう。その結果、観測点から遠い位置のベクトルの向きや大きさが確認しづらくなり、ベクトルデータを可視化した画像の視認性が低下するという問題がある。
【０００８】
１つの側面では、本発明は、ベクトルを示す複数のオブジェクトを表示する場合の視認性を向上させるシミュレーションプログラム、シミュレーション装置およびベクトル表示方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、コンピュータに以下の処理を実行させるシミュレーションプログラムが提供される。モデル上の複数の位置それぞれにおけるベクトルを示すベクトルデータを取得する。モデル上に、螺旋状に並ぶ複数の点を算出する。ベクトルデータが示す複数のベクトルに対応する複数のオブジェクトを表示させる場合に、算出した複数の点に基づいて、複数のオブジェクトのうちの少なくとも一部の表示位置を、ベクトルデータが示す位置から変更する。
【００１０】
また、１つの態様では、記憶部と表示制御部とを有するシミュレーション装置が提供される。また、１つの態様では、コンピュータが実行するベクトル表示方法が提供される。
【発明の効果】
【００１１】
１つの側面では、ベクトルを示す複数のオブジェクトを表示する場合の視認性が向上する。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態のシミュレーション装置を示す図である。
【図２】シミュレーション装置のハードウェア例を示すブロック図である。
【図３】可視化時のオブジェクトの移動例を示す図である。
【図４】フィボナッチ螺旋とフィボナッチ点の例を示す図である。
【図５】再配置したオブジェクトの表示例を示す図である。
【図６】シミュレーション装置の機能例を示すブロック図である。
【図７】ベクトルテーブルの例を示す図である。
【図８】フィボナッチ点テーブルの例を示す図である。
【図９】位置調整の手順例を示すフローチャートである。
【図１０】オブジェクト移動の手順例を示すフローチャートである。
【図１１】フィボナッチ点を結ぶ曲線の例を示す図である。
【図１２】オブジェクト移動の他の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のシミュレーション装置を示す図である。
【００１４】
第１の実施の形態のシミュレーション装置１０は、科学技術シミュレーションなどの各種のシミュレーションを行う。例えば、シミュレーション装置１０は、物体の構造を示すモデルを取得し、物体の表面または内部における応力や磁力などの物理量の分布をシミュレートする。算出された応力や磁力などの物理量は、ベクトルとして表現される。三次元のモデルを使用した場合、物理量は三次元ベクトルとして表現され得る。そして、シミュレーション装置１０は、シミュレーション結果を可視化する。例えば、シミュレーション装置１０は、シミュレーション結果を示す画像を生成し、シミュレーション装置１０に接続された表示装置（図示せず）に画像を表示させる。
【００１５】
シミュレーション装置１０は、記憶部１１および表示制御部１２を有する。記憶部１１は、シミュレーション結果を示すベクトルデータ１３を記憶する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性メモリでもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性の記憶装置でもよい。表示制御部１２は、記憶部１１に記憶されたベクトルデータ１３を可視化する。表示制御部１２は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサでもよい。また、表示制御部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。なお、プロセッサは、ＲＡＭなどのメモリに記憶されたプログラムを実行する。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼ぶこともある。
【００１６】
ここで、ベクトルデータ１３には、モデル上の複数の位置と算出された複数のベクトルとが対応付けて記録されている。ベクトルデータ１３は、複数の位置それぞれにおける物理量をベクトルとして表す。各位置は、例えば、三次元座標を用いて表現できる。各ベクトルは、例えば、Ｘ成分の浮動小数点数と、Ｙ成分の浮動小数点数と、Ｚ成分の浮動小数点数の組として表現できる。ベクトルによって、応力や磁力などの物理量の向きと大きさを表すことができる。一例として、モデルから、離散的な位置１４ａ，１４ｂ，１４ｃ，１４ｄがサンプリングされる。この場合、ベクトルデータ１３は、位置１４ａに対応するベクトルｖ１と、位置１４ｂに対応するベクトルｖ２と、位置１４ｃに対応するベクトルｖ３と、位置１４ｄに対応するベクトルｖ４とを含む。
【００１７】
表示制御部１２は、記憶部１１からベクトルデータ１３を取得する。また、表示制御部１２は、螺旋状に並ぶ複数の点をモデル上に算出する。螺旋１６の中心は、可視化するモデル領域の中心とするなど、任意の方法で決定すればよい。一例として、表示制御部１２は、螺旋１６を形成する点１６ａ，１６ｂ，１６ｃ，１６ｄ，１６ｅを算出する。点１６ａは位置１４ａに近く、点１６ｂは位置１４ｃに近く、点１６ｃは位置１４ｂに近く、点１６ｅは位置１４ｄに近い。螺旋１６を形成する複数の点は、好ましくは、隣接する２つの点が黄金角だけ離れるように算出する。黄金比をＲgとすると、黄金角は３６０°÷（１＋Ｒg）＝約１３７．５０８°である。このような性質をもつ点は「フィボナッチ点」と言うことができ、その場合の螺旋１６は「フィボナッチ螺旋」と言うことができる。
【００１８】
黄金角ずつ離れたフィボナッチ点にオブジェクトを配置したモデルは、任意の観測点からそれらオブジェクトを見たときにオブジェクト同士が重なって見える確率が小さくなるという性質をもつ。黄金角を利用したオブジェクトの配置は、植物の葉の配置など自然界にも見られる現象である。そこで、表示制御部１２は、フィボナッチ螺旋およびフィボナッチ点の性質を利用して、ベクトルデータ１３を可視化するようにしてもよい。ただし、表示制御部１２は、厳密に黄金角ずつ離れた複数の点を算出する代わりに、黄金角に近似する角度（例えば、１３５°〜１４０°程度）ずつ離れた複数の点を算出してもよい。また、表示制御部１２は、所定の角度ずつ離れた複数の点を算出してもよい。
【００１９】
そして、表示制御部１２は、ベクトルデータ１３を可視化する。可視化において、表示制御部１２は、ベクトルデータ１３が示す複数のベクトルに対応する複数のオブジェクトをモデル上に配置する。オブジェクトは、ベクトルの向きと大きさに応じた形状を有する。例えば、オブジェクトとして、向きや長さが可変な矢線を用いることが考えられる。オブジェクトの表示位置の初期値は、ベクトルデータ１３が示す位置とする。
【００２０】
一例として、ベクトルｖ１に対応するオブジェクト１５ａが、モデル上の位置１４ａに配置される。ベクトルｖ２に対応するオブジェクト１５ｂが、モデル上の位置１４ｂに配置される。ベクトルｖ３に対応するオブジェクト１５ｃが、モデル上の位置１４ｃに配置される。ベクトルｖ４に対応するオブジェクト１５ｄが、モデル上の位置１４ｄに配置される。表示制御部１２は、例えば、オブジェクトを配置した平面の上に観測点を設定し、オブジェクトの集合を斜め上から観測することで画像を生成する。表示制御部１２は、例えば、生成した画像を表示装置に表示させる。
【００２１】
ただし、ベクトルデータ１３に従ってオブジェクトの表示位置を決定すると、オブジェクトの増加に伴い、画像上でオブジェクト同士が重なって見える可能性が高くなる。そこで、表示制御部１２は、画像上でのオブジェクト同士の重なりが抑制されるように、上記の螺旋１６を形成する複数の点を基準にして、少なくとも一部のオブジェクトの表示位置を変更する。表示位置の変更は、画像を一度生成した後に行ってもよいし、画像を生成する前に行ってもよい。また、表示位置の変更は、全体のオブジェクト数または単位面積当たりのオブジェクト数が閾値を超える場合のみ行ってもよい。
【００２２】
例えば、表示制御部１２は、各オブジェクトの表示位置を、螺旋１６を形成する複数の点の中から選択するようにする。選択する点は、ベクトルデータ１３が示す位置から最も近い点としてもよい。一例として、位置１４ａが点１６ａに近い場合、オブジェクト１５ａを位置１４ａから点１６ａに移動する。位置１４ｂが点１６ｃに近い場合、オブジェクト１５ｂを位置１４ｂから点１６ｃに移動する。位置１４ｃが点１６ｂに近い場合、オブジェクト１５ｃを位置１４ｃから点１６ｂに移動する。位置１４ｄが点１６ｅに近い場合、オブジェクト１５ｄを位置１４ｄから点１６ｅに移動する。
【００２３】
第１の実施の形態のシミュレーション装置１０によれば、ベクトルデータ１３を可視化する場合に、螺旋１６を形成する複数の点が算出される。そして、ベクトルデータ１３が示す複数のベクトルに対応する複数のオブジェクトの表示位置が、螺旋１６を形成する点を基準にして、ベクトルデータ１３が示す本来の位置から変更される。これにより、画像上でオブジェクト同士が重なって見える可能性を低減できる。よって、ベクトルの向きや大きさを理解することが容易となり、可視化した画像の視認性が向上する。特に、螺旋１６を形成する複数の点を、隣接する点が黄金角またはこれと近似する角度ずつ離れるように算出することで、フィボナッチ螺旋の性質を利用することができる。これにより、オブジェクト同士が重なって見える可能性を更に低減することができる。
【００２４】
［第２の実施の形態］
第２の実施の形態のシミュレーション装置１００は、ユーザから入力された三次元モデルを用いて科学技術シミュレーションを行い、応力や磁力などの物理量の分布を算出する。シミュレーション結果は、モデル上の複数の位置それぞれにおける物理量を示す三次元ベクトルを含む。そして、シミュレーション装置１００は、シミュレーション結果を可視化する。シミュレーション装置１００は、ユーザが操作するクライアントコンピュータでもよいし、ネットワーク経由でアクセスされるサーバコンピュータでもよい。
【００２５】
図２は、シミュレーション装置のハードウェア例を示すブロック図である。
シミュレーション装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。上記のユニットは、それぞれバス１０８に接続されている。
【００２６】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、シミュレーション装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００２７】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、シミュレーション装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００２８】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、シミュレーションプログラムが含まれる。なお、シミュレーション装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００２９】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、シミュレーション装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００３０】
入力信号処理部１０５は、シミュレーション装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、シミュレーション装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００３１】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３２】
通信インタフェース１０７は、ネットワーク１１４に接続され、他のコンピュータと通信を行う。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局またはアクセスポイントと無線リンクで接続される無線通信インタフェースでもよい。
【００３３】
ただし、シミュレーション装置１００は、媒体リーダ１０６を備えなくてもよく、ネットワーク１１４を介してアクセスされるサーバコンピュータである場合は画像信号処理部１０４や入力信号処理部１０５を備えなくてもよい。また、ディスプレイ１１１や入力デバイス１１２が、シミュレーション装置１００の筐体と一体に形成されてもよい。なお、ＣＰＵ１０１は、第１の実施の形態の表示制御部１２の一例である。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１の一例である。
【００３４】
次に、シミュレーション結果としてのベクトルデータを可視化する場合の問題点と、フィボナッチ螺旋を利用した可視化方法について説明する。
図３は、可視化時のオブジェクトの移動例を示す図である。
【００３５】
シミュレーション装置１００は、モデル上の離散的な複数の位置それぞれに対して、物理量を示すベクトルを算出する。このシミュレーション結果を可視化する場合、シミュレーション装置１００は、複数のベクトルに対応する複数のオブジェクトをモデル上に配置する。第２の実施の形態では、オブジェクトとして、ベクトルの向きや大きさに応じた矢線を用いる。各オブジェクトは、初期状態では、当該オブジェクトに対応するベクトルが算出された本来の位置に配置される。また、シミュレーション装置１００は、モデル上にカメラを配置する。カメラの方向は、ユーザが指定できるようにしてもよい。
【００３６】
第２の実施の形態では、主に、ｚ＝ｚ0（所定値）のＸＹ平面上に複数のオブジェクトを配置し、これらオブジェクトの集合を斜め上から見下ろす位置（Ｚ座標がｚ0よりも大きい位置）にカメラを配置する場合を考える。このＸＹ平面は、例えば、物体の表面に相当する。その場合、配置するオブジェクトは、物体表面のベクトルの分布を表す。また、このＸＹ平面は、例えば、物体のある断面に相当する。その場合、配置するオブジェクトは、物体内部のベクトルの分布を表す。シミュレーション装置１００は、カメラから観測できる画像を生成し、生成した画像をディスプレイ１１１に表示する。これにより、ユーザは、物理量の分布を把握することが容易となると期待される。
【００３７】
ただし、ベクトルが格子状に一定間隔でサンプリングされている場合、画像の中心付近では、カメラに近いオブジェクトとカメラから遠いオブジェクトとが重なって見えることがある。また、上記のように画像を生成すると、カメラから遠いオブジェクトが遠近法によって画像の中心付近に集まるように投影されることになり、カメラに近いオブジェクトとカメラから遠いオブジェクトとが重なって見える可能性が高くなる。
【００３８】
一例として、画像２０には、矢線としてのオブジェクト２１〜２３が投影されている。オブジェクト２１〜２３のうち、オブジェクト２３が最もカメラに近く、オブジェクト２３の１つ後ろにオブジェクト２２が配置され、オブジェクト２２の１つ後ろにオブジェクト２１が配置されている。初期状態の配置では、オブジェクト２１〜２３としての３つの矢線が画像２０上で一直線に重なって見える。このため、ユーザは画像２０を見ても、３つの矢線によって表された３つのベクトルを個々に把握することが容易でない。
【００３９】
そこで、シミュレーション装置１００は、最初に生成した画像の中に単位面積当たりのオブジェクト数（オブジェクトの密度）が高い領域が存在する場合、少なくとも一部のオブジェクトの配置を変更する。そして、シミュレーション装置１００は、変更した配置に基づいて画像を再生成し、再生成した画像をディスプレイ１１１に表示する。
【００４０】
一例として、画像２０ａには、画像２０と同様に矢線としてのオブジェクト２１〜２３が投影されている。画像２０ａは、一部のオブジェクトの配置を画像２０から変更したものである。オブジェクト２２は、カメラから見て右方向に移動している。オブジェクト２１は、カメラから見て左方向に移動している。変更後の配置では、オブジェクト２２は、その手前に配置されたオブジェクト２３と重なっておらず、オブジェクト２１は、その手前に配置されたオブジェクト２２，２３の何れとも重なっていない。このため、ユーザはオブジェクト２１，２２，２３としての３つの矢線を明確に視認することができ、３つの矢線によって表された３つのベクトルを個々に把握することが容易となる。
【００４１】
なお、ベクトルはモデル上の位置と紐付けされた値であるため、オブジェクトの移動量は小さい方が好ましい。シミュレーション装置１００は、オブジェクト間の重なりを効率的に抑制するため、フィボナッチ螺旋を利用することとする。
【００４２】
図４は、フィボナッチ螺旋とフィボナッチ点の例を示す図である。
シミュレーション装置１００は、ベクトルデータを可視化した画像上にオブジェクトの密度が高い領域がある場合、各オブジェクトを当該オブジェクトに最も近いフィボナッチ点に移動して画像を再生成する。フィボナッチ点は、フィボナッチ螺旋３０を形成する点である。フィボナッチ螺旋３０は、黄金角φ＝約１３７．５０８°だけ回転する毎に中心からの距離が増加する螺旋である。フィボナッチ螺旋３０上の一のフィボナッチ点（例えば、フィボナッチ点３１）とその次のフィボナッチ点（例えば、フィボナッチ点３２）との間は、中心角が黄金角φ＝約１３７．５０８°だけ開いている。
【００４３】
ここで、式（１）に示すように、黄金比Ｒgは、フィボナッチ数列の第ｎ項（Ａn）と第ｎ−１項（Ａn-1）との比の極限として算出できる。また、黄金比Ｒgは、ｘ2−ｘ−１＝０の正の解としても算出できる。黄金角φは、３６０°を１：Ｒgに分割したときの小さい方の角度である。自然界において植物の葉は、茎の周りを黄金角φずつ回転しながら生えていることがある。これは、黄金角φずつ葉の位置をずらすと、上から見たときに下の葉が上の葉によって隠される可能性が低減し、できる限り多くの葉が太陽光を受光できるようになるためである。そこで、シミュレーション装置１００は、このようなフィボナッチ螺旋３０の性質を利用する。すなわち、シミュレーション装置１００は、任意の方向からオブジェクトの集合を観測しても、オブジェクト同士の重なりが少なくなるように、オブジェクトをフィボナッチ点に移動することとする。
【００４４】
【数１】
2016126557.tif 000003
【００４５】
フィボナッチ螺旋３０の中心は、例えば、描画したいモデル領域の中心に設定する。シミュレーション装置１００は、設定した中心を基準にして、式（２）に従って複数のフィボナッチ点（例えば、百個から数百個程度のフィボナッチ点）を算出する。式（２）において、ｋは自然数であり、フィボナッチ螺旋３０の中心に近い順に付与したフィボナッチ点の識別番号である。ｋ＝１のフィボナッチ点は、中心に最も近い点である。ｋ＝２のフィボナッチ点は、中心から２番目に近い点であり、ｋ＝１のフィボナッチ点から黄金角φ＝約１３７．５０８°だけ回転した点である。
【００４６】
なお、第２の実施の形態では、フィボナッチ点の座標のＺ成分はｚ0に固定している。すなわち、シミュレーション装置１００は、ｚ＝ｚ0のＸＹ平面上に複数のフィボナッチ点を配置している。また、式（２）によって算出される三次元座標は、フィボナッチ螺旋３０の中心からの相対座標である。よって、モデル空間上の絶対座標は、式（２）の相対座標にフィボナッチ螺旋３０の中心の座標を加えることで算出できる。
【００４７】
【数２】
2016126557.tif 000004
【００４８】
図５は、再配置したオブジェクトの表示例を示す図である。
画像４０は、１５０個のベクトルを含むベクトルデータを可視化したものである。画像４０は、ディスプレイ１１１に表示される。シミュレーション装置１００は、フィボナッチ螺旋を形成する１５０個以上のフィボナッチ点を算出し、１５０個のオブジェクトそれぞれを本来の位置から最も近いフィボナッチ点に移動している。図５に示すように、フィボナッチ螺旋を利用することで、多数のオブジェクトが密集していても、オブジェクト同士の重なりを最小限に抑えることができる。これにより、カメラから遠いオブジェクトについても向きや長さを把握でき、ベクトルの分布の理解が容易となる。
【００４９】
次に、シミュレーション装置１００の可視化機能について説明する。
図６は、シミュレーション装置の機能例を示すブロック図である。
シミュレーション装置１００は、シミュレーション実行部１２１、データ記憶部１２２、表示制御部１２３および位置情報記憶部１２４を有する。シミュレーション実行部１２１および表示制御部１２３は、例えば、ＣＰＵ１０１が実行するプログラムのモジュールとして実現できる。データ記憶部１２２および位置情報記憶部１２４は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現できる。
【００５０】
シミュレーション実行部１２１は、解析したい物体の形状などを示すモデルをユーザから取得する。すると、シミュレーション実行部１２１は、取得したモデルに対して科学技術シミュレーションを行う。例えば、シミュレーション実行部１２１は、物体の表面や内部について、応力や磁力などの物理量の分布を算出する。
【００５１】
データ記憶部１２２は、シミュレーション実行部１２１が出力するシミュレーション結果を記憶する。シミュレーション結果は、モデル上の複数の位置と物理量としての複数のベクトルとを対応付けたベクトルデータである。なお、シミュレーション実行部１２１が出力するベクトルデータは、離散的な複数の位置それぞれのベクトルを示す形式であってもよいし、面上または空間上の連続的なベクトルの分布を示す形式であってもよい。後者の場合、後述するようにベクトルデータを可視化するときに、ベクトルデータから離散的な複数の位置のベクトルを抽出（サンプリング）すればよい。
【００５２】
表示制御部１２３は、データ記憶部１２２に記憶されたベクトルデータを可視化する。表示制御部１２３は、ベクトルデータが示す複数のベクトルに対応する複数のオブジェクトを生成する。オブジェクトは、例えば、ベクトルの向きや大きさに応じて形状の異なる矢線である。表示制御部１２３は、複数のオブジェクトを、まずベクトルデータが示す本来の位置に配置し、ある観測点からそれらオブジェクトを見たときの画像を生成する。カメラを配置する観測点は、ユーザから指定されてもよい。
【００５３】
画像にオブジェクトの密度が大きい領域がない場合、表示制御部１２３は、生成した画像をディスプレイ１１１に表示させる。一方、画像にオブジェクトの密度が大きい領域がある場合、表示制御部１２３は、オブジェクトの配置を変更して画像を再生成する。このとき、表示制御部１２３は、前述のようにフィボナッチ螺旋を形成する複数のフィボナッチ点を算出し、フィボナッチ点を基準にしてオブジェクトを移動させる。表示制御部１２３は、生成した画像をディスプレイ１１１に表示させる。
【００５４】
位置情報記憶部１２４は、表示制御部１２３が算出したフィボナッチ点の座標を記憶する。位置情報記憶部１２４に記憶された情報は、表示制御部１２３がベクトルデータを可視化するにあたって、適宜参照される。
【００５５】
図７は、ベクトルテーブルの例を示す図である。
ベクトルテーブル１３１には、シミュレーション結果としてのベクトルデータが登録される。ベクトルテーブル１３１は、データ記憶部１２２に記憶されている。ベクトルテーブル１３１は、ベクトルＩＤ、座標およびベクトルの項目を有する。
【００５６】
ベクトルＩＤは、ベクトルを識別する自然数の識別番号である。ベクトルＩＤは、可視化時に、ベクトルに対応するオブジェクトを識別するオブジェクトＩＤとしても用いることができる。座標の項目には、モデル上のベクトルの位置を示す三次元座標（Ｘ座標・Ｙ座標・Ｚ座標の組）が登録される。ベクトルの項目には、応力や磁力などの物理量を示す三次元ベクトル（Ｘ成分・Ｙ成分・Ｚ成分の組）が登録される。
【００５７】
図８は、フィボナッチ点テーブルの例を示す図である。
フィボナッチ点テーブル１３２には、可視化時に算出されたフィボナッチ点の情報が登録される。フィボナッチ点テーブル１３２は、位置情報記憶部１２４に記憶されている。フィボナッチ点テーブル１３２は、フィボナッチ点ＩＤおよび座標の項目を有する。
【００５８】
フィボナッチ点ＩＤは、表示制御部１２３によって算出されたフィボナッチ点を識別する自然数の識別番号である。フィボナッチ点ＩＤは、フィボナッチ螺旋の中心に近い方のフィボナッチ点から順に付与される。座標の項目には、モデル上のフィボナッチ点の位置を示す三次元座標（Ｘ座標・Ｙ座標・Ｚ座標の組）が登録される。
【００５９】
図９は、位置調整の手順例を示すフローチャートである。
（Ｓ１０）表示制御部１２３は、データ記憶部１２２からベクトルデータを読み出す。表示制御部１２３は、モデル上において、ベクトルデータに含まれる複数のベクトルに対応する複数のオブジェクト（例えば、ベクトルの向きや大きさに応じた形状の矢線）を生成し、ベクトルデータに含まれる座標が示す位置に配置する。また、表示制御部１２３は、モデル上にカメラを配置する。カメラ位置は、ユーザによって指定されてもよいし、所定の規則に従って表示制御部１２３が算出してもよい。そして、表示制御部１２３は、カメラからオブジェクトの集合を見たときの画像（位置調整前の画像）を生成する。
【００６０】
（Ｓ１１）表示制御部１２３は、オブジェクトＩＤ（＝ベクトルＩＤ）を示す変数ｉを定義する。そして、表示制御部１２３は、ｉ＝０に初期化する。
（Ｓ１２）表示制御部１２３は、変数ｉの値をインクリメント（１だけ加算）する。
【００６１】
（Ｓ１３）表示制御部１２３は、ステップＳ１０で生成した画像の中から、オブジェクトＩＤ＝ｉのオブジェクト（オブジェクトｉ）を選択する。表示制御部１２３は、画像上でオブジェクトｉの周囲ｄピクセルの領域を抽出し、抽出した領域の中に投影されている他のオブジェクトを検索する。ピクセル数ｄは、予め表示制御部１２３に設定されていてもよいし、ユーザから指定されてもよい。表示制御部１２３は、検索された他のオブジェクトをカウントし、他のオブジェクトの数を密度として保持する。
【００６２】
（Ｓ１４）表示制御部１２３は、変数ｉの値が、ステップＳ１０でモデル上に配置したオブジェクトの総数（すなわち、ベクトルデータに含まれるベクトルの総数）に達したか判断する。変数ｉの値がオブジェクト総数に達した場合はステップＳ１５に処理が進み、オブジェクト総数未満の場合はステップＳ１２に処理が進む。
【００６３】
（Ｓ１５）表示制御部１２３は、ステップＳ１０で生成した画像の中に、ステップＳ１３で算出した密度が閾値Ｔｄを超える領域があるか判断する。閾値Ｔｄは、予め表示制御部１２３に設定されていてもよいし、ユーザから指定されてもよいし、オブジェクト総数や画像の大きさなどに応じて表示制御部１２３が算出してもよい。密度が閾値Ｔｄを超える領域がある場合はステップＳ１６に処理が進み、ない場合は位置調整が終了する。
【００６４】
（Ｓ１６）表示制御部１２３は、前述の式（２）のパラメータｒ，ｚ0を設定する。パラメータｒ，ｚ0は、ユーザから指定されてもよい。また、パラメータｒは、オブジェクト総数などに応じて表示制御部１２３が算出してもよい。また、表示制御部１２３は、フィボナッチ点ＩＤを示す変数ｋを定義し、ｋ＝０に初期化する。
【００６５】
（Ｓ１７）表示制御部１２３は、変数ｋの値をインクリメントする。
（Ｓ１８）表示制御部１２３は、前述の式（２）を用いてｋ番目のフィボナッチ点を算出し、算出したフィボナッチ点の座標を位置情報記憶部１２４に記録する。
【００６６】
（Ｓ１９）表示制御部１２３は、変数ｋの値が、フィボナッチ点の総数を示す所定数Ｎに達したか判断する。所定数Ｎは、予め表示制御部１２３に設定されていてもよいし、ユーザから指定されてもよいし、オブジェクト総数などに応じて表示制御部１２３が算出してもよい。変数ｋの値が所定数Ｎに達した場合はステップＳ２０に処理が進み、所定数Ｎ未満である場合はステップＳ１７に処理が進む。
【００６７】
（Ｓ２０）表示制御部１２３は、ステップＳ１８で算出したフィボナッチ点に基づいて、ステップＳ１０で生成したオブジェクトの少なくとも一部を移動する。そして、表示制御部１２３は、ステップＳ１０で配置したカメラからオブジェクトの集合を見たときの画像（位置調整後の画像）を生成し、生成した画像をディスプレイ１１１に表示させる。オブジェクトの移動方法の詳細は後述する。
【００６８】
図１０は、オブジェクト移動の手順例を示すフローチャートである。
このフローチャートが示す処理は、上記のステップＳ２０で実行される。
（Ｓ３０）表示制御部１２３は、前述の変数ｉの値を０に初期化する。また、表示制御部１２３は、フィボナッチ点ＩＤ＝１，２，…，Ｎに対応するフラグＦ1，Ｆ2，…，ＦNを定義し、Ｆ1，Ｆ2，…，ＦNをそれぞれ０に初期化する。
【００６９】
（Ｓ３１）表示制御部１２３は、変数ｉの値をインクリメントする。また、表示制御部１２３は、前述の変数ｋの値を０に初期化する。
（Ｓ３２）表示制御部１２３は、変数ｋの値をインクリメントする。
【００７０】
（Ｓ３３）表示制御部１２３は、モデル上においてオブジェクトｉとフィボナッチ点ＩＤ＝ｋのフィボナッチ点（フィボナッチ点ｋ）との間の距離を算出する。
（Ｓ３４）表示制御部１２３は、変数ｋの値が、フィボナッチ点の総数を示す所定数Ｎに達したか判断する。変数ｋの値が所定数Ｎに達した場合はステップＳ３５に処理が進み、所定数Ｎ未満である場合はステップＳ３２に処理が進む。
【００７１】
（Ｓ３５）表示制御部１２３は、フィボナッチ点ＩＤ＝１，２，…，Ｎのフィボナッチ点の中から、ステップＳ３３で算出した距離が最小であるフィボナッチ点ｍを検索する。
（Ｓ３６）表示制御部１２３は、Ｆm＝０であるか判断する。Ｆm＝０は、フィボナッチ点ｍにオブジェクトがまだ配置されていないことを示す。Ｆm＝１は、フィボナッチ点ｍにオブジェクトが既に配置されていることを示す。Ｆm＝０である場合はステップＳ３７に処理が進み、Ｆm＝１である場合はステップＳ３９に処理が進む。
【００７２】
（Ｓ３７）表示制御部１２３は、オブジェクトｉをフィボナッチ点ｍに移動する。すなわち、オブジェクトｉの元の位置から最も近いフィボナッチ点ｍに他のオブジェクトが配置されていない場合には、オブジェクトｉをフィボナッチ点ｍに配置する。
【００７３】
（Ｓ３８）表示制御部１２３は、Ｆm＝１に変更する。そして、ステップＳ４０に処理が進む。
（Ｓ３９）表示制御部１２３は、オブジェクトｉを非表示に設定する。これにより、オブジェクトｉはモデル上に配置されなくなり、画像に投影されなくなる。すなわち、オブジェクトｉの元の位置から最も近いフィボナッチ点ｍに既に他のオブジェクトが配置されている場合には、オブジェクトｉをモデルから削除して表示しないこととする。
【００７４】
（Ｓ４０）表示制御部１２３は、変数ｉの値が、オブジェクトの総数に達したか判断する。変数ｉの値がオブジェクト総数に達した場合はオブジェクト移動が終了し、オブジェクト総数未満の場合はステップＳ３１に処理が進む。
【００７５】
次に、オブジェクト移動の変形例について説明する。上記では、各オブジェクトを何れかのフィボナッチ点に配置することとした。これに対し、フィボナッチ点を基準にしつつ、フィボナッチ点以外の位置にオブジェクトを配置できるようにすることも考えられる。
【００７６】
図１１は、フィボナッチ点を結ぶ曲線の例を示す図である。
前述の式（２）に従ってフィボナッチ点を算出すると、フィボナッチ螺旋の中心から放射状に２１本の曲線が形成される。放射状の曲線それぞれは、フィボナッチ点を２１個間隔で選択していく、すなわち、あるフィボナッチ点と２１個前または２１個先のフィボナッチ点とを順次線で結んでいくことで現れる曲線である。オブジェクト移動の変形例では、シミュレーション装置１００は、各オブジェクトを当該オブジェクトの本来の位置から最も近い曲線上に移動させる。この場合、移動先はフィボナッチ点でなくてもよい。
【００７７】
２１本の曲線は、次のように算出することができる。シミュレーション装置１００は、画像に投影したいオブジェクトが存在する領域の中で最もカメラから遠くにある列を選択し、その列の中心（カメラから見て左右方向の中心）をフィボナッチ螺旋の中心に設定する。シミュレーション装置１００は、その中心を基準にしてフィボナッチ点を算出する。
【００７８】
次に、シミュレーション装置１００は、カメラに最も近いフィボナッチ点を選択する。カメラに最も近いフィボナッチ点は、例えば、Ｎ＝１５０の場合はフィボナッチ点ＩＤ＝１４０前後の点になる可能性が高く、Ｎ＝３００の場合はフィボナッチ点ＩＤ＝１８５前後の点になる可能性が高い。シミュレーション装置１００は、選択したフィボナッチ点とその２１個前のフィボナッチ点（フィボナッチ点ＩＤが２１だけ小さいもの）とを線で結ぶ。シミュレーション装置１００は、フィボナッチ螺旋の中心に向かってこれを繰り返すことで、１つの曲線を算出することができる。シミュレーション装置１００は、算出済の曲線の右隣についても同様に曲線を算出していく。また、シミュレーション装置１００は、算出済の曲線の左隣についても同様に曲線を算出していく。これにより、フィボナッチ螺旋の中心から放射状にのびる２１本の曲線が算出される。
【００７９】
一例として、図１１において、シミュレーション装置１００は、カメラに最も近いフィボナッチ点５１を選択する。シミュレーション装置１００は、フィボナッチ点５１から開始して２１個前のフィボナッチ点を順に辿っていくことで、曲線６１を算出する。次に、シミュレーション装置１００は、曲線６１の右側の中で最もカメラに近いフィボナッチ点５２を選択する。シミュレーション装置１００は、フィボナッチ点５２から開始して２１個前のフィボナッチ点を順に辿っていくことで、曲線６２を算出する。次に、シミュレーション装置１００は、曲線６２の右側の中で最もカメラに近いフィボナッチ点５３を選択する。シミュレーション装置１００は、フィボナッチ点５３から開始して２１個前のフィボナッチ点を順に辿っていくことで、曲線６３を算出する。
【００８０】
右側に未選択のフィボナッチ点がなくなると、シミュレーション装置１００は、曲線６１の左側の中でカメラに最も近いフィボナッチ点５４を選択する。シミュレーション装置１００は、フィボナッチ点５４から開始して２１個前のフィボナッチ点を順に辿っていくことで、曲線６４を算出する。次に、シミュレーション装置１００は、曲線６４の右側の中で最もカメラに近いフィボナッチ点５５を選択する。シミュレーション装置１００は、フィボナッチ点５５から開始して２１個前のフィボナッチ点を順に辿っていくことで、曲線６５を算出する。このようにして、全ての曲線を算出することができる。
【００８１】
図１２は、オブジェクト移動の他の手順例を示すフローチャートである。
このフローチャートが示す処理は、上記のステップＳ２０で実行される。なお、前述の図１０の移動方法を用いる場合、フィボナッチ螺旋の中心は、オブジェクトが存在する領域の中心であることが好ましい。一方、図１２の移動方法を用いる場合、フィボナッチ螺旋の中心は、オブジェクトが存在する領域の中で最もカメラから遠い列に含まれる、カメラから見て左右方向の中心（上記の列とカメラの視線との交点）であることが好ましい。
【００８２】
（Ｓ５０）表示制御部１２３は、フィボナッチ点ＩＤ＝１，２，…，Ｎのフィボナッチ点のうち、カメラから最も近いフィボナッチ点ｋ（フィボナッチ点ＩＤ＝ｋの点）を選択する。
【００８３】
（Ｓ５１）表示制御部１２３は、ステップＳ５０またはステップＳ５４で選択したフィボナッチ点ｋの２１個前にフィボナッチ点が存在するか、すなわち、ｋ−２１＞０を満たすか判断する。２１個前のフィボナッチ点が存在する場合はステップＳ５２に処理が進み、２１個前のフィボナッチ点が存在しない場合はステップＳ５５に処理が進む。
【００８４】
（Ｓ５２）表示制御部１２３は、フィボナッチ点ｋとフィボナッチ点ｋ−２１とを結ぶ線分を算出する。当該線分は、近似的に直線であってもよい。そして、表示制御部１２３は、算出した線分から所定の範囲内にあるオブジェクトを検索する。表示制御部１２３は、範囲内にある全てのオブジェクトを検索してもよいし、線分から最も近い１つのオブジェクトのみ検索してもよい。ここでは、オブジェクトｉが検索されたとする。
【００８５】
（Ｓ５３）表示制御部１２３は、ステップＳ５２で検索したオブジェクトｉを、ステップＳ５２で算出した線分上に移動する。ステップＳ５２で２以上のオブジェクトが検索された場合には、それらオブジェクトを線分上の異なる位置に配置することが好ましい。
【００８６】
（Ｓ５４）表示制御部１２３は、変数ｋの値を２１だけ減少させる。すなわち、２１個前のフィボナッチ点を選択する。そして、ステップＳ５１に処理が進む。
（Ｓ５５）表示制御部１２３は、カメラから見て、直前に算出した曲線よりも右側に未選択のフィボナッチ点が存在するか判断する。右側に未選択のフィボナッチ点が存在する場合はステップＳ５６に処理が進み、存在しない場合はステップＳ５７に処理が進む。
【００８７】
（Ｓ５６）表示制御部１２３は、直前に算出した曲線よりも右側にある未選択のフィボナッチ点のうち、最もカメラに近いフィボナッチ点ｋを選択する。そして、ステップＳ５１に処理が進む。これにより、このフィボナッチ点ｋを基準に曲線が算出される。
【００８８】
（Ｓ５７）表示制御部１２３は、カメラから見て、直前に算出した曲線よりも左側に未選択のフィボナッチ点が存在するか判断する。左側に未選択のフィボナッチ点が存在する場合はステップＳ５８に処理が進み、存在しない場合はオブジェクト移動が終了する。
【００８９】
（Ｓ５８）表示制御部１２３は、直前に算出した曲線よりも左側にある未選択のフィボナッチ点のうち、最もカメラに近いフィボナッチ点ｋを選択する。そして、ステップＳ５１に処理が進む。これにより、このフィボナッチ点ｋを基準に曲線が算出される。
【００９０】
第２の実施の形態のシミュレーション装置１００によれば、ベクトルデータを可視化する場合に、フィボナッチ螺旋を形成する複数のフィボナッチ点が算出される。そして、ベクトルデータに含まれるベクトルに対応するオブジェクト（例えば、矢線）が、ベクトルデータによって示される位置から何れかのフィボナッチ点に移動する。これにより、オブジェクトの集合を任意の方向から観察しても、フィボナッチ螺旋の性質によって、画像上でオブジェクト同士が重なって見える可能性を低減できる。よって、各ベクトルの向きや大きさを把握することが容易となり、可視化結果の視認性が向上する。
【００９１】
また、オブジェクトの移動先を、フィボナッチ螺旋の中心から放射状にのびる複数の曲線のうちの何れかの曲線上としてもよい。これによっても、画像上でオブジェクト同士が重なって見える可能性を低減することができる。また、オブジェクトを配置可能な位置を増やすことができ、オブジェクトの密度が高い領域においても、オブジェクトの削除（非表示に設定すること）を抑制でき、可視化結果の情報量を維持できる。
【００９２】
なお、第１の実施の形態の情報処理は、シミュレーション装置１０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、シミュレーション装置１００にプログラムを実行させることで実現できる。
【００９３】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムをコピーして実行してもよい。
【符号の説明】
【００９４】
１０  シミュレーション装置
１１  記憶部
１２  表示制御部
１３  ベクトルデータ
１４ａ，１４ｂ，１４ｃ，１４ｄ  位置
１５ａ，１５ｂ，１５ｃ，１５ｄ  オブジェクト
１６  螺旋
１６ａ，１６ｂ，１６ｃ，１６ｄ，１６ｅ  点
【図１】
2016126557.tif 000005
【図２】
2016126557.tif 000006
【図３】
2016126557.tif 000007
【図４】
2016126557.tif 000008
【図５】
2016126557.tif 000009
【図６】
2016126557.tif 000010
【図７】
2016126557.tif 000011
【図８】
2016126557.tif 000012
【図９】
2016126557.tif 000013
【図１０】
2016126557.tif 000014
【図１１】
2016126557.tif 000015
【図１２】
2016126557.tif 000016