第 1 章 緒言 - 医療情報・医用生体工学研究室

第 1 章 緒言
歯科矯正治療の効率化に必要不可欠な歯の移動予測には,歯槽骨内の応力解析が必要で
ある.応力解析手法としては,有限要素法 (FEM: Finite Element Method)が一般的であ
り,現在では ANSYS という汎用有限要素解析ソフトウェアが多用されている.有限要素
解析には解析対象を有限要素モデルとして表現する必要があり,歯の有限要素モデルとし
ては標準歯の形状を用いることが多い.しかし,日本人成人の標準的な犬歯の形状データ
は,歯科矯正治療の対象の多くを占める成長期の歯の形状と異なるため,有限要素法によ
る歯槽骨の力学的適応変形シミュレーション等では,その差によって解析結果に大きな差
異を生じることが予想される.これまでに日本人成人の上顎犬歯の標準歯に基づく有限要
素モデルが作成され,各種解析が進められているが,矯正治療患者の多様化には対応でき
ていないのが現状である.個別の患者の状況に応じた正確な FEM 解析には,患者毎に有
限要素モデルを作成し,解析することが必要とされる.個体別の有限要素モデルを最初か
ら構築するには労力が必要であり,標準モデルから個別モデルを作ることが効率的である
と考えられる.本研究では,日本人成人の上顎犬歯の標準歯の有限要素モデルを座標軸毎
に拡大縮小変換することで個体別歯を構築するプログラムを作成し,その有限要素モデル
を解析する.
現在のところ,有限要素解析ソフトウェアとしては,流体解析,構造解析等様々な解析
が でき るた め ,汎 用 有限 要 素解 析 ソフ ト ウェ ア で あ る ANSYS が 多 用 さ れ て い る .
ANSYS は Windows だけでなく,Solaris 等の各種 OS (Operating System)でも動作する
という利点がある.本研究では,有限要素解析ソフトウェアとしては ANSYS を利用する
ことを想定して,標準歯の有限要素モデルを編集するプログラムを Java を利用して作成
する.Java はマルチプラットフォームであるため, Windows,Linux,Mac OS 等の
Java が実行できる環境であれば動作可能であり,多様な OS 環境で動作する ANSYS に対
応させするプログラムを作成するのに適している.さらに,編集中の有限要素モデルを可
視 化 し , よ り グ ラ フ ィ カ ル に 編 集 す る こ と を 目 的 と し て , Java の 標 準 拡 張 API
(Application Programing Interface)である Java3D を使用する.
本論文の構成は以下の通りである.
第 1 章では,本研究の目的を述べる.
第 2 章では,ANSYS の歴史や特徴を述べる.
第 3 章では,有限要素モデルを編集する為に必要な技術について述べる.具体的には,
座標変換,Java,Java3D について述べる.
第 4 章では,作成した編集プログラムについて述べ,プログラムの有効性を検討するた
めに,編集した有限要素モデルを解析する.
第 5 章では,本研究での結果を述べ,考察する.
第 6 章では,結論として本研究の成果を述べ,まとめる.
-1-
第 2 章 ANSYS
2.1 歴史
ANSYS は,1970 年に工学分野の諸問題をコンピュータを用いて解析するために,アメ
リカ Swanson Analysis System Inc. の John A. Swanson 博士により開発された汎用有
限要素解析プログラムである.当初は主に電力業界と機械業界で利用されていたが,現在
では電気,精密機器,自動車,自動車部品,航空宇宙,原子力,化学,医療工学,また研
究所や教育機関に至るまで,あらゆる有限要素法解析の要求を満たすまでになっている.
[2]
ANSYS は開発当初から伝熱−構造連成解析の機能が備わっており,連成解析を特徴とし
た有限要素プログラムとして開発が進められ,さらにプリプロセッサ及びポストプロセッ
サの搭載,カラーグラフィック端末への表示機能の搭載など,かなり早い時期から最新技
術が取り入れられている.[1]
2.2 特徴
ANSYS は次のような特徴を持っている.[2]
● プリプロセッサ,ポストプロセッサが搭載されている.
一般的な汎用有限要素プログラムは,プリプロセッサやポストプロセッサが別のプ
ログ ラム にな って おり ,そ れぞ れ別 に操 作し なけ れ ばな らな い .こ れに 対 して
ANSYS は,連立方程式を解くソルバープログラムとモデルを作成するプリプロセッ
サ,結果を処理するポストプロセッサが全て一つの実行ファイル(ansys.exe)に納めら
れ,ANSYS プログラムだけで有限要素解析に必要な作業が全て可能になっている.
このため,モデル作成,境界条件や解析オプション設定,結果処理の作業が全て同じ
環境(GUI)で可能であり,ANSYS 以外のプログラム操作を覚える必要がない.
● カスタマイズが容易である.
ANSYS にはカスタマイズを行うための言語 APDL (ANSYS Parametric Design
Language)が備わっている.この ADPL は BASIC 言語に似た言語で,ANSYS のコ
マンドラインとともに,変数や IF 文や DO 文を仕様することで,有限要素を含めた
プログラミングができ,ANSYS に新しい機能を追加することができる.さらにプリ
プロセッサ,ソルバー,ポストプロセッサが一つのプログラムに納められていること
から,IF 文や DO 文を使用してプロセッサ間を行き来することも可能である.
また,節点位置情報や節点結果情報など,有限要素解析に固有なデータをメモリか
ら変数へ代入することも可能な GET コマンドがあり,結果値をもとに判定を行い,
満足する結果が出るまで自動的にループを行わせることや,制御に近いことを行わせ
-2-
ることも可能である.
さらに,GUI のカスタマイズも可能で,APDL の機能と併用して,より使用しやす
い環境を整えることができる.近年,汎用有限要素プログラムは,汎用であるが故
に,多くの機能を使用できるようにした GUI が結果として煩雑となり,目的の解析
を行うまでに時間がかかってしまうことが問題となっている.しかし,このカスタマ
イズ機能を利用し,専用のマクロサブルーチンや GUI を用意することで,ある特定
の解析に対して,操作を非常に単純化することができ,初心者でも複雑な解析が可能
となっている.
● マルチプラットフォームである.
ANSYS は,各種 OS で動作可能である.
● 開発当初からの特徴的機能として連成解析が可能である.
ANSYS は,多種の解析(構造,伝熱,磁場,流体,圧電,音響等)が可能なだけで
なく,ほとんど全ての解析の間で連成解析が可能である.ANSYS には,結果ファイ
ルから直接データを読み込むことができる LDREAD コマンドがあり,このコマンド
で解析結果ファイルから,温度,力,圧力,電流密度,発熱,熱伝達係数等を直接読
み込むことができるようになっている.このコマンド機能により,シーケンシャル連
成が非常に容易にできるようになっている.
さらに各場の解析環境(材料特性,境界条件,要素の選択-非選択等)を特殊なファイ
ル(physics file)に納めておくことが可能で,このファイルを読み込むだけで,各解析
に必要な条件を簡単に入れ替えることができる.この機能により,双方向の連成に必
要な材料特性の変更や境界条件の再定義が容易に行えるようになっている.また,連
成専用の要素も用意され,それらの境界条件や材料特性を同時に定義することがで
き,LDREAD コマンドや physics file の機能を使用しなくとも,さらに容易な連成解
析ができるようになっている.
2.3 出力データ形式
2.3.1 概要
本研究では,有限要素モデルの編集と解析を目的とするので,これに用いる ANSYS か
らエクスポートされる 2 種類のデータ,NLIST,ELIST について解説する.NLIST は節
点に関係するデータが含まれていて,プログラムに読み込んで節点を編集するために使用
する.ELIST は要素に関係するデータが含まれていて,編集している有限要素モデルの
3 次元表示に使用する.
-3-
2.3.2 NLIST
ANSYS からエクスポートされる NLIST(節点データファイル)は,NODE,X,Y,Z の
順にラベルが表示される行の次行から,ラベルの順番に従って,節点番号,X 軸座標値,
Y 軸座標値,Z 軸座標値の順に半角スペースで区切られてデータが格納されている.リス
ト 2-1 は NLIST により節点リストを表示させた一例である.
リスト 2-1 NLIST 出力の一例
LIST ALL SELECTED NODES. DSYS= 0
SORT TABLE ON NODE NODE NODE
NODE
100
X
Y
0.00000000000
Z
0.926211970000
5.00000000000
101 -0.342554100000
0.926211970000
5.00000000000
102 -0.575001600000
0.596328250000
5.00000000000
103 -0.624257900000
0.280635050000
5.00000000000
104 -0.648406000000
-0.126878000000E-01 5.00000000000
105 -0.611703800000
-0.304508000000
5.00000000000
106 -0.575001600000
-0.609016100000
5.00000000000
107 -0.342554100000
-0.951587600000
5.00000000000
108
0.122340800000E-01 -1.00233900000
5.00000000000
109
0.367022280000
-0.761270100000
5.00000000000
110
0.538299340000
-0.532889100000
5.00000000000
111
0.672874170000
-0.329883700000
5.00000000000
112
0.734044550000
-0.126878000000E-01 5.00000000000
113
0.741917160000
0.329883710000
5.00000000000
114
0.685108250000
0.647079590000
5.00000000000
115
0.403724500000
0.888148460000
5.00000000000
120
0.00000000000
0.463105980000
5.00000000000
121 -0.171277100000
0.463105980000
5.00000000000
122 -0.287500800000
0.298164130000
5.00000000000
123 -0.312129000000
0.140317530000
5.00000000000
-4-
2.3.3 ELIST
ANSYS からエクスポートされる,有限要素モデル構築に用いられている ELIST(要素
データファイル)は,ELEM,MAT,TYP,REL,ESY,SEC,NODES の順にラベルが
表示される行の次行から,ラベルの順番に従って,要素番号,材料定数,要素タイプ,リ
アルコンスタント,要素座標系,属性ポインタ,節点番号の順に半角スペースで区切られ
てデータが格納されている.リスト 2-2 は ELIST により要素リストを表示させた一例で
ある.
リスト 2-2 ELIST 出力の一例
LIST ALL SELECTED ELEMENTS. (LIST NODES)
ELEM MAT TYP REL ESY SEC
NODES
2013 2 1 1 0 1 3233 944 908 3057 3907 1044 1008 3848
2014 2 1 1 0 1
944 3219 3047 908 1044 3913 3942 1008
2015 2 1 1 0 1 3057 3058 3232 3233 3848 3849 3908 3907
2016 2 1 1 0 1 3058 3059 3231 3232 3849 3850 3909 3908
2017 2 1 1 0 1 3059 909 945 3231 3850 1009 1045 3909
2018 2 1 1 0 1 3034 3035 3207 3208 3945 3946 3917 3916
2019 2 1 1 0 1 3208 3209 3033 3034 3916 3915 3944 3945
2020 2 1 1 0 1 3209 942 906 3033 3915 1042 1006 3944
2021 2 1 1 0 1
942 3196 3023 906 1042 3882 3949 1006
2022 2 1 1 0 1 3196 3197 3022 3023 3882 3881 3948 3949
2023 2 1 1 0 1 3197 941 905 3022 3881 1041 1005 3948
2024 2 1 1 0 1
941 3187 3014 905 1041 3919 3952 1005
2025 2 1 1 0 1 3187 3188 3013 3014 3919 3918 3951 3952
2026 2 1 1 0 1 3188 940 904 3013 3918 1040 1004 3951
2027 2 1 1 0 1
940 3178 3005 904 1040 3878 3955 1004
2028 2 1 1 0 1 3178 3179 3004 3005 3878 3877 3954 3955
2029 2 1 1 0 1 3179 939 903 3004 3877 1039 1003 3954
2030 2 1 1 0 1
939 3168 2981 903 1039 3922 3937 1003
2031 2 1 1 0 1 3168 3169 2980 2981 3922 3921 3936 3937
2032 2 1 1 0 1 3169 3170 2979 2980 3921 3920 3935 3936
-5-
第 3 章 有限要素モデル編集支援技術
3.1 座標変換
3.1.1 3 次元アフィン変換
図 3-1 に示すような 3 次元空間上の点 P(x, y, z)が,ある変換によって P'(x', y', z')に移動
したとする.この変換は,次式で表すことができる.
Z
P'(x', y', z')
P(x, y, z)
Y
X
図 3-1 3 次元座標系
x ' =a 11 xa 21 ya 31 za 41
y ' =a 12 xa 22 ya 32 z a 42
z ' =a 13 xa 23 ya 33 za 43
式(3-1)
式(3-1)は行列で表現でき,
[ ][
a 11
x'
y ' = a 21
z'
a 31
1
a 41
a 12
a 22
a 32
a 42
a 13
a 23
a 33
a 43
0
0
0
1
][ ]
x
y
z
1
式(3-2)
となる.ただし式(3-2)において,式(3-3)を満たす.
∣
∣
a 11 a 12 a 13
a 21 a 22 a 23 ≠0
a 31 a 32 a 33
式(3-3)
-6-
この変換を 3 次元アフィン変換と呼ぶ.
ここで, a 11 , a 12 , a 13 , a 21 , a 22 , a 23 , a 31 , a 32 , a 33 は拡大,縮小,反転等
のスケール変換,剪断変換,および回転を行う各係数, a 41 , a 42 , a 43 は x, y, z 軸方向
の平行移動量を表す.[3][4]
3.1.2 スケール変換
(1)x 軸方向のスケール変換
a 11 が正の時,x 軸方向に拡大縮小する.また, a 11 が負であれば yz 面に対して反転す
る. a 11 の値によって以下のスケール変換が行われる(表 3-1).
表 3-1 x 軸方向のスケール変換
Function
Range of a 11
a 111
a 11=1
0a 111
a 11=0
−1a 110
a 11=−1
a 11−1
Scale up along x-axis
Unchanged
Scale down along x-axis
Project on yz plane
Reverse on yz plane after scale down along x-axis
Reverse on yz plane
Reverse on yz plane after scale up along x-axis
(2)y 軸方向のスケール変換
a 22 が正の時,y 軸方向に拡大縮小する.また, a 22 が負であれば xz 面に対して反転す
る. a 22 の値によって以下のスケール変換が行われる(表 3-2).
表 3-2 y 軸方向のスケール変換
Range of a 22
a 221
a 22=1
0a 22 1
a 22=0
−1a 220
a 22 =−1
a 22−1
Function
Scale up along y-axis
Unchanged
Scale down along y-axis
Project on xz plane
Reverse on xz plane after scale down along y-axis
Reverse on xz plane
Reverse on xz plane after scale up along y-axis
-7-
(3)z 軸方向のスケール変換
a 33 が正の時,z 軸方向に拡大縮小する.また, a 33 が負であれば xy 面に対して反転す
る. a 33 の値によって以下のスケール変換が行われる(表 3-3).
表 3-3 z 軸方向のスケール変換
Range of a 33
a 331
a 33 =1
0a 331
a 33=0
−1a 33 0
a 33=−1
a 33−1
Function
Scale up along z-axis
Unchanged
Scale down along z-axis
Project on xy plane
Reverse on xy plane after scale down along z-axis
Reverse on xy plane
Reverse on xy plane after scale up along z-axis
3.2 Java
3.2.1 概要
Java は Sun Microsystems 社の開発チームによって 1991 年に作成されたプログラミン
グ言語である.Java では,Windows,Mac OS,UNIX 等,様々なプラットフォーム上で
稼動可能なプログラムを開発することができる.Java には以下のような特徴がある.[5][7]
● オブジェクト指向言語である.
従来の COBOL・FORTRAN・C 言語などが「手続き型言語」と呼ばれるのに対
し,C 言語にオブジェクト指向的な拡張を施した C++・Java 等は「オブジェクト指
向言語」と呼ばれる.
手続き型言語では,一連の手続きを順に処理していく形でプログラムが書かれる
のに対し,オブジェクト指向言語では,データとそれを操作する手続きを「オブ
ジェクト」と呼ばれるひとまとまりの部品として一体化し,オブジェクトの組み合
わせとしてプログラムを記述する.
オブジェクト指向言語は,プログラムを部品化する作業が徹底されているため,
大規模なプログラムの開発やプログラムの再利用がしやすい等の利点がある.
● アプリケーションは Java 仮想マシン上で動作するので異なる OS で実行可能であ
る.
Java では,Java Virtual Machine (JVM)と呼ばれる Java 仮想マシン上で動作す
る.JVM は,Java プログラムが指定する拡張子が.class である中間コードの実行
-8-
ファイルをそれぞれの環境で稼動可能なバイナリコードに変換する.Java ではこの
ような機能が完備しているため,様々な環境でも稼動できるプログラムが容易に作
成できる(図 3-2).
abc...
ソースファイル
実行ファイル
abc...
C: ¥ >
コンパイラ
]$
abc...
各 OS 用の JVM で実行可能
(a)Java の場合
コンパイラ
実行ファイル
abc...
ソース
ファイル
コンパイラ 実行ファイル
abc...
C: ¥ >
×
他の OS でコンパイル
されたファイルでは
実行できない
コンパイラ 実行ファイル
]$
abc...
(b) その他の言語の場合
図 3-2 プログラムの作成から実行まで
異なる OS で実行可能なのは,Java 開発チームの当初の目的が,各種家電製品用
のソフトウェアを作成可能なプログラミング言語を開発することであったためであ
る.塔載対象となる家電製品の種類が多様であるため,各種家電製品用のソフト
ウェアを作成するには,基盤の異なる環境でも実行可能なプログラムを作成するこ
とのできるコンピュータ言語を開発する必要があった.そのような機能を持たせる
ことで,同じソフトウェアを修正することなく,さまざまな種類の製品で実行でき
る移植可能なプログラムが作成可能になる.従って,コスト・時間を大幅に節約で
-9-
きる.
現在,Java の代表的な実行環境としては,Sun Microsystems 社から Solaris,
Microsoft Windows , Linux 用 の JRE(Java Runtime Environment)Version 5.0
Update 6,Apple 社より Macintosh 用の JRE Version 5.0 Update 6 が提供されて
いる.
● コードを使い回すことが非常に効率的にできる.
JVM によって,プラットフォームによらないプログラムが作成できるため,コー
ドを効率よく使い回すことが可能である.
3.2.2 プログラムの作成手順
Java のプログラムは,一般的なソフトウェア開発用言語と同様に以下のような手順で
作成できる(図 3-3).
ソースコード作成
コンパイル
デバッグ
失敗
成功
実行
図 3-3 プログラム作成の流れ
Java の開発環境には,プログラム開発のためのツールが完備していて,これらは無償
で提供される.また,Java の開発・コンパイル・デバック等のプログラム開発の一連の
作 業 を , グ ラ フ ィ カ ル な 操 作 で 統 合 し て 行 え る 統 合 開 発 環 境 (IDE : Integrated
Development Environment)も各社から提供されている(表 3-4).[10]
-10-
表 3-4 IDE の例
Vendor
Sun
IDE
Sun One
Microsystems
Borland
webGAIN
Studio
JBilder
Visual Cafe
● ソースコードを作成する.
● コンパイラでコンパイルして拡張子が「.class」のクラスファイル(実行ファイル,中
間コード)に変換する.コンパイルが失敗した場合はでデバックして再度コンパイル
する.
● クラスファイルを JVM で実行する.
3.2.3 コンパイル
Java のソースコードをコンパイルするには,コマンドラインから「javac <ソースファ
イル名>」と入力してコンパイラを起動する(図 3-4).コンパイルが成功した場合,クラス
ファイルが生成される.クラスファイルは,コードをバイトコード形式に変換したもので
拡張子としては「.class」が用いられる.[5]-[7]
例として,Sample00.java(リスト 3-1)をコンパイルする.
リスト 3-1 Hello という文字列を表示するプログラム(Sample00.java)
class Sample00
{
public static void main(String[] args){
System.out.println("Hello!");
}
}
図 3-4 コンパイル例
-11-
3.2.4 実行
Java のクラスファイルが作成されたら,Java プログラムを実行できる.Java プログラ
ムを実行するには,インタプリタというソフトウェア(JVM)を使う.インタプリタは
「java <クラス名>」と入力して起動する.インタプリタは,バイトコードを機械語に変
換してコンピュータに命令を実行させる.
例として,前節で Sample00.java をコンパイルときに生成されたクラスファイルを実行
する.実行した結果,図 3-5 に示すようにコマンドプロントに「Hello!」と表示される.
図 3-5 実行例
3.2.5 AWT
AWT (Abstract Window Toolkit) は , ア プ レ ッ ト と ア プ リ ケ ー シ ョ ン の GUI
(Graphical User Interface)を作成することができる.クラスとインターフェースは,
java.awt パッケージやその他のサブパッケージに入っている.AWT は,様々なプラット
フォームに亘って共通となる機能のみ持っている.従って後述する Swing と比較して部
品数,インターフェースデザインの OS による同一性の点で異なる特徴を持つ.AWT で
は,Swing よりも部品数が少なく,OS によってインターフェースが若干変化する.AWT
部品を用いたプログラムの例を以下に示す(リスト 3-2,リスト 3-3,図 3-6).[5]-[7], [9]
(a) リスト 3-2 の表示例(Windows)
(b) リスト 3-3 の表示例(Windows)
(c) リスト 3-2 の表示例(Linux)
(d) リスト 3-3 の表示例(Linux)
図 3-6 AWT アプリケーションの例
-12-
リスト 3-2 ボタン表示プログラム例(Sample01.java)
import java.awt.*;
class Sample01 extends Frame
{
Sample01() {
super("Button");
setSize(200, 100);
setLayout(new FlowLayout());
Button button1 = new Button("OK");
add(button1);
show();
}
public static void main(String[] args) {
new Sample01();
}
}
リスト 3-3 MenuBar の表示プログラム例(Sample02.java)
import java.awt.*;
import java.awt.event.*;
class Sample02 extends Frame implements ActionListener
{
Sample02() {
super("MunuBar");
setSize(200, 100);
setLayout(new FlowLayout());
MenuBar menuBar = new MenuBar();
setMenuBar(menuBar);
Menu menuFile = new Menu("File");
menuFile.addActionListener(this);
menuBar.add(menuFile);
menuFile.addSeparator();
MenuItem menuExit = new MenuItem("Exit");
menuFile.add(menuExit);
Menu menuView = new Menu("View");
menuView.addActionListener(this);
menuBar.add(menuView);
show();
}
public void actionPerformed(ActionEvent e){
System.out.println(e.getActionCommand());
}
-13-
3.2.6 Swing
Swing は GUI のコンポーネントをまとめたもので,AWT だけで作成できるインター
フェイスよりも強力かつ柔軟なインターフェイスを作成できる.タブ付き枠やスクロール
枠,ツリー,表などの種類が追加されている.Swing コンポーネントは,AWT と違い,
プラットフォーム固有のコードを使って構築する必要が無い.これは,全てのコードを
Java で作成しているため,プラットフォームに依存しないからである.このような性質
を 「 lightweight 」 と い う . Swing の ク ラ ス は , AWT の 上 位 互 換 に な っ て い て ,
javax.swing パッケージを import することで利用できる.[5]-[7]
Swing の部品類が実際に利用されているクラスファイルが,Java SDK の demo フォル
ダ内に収録されている.デモに含まれている SwingSet2 を実行することで,Swing を利
用したアプリケーションを実際に見ることができる(図 3-7).
Swing コンポーネントを使用したプログラムの例として以下を以下に示す(リスト 3-4,
リスト 3-5,図 3-8).[5]-[7], [9]
リスト 3-4 JMenuBar の表示例(Sample03.java)
import java.awt.*;
import javax.swing.*;
class Sample03 extends JFrame
{
Sample03(){
getContentPane().setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
JMenu menuFile = new JMenu("File");
JMenuItem menuOpen = new JMenuItem("Open");
JMenuItem menuExit = new JMenuItem("Exit");
menuBar.add(menuFile);
menuFile.add(menuOpen);
menuFile.add(menuExit);
getContentPane().add(menuBar, BorderLayout.NORTH);
setTitle("JMenuBar");
setSize(200, 120);
setVisible(true);
}
public static void main(String[] args){
new Sample03();
}
}
-14-
リスト 3-5 JButton の表示例(Sample04.java)
import java.awt.*;
import javax.swing.*;
class Sample04 extends JFrame
{
Sample04(){
getContentPane().setLayout(new FlowLayout());
JButton button = new JButton("OK");
getContentPane().add(button);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("JMenuBar");
setSize(200, 120);
setVisible(true);
}
public static void main(String[] args){
new Sample04();
}
}
(a) Windows での表示例 (b) Linux での表示例 図 3-7 SwingSet2 による表示例
(a) リスト 3-4 の表示例
(b) リスト 3-5 の表示例
図 3-8 Swing コンポーネントの例
-15-
3.2.7 Java3D
Java3D は,Sun Microsystems 社からパッケージとして提供されている,Java 言語向
けの 3 次元グラフィクスの拡張 API (Application Programming Interface)である.API
は,アプリケーションプログラムからシステム(OS)やライブラリ,言語処理系などに対す
る,標準的な機能呼び出しの方法について定義したものである.
また,Java3D は,Java2 をサポートする様々なハードウエア上で,再コンパイルせず
に描画処理することが目的であり,以下のような特徴を持つ.
● シーングラフをベースにしている.
プログラマーは個々の描画 API を直接使用するのではなく,シーン・グラフと呼ば
れるオブジェクト・モデルを構築していくことでグラフィック・プログラミングを行
う.
● 実際の描画処理は,既存のグラフィック API (OpenGL,Direct X 等)が担当する.
Java3D では,OpenGL,Direct3D の 2 種類のグラフィック API に対応している.
OpenGL は SGI(シリコングラフィックス)が開発した 3 次元グラフィック API のこ
とで,同社の UNIX ワークステーションをはじめ,IBM,Sun など他社の UNIX
ワークステーション,Windows 95/98, Windows NT などに移植されている.
一 方 , Direct X は Microsoft と Intel が 開 発 し た マ ル チ メ デ ィ ア API で ある .
DirectX は Windows 95/98, Windows NT, Windows 2000 などで動作する.DirectX
は Direct3D という3次元グラフィックス API を含んでいる。
Linux では OpenGL が対応していない.代わりに,Mesa という OpenGL に互換性
のある API を使用することで,Linux 上で Java3D を表示可能である.
Java3D をインストールした際に,デモプログラムがインストールされるので,プログ
ラムを作らなくとも動作確認できる.Java3D を用いたプログラムの実行例を図 3-9 に示
す.
図 3-9 Java3D プログラムの実行例(HelloUniverse)
-16-
3.2.8 Java3D と Swing の混在
Java3D は , AWT の よ う に OS や ハ ー ド ウ ェ ア に 描 画 処 理 を 依 存 す る た め ,
heavyweight component である.一方,Swing は描画処理を Java に依存しているので
lightweight component である.
heavyweight component は lightweight component の描画処理を終えた後に,OS の機
能を用いて描画される.そのため,heavyweight component に lightweight component
が重なった場合,lightweight component が heavyweight component に隠れる.
従って, Java3D と Swing を混在して使用する際に, Java3D のウィンドウ上では
Menu 等 が 表 示 さ れ な い , InternalFrame 内 に 作 成 し た Java3D 上 に 重 な っ た 他 の
InternalFrame の表示が隠れてしまう,といった問題が起こる(図 3-10).
(a) Java3D が前面にある場合
(b) Swing が前面にある場合
図 3-10 Java3D 部品が Swing 部品に重なった例
これを解決するには以下の方法が挙げられる.[8]
● Java3D のウィンドウ上に他のウィンドウが重ならないようにする.
● 問題が改善された Java3D のバージョンが配布されるのを待つ.
● Java3D のレンダリングを OffScreen で行い,レンダリング後のイメージをコンポー
ネントに貼り付ける.
● Swing の使用をあきらめ,heavyweight component である AWT を使用する.
-17-
第4章 有限要素モデル編集
4.1 有限要素モデル編集プログラム
4.1.1 概要
個体別歯はそれぞれ形状や大きさが異なるので,その有限要素モデル解析を実現するに
は,解析する個体別歯の数だけ有限要素モデルを構築する必要がある.しかし,既にある
標準歯の有限要素モデルは,22967点の節点で構成されている.有限要素法を利用した解
析の精度を高めるには,解析対象となる有限要素モデルをより細かく要素分割をする必要
があることが知られている.既にある標準歯とほぼ同数の節点数を有する有限要素モデル
を新たに構築するに場合は,1つの有限要素モデルの構築だけでも時間と労力が必要とな
り,解析効率が悪いと考えられる.
また,節点データをファイルからANSYSに読み込むためには,1つの行につき1つの節
点のデータを,「N,節点番号,X軸座標値,Y軸座標値,Z軸座標値」と,順にカンマ区
切りで入力された,CSV形式でデータを作成しなければならない.そのようなデータを作
成するためには,NLISTに含まれるANSYSへの読込みに必要の無い情報を取り除き,そ
れぞれのデータを取り出す必要がある.
そこで本研究では,個体別歯の有限要素解析の効率化のために,既にある標準歯の有限
要素モデルの節点データを編集して,それを個体別歯の有限要素モデルとして再構築し,
ANSYSに読み込み可能なデータ書式で出力するプログラムを作成した.
4.1.2 構成
本プログラムの特徴は以下の通りである.
● ANSYSのNList Commandで出力されるNLISTから,節点データ編集に関係の無い
データを選別して,節点番号,X,Y,Z軸座標値を読み込むことが可能である.
● 節点データの拡大縮小変換が可能である.変換の割合は,X,Y,Z軸方向を独立に指
定でき,元の各軸方向の長さ対する割合(%)で指定する.また,変換後の長さ(mm)を
各軸独立に指定し,変換前の長さから変換の割合(%)を求めて変換可能である.
● 節点データを,ANSYSに読み込み可能な書式,ファイル形式(CSV形式)で出力可能で
ある.
● Z軸について,正方向,負方向で拡大縮小変換の割合(%)を独立に指定可能である.
X,Y,Z軸座標値の拡大縮小変換と同様,変換後の長さ(mm)を指定して変換が可能
である.
-18-
以上の特徴を有するプログラムの開発は,表4-1に示す開発環境で行った.
表4-1 開発環境
Hardware
Software
PC
CPU
Memory
OS
Development
Software
Original
PC
AMD Athlon(TM)
XP 1800+
1.5GHz
256MB
Turbolinux 10
Desktop
SDK 1.5.0_02
Java3D 1.3
NEC
LaVie N
Intel Celeron(R) M
1.3GHz
256MB
Microsoft
Windows XP
HomeEdition SP2
SDK 1.5.0_06
SDK 1.4.1_01※
Java3D 1.3
※ Java3DがSDK1.5.0_04で動作しなかったために用いた.
また,開発するクラスファイルは表4-2の通りとした.
表4-2 開発するクラスファイル
Class name
Explanation
Class name
Explanation
JFEMR
Main class
StringSplitter
Split character string
Solid3d
Has data of node and
element
JFEMRInternalFrame
Pattern of
InternalFrame
Node3d
Has node data
CanvasInternalFrame
Show 3D model
Element8i
Has element data
ExponentConverter
Convert exponent
EListReader
Read ELIST
TableInternalFrame
Show node and element
data
NListReader
Read NLIST
VariableTable
Create table
NListWriter
Write NLIST
XYZSizeEditor
Catch transform value
of X, Y, Z-axis
InfoBar
Show length of X, Y, Z
-axis
ZPMSizeEditor
Catch transform value
of pole of Z-axis
4.1.3 ANSYSからのデータのインポート
本プログラムに,ANSYSから出力されるファイルの内容,NLIST,ELISTをインポー
トする方法について詳述する.
NLISTの場合には,節点番号,節点座標データをファイルから1行ずつ読み込む.読み
込んだデータはString型であるため,そのまま半角スペースで分割する.分割すると,半
角スペースで分割された文字列が順に格納された配列が生成される.ところが,NLISTの
各データ間の半角スペースは1つ以上あるため,分割後の配列要素には,文字列が含まれ
-19-
ない部分,つまり連続していた2つの半角スペースの間が要素に格納される場合がある.
その要素データは,不要なデータである.このような,不要なデータが混ざった状態の配
列要素から必要なデータのみを取り出すためには以下の方法が考えられる.
● 方法(1) 文字列が含まれている要素を検索して値を取り出す.
● 方法(2) 文字列が含まれない要素を検索し,その要素よりも後ろにある要素値を1つ
前の要素に代入して詰めていき,その後先頭から文字列が含まれない要素の1つ前の
要素までを取り出す.
● 方法(3) ArrayList型変数に順に代入,indexOf()メソッドを使用して文字列が含まれ
ない要素を検索,その要素をremove()メソッドで削除する,その後値を取り出す.
方法(1)では,文字列が含まれている要素を1つの配列としてデータの受け渡す際に,全
部で何個の要素があるか分かるまで,その配列の要素数を宣言できない.方法(2)では,前
者と同様の作業をする際に,文字列が含まれない要素の番号を得てから配列を作成しなけ
ればならない.方法(3)では, remove()メソッドで要素を削除しているため,配列では要
素を削除できないために検索して捜していた整理後の要素数が size()メソッドで簡単に得
られる.そのため,本研究では,方法(3)を採用した.方法(3)を用いて,整理して値を取
り出して新しい配列を作成,その配列をNListReaderに受け渡す.これらのような,入力
データを分割して,分割によって生じる不要部分を,取り除くことで整理する機能を有す
るStringSplitterクラスを作成した(図4-1).
1 行入力されたデータ ( 半角スペースで区切られている )
100
0.00000000000
0.926211970000
5.00000000000
半角スペース 1 つ分で分割
100
0.00000000000
0.926211970000
分割されたデータ
( 半角スペースが取り除かれている )
データ格納
Node3d
図4-1 分割の流れ
-20-
5.00000000000
これらの処理後に,配列の先頭要素が数字でなければ,少なくとも節点番号ではないこ
とが分かるので,必要ないデータと判断する.そう判断された場合は,Node3dへの代入
処理をスキップし,次行のNLISTのデータを読み込み処理へ進む.また,配列の先頭要素
が数字で,節点番号であると判断した場合には,節点番号はint型,X,Y,Z軸座標値は
double型としてNode3d型の変数にそれぞれ代入する.それらはString型から,それぞれ
対応する型に変換してから代入する必要がある.その中でX,Y,Z軸座標値に関しては,
「-0.126878000000E-01」のように「E」の文字を使用した指数表示が含まれるために
doube型に変換できない場合がある.そこで,X,Y,Z軸座標値に関しては,「E」とい
う文字が含まれている場合,分割文字を「E」として,「E」よりも左側部分,右側部分
の2つに分割する.そして,分割した有効桁を表す部分をA,指数を表す部分をB,指数表
B
示に変換したデータをZとした時に, Z = A×10 となるよう計算し,そのZをその座標の
値としてdouble型変数に変換してデータを格納する.
次に,ELISTの場合は,NLISTと同じように入力データを分割し,整理してデータを
Element8i型変数へ格納する.ELISTで必要なデータは,要素番号,節点番号(8個)なので
,これらは全てint型に変換してElement8iに格納する.
4.1.4 節点・要素データ表示
NLIST,ELISTからインポートしたデータは,Node3d型変数,Element8i型変数にそ
れぞれ格納されるが,現在の値を表示させるために,メインフレーム内にInternalFrame
で表示することにした.Node3d型変数に格納したデータ,Element8i型変数に格納した
データをそれぞれのInternalFrame内にJTableを利用して表示する.拡大縮小変換は
Node3d型変数のX,Y,Z軸座標に対して作用するので,拡大縮小変換された後にNode3d
から変換後のX,Y,Z軸座標を受け取り,節点を表示しているJTableの内容を更新する.
4.1.5 拡大縮小変換
節点データを拡大縮小変換するために,X,Y,Z軸それぞれ独立に倍率を指定して変換
可能とする機能,Z軸正方向,負方向それぞれ独立に倍率を指定して変換可能とする機能
を作成した.前者は,1つの変換行列(式4-1)で節点座標を変換,後者は,2つの変換行列(
式4-2),(式4-3)を用意し,変換対象要素のZ軸座標値がZ>0,Z<0であるか判別して,Z>0
の場合(式4-2),Z<0の場合(式4-3)の変換行列で節点データを変換する.
-21-
[ ][
TX
x'
y' = 0
z'
0
1
0
0
0
TY 0
0 TZ
0
0
[ ][
[ ][
0
0
0
1
][ ]
x
y
z
1
式(4-1)
][ ]
][ ]
1 0 0
x'
y' = 0 1 0
0 0 T Zp
z'
1
0 0 0
0
0
0
1
1 0 0
x'
y' = 0 1 0
0 0 T Zm
z'
1
0 0 0
0
0
0
1
x
y
z
1
式(4-2)
x
y
z
1
式(4-3)
x , y , z :変換前の節点座標値, x ' , y ' , z ' :変換後の節点座標値
T X , T Y , T Z :X,Y,Z軸拡大縮小変換値, T Zp :Z軸正方向座標拡大縮小変換値
T Zm :Z軸負方向座標拡大縮小変換値
4.1.6 動作試験
拡大縮小変換機能の実装完了後に,節点座標が正確に拡大縮小変換されるかを検証する
.プログラムで拡大縮小変換した結果と,表計算ソフトウェア(Star Suite 7 Calc)で同様
の処理を行った結果と比較してプログラム動作の正確性を確認する.節点データは,標準
歯全体の節点データを使うと節点数が約2万点に及ぶので,データ数を3節点分に減らした
節点データを用いて検証した.
標準歯の有限要素モデル節点から抽出したデータ(表4-3,表4-4)を用いて以下の3種類の
拡大縮小変換を検証した.
● 120%変換
表4-3に示す節点データを,X,Y,Z軸座標を元の大きさの120%に変換する.
● 80%変換
表4-3に示す節点データを,X,Y,Z軸座標を元の大きさの80%に変換する
-22-
● 80-120%変換
表4-4に示す節点データを,Z軸座標を座標値が正の場合は元の大きさの80%,負の場
合は元の大きさの120%に変換する.
表4-3 抽出した節点データ(1)
Before
Node number
100
108
221
X-axis
0.0000000000
1.2234080000E-02
-0.3242030000
Y-axis
0.9262119700
-1.0023390000
0.8500849600
Z-axis
5.0000000000
5.0000000000
4.0000000000
表4-4 抽出した節点データ(2)
Before
Node number
100
108
221
X-axis
0.0000000000
1.2234080000E-02
-0.3242030000
Y-axis
0.9262119700
-1.0023390000
0.8500849600
Z-axis
5.0000000000
-5.0000000000
4.0000000000
4.2 個体別歯の有限要素モデル解析
4.2.1 概要
本研究で作成したプログラムで有限要素モデルを編集する有効性を検証するために,以
下の4つの有限要素モデルについて解析した.
● 標準モデルの解析
個体別歯の有限要素モデルの解析結果と比較するために,標準歯の有限要素モデル(
標準モデル)を解析する.
● 80%モデルの解析
標準モデルのX,Y,Z軸座標をそれぞれ80%の大きさに変換したデータを80%モデル
として解析する.
● 120%モデルの解析
標準モデルのX,Y,Z軸座標をそれぞれ120%の大きさに変換したデータを80%モデ
ルとして解析する.
● 80-120%モデルの解析
標準モデルのZ軸座標のうち,Z>0の場合80%,Z<0の場合120%の大きさに変換した
データを80-120%モデルとして解析する.
-23-
4.2.2 解析
図4-2に示すブラケット中央部から矢印の方向へ,矯正力 (F)を加え,4種類のモデルを
解析した.解析条件は以下の通りである.
● 矯正力 2.97 [N]
● 矯正力を加える位置 ブラケットの中央部分(図4-2)
● その他 歯槽骨要素の外周の水平移動を拘束する.
また,解析対象の材料定数と要素数は次の通りである.(表4-5,表4-6)
表4-5 材料定数 表4-6 要素数
Tissue
Tooth
Periodontal ligament
Alveolar bone
Bracket
Modulus of
elasticity
19.6 [GPa]
0.31 [MPa]
10.8 [GPa]
21 [GPa]
Poisson's
ratio
0.3
0.49
0.3
0.3
Tissue
Tooth
Periodontal ligament
Alveolar bone
Bracket
Number of all elements
F
図4-2 有限要素モデルと荷重位置
-24-
Element
number
3594
4019
15660
95
23368
第5章 結果及び考察
5.1 動作試験
本研究で作成した有限要素モデル編集プログラムの拡大縮小変換の正確性を確認する為
の動作試験より以下の結果が得られた.(表5-1〜表5-3)
表5-1 120%変換結果
Before
After
(Program)
After (Star
Suite 7 Calc)
Node number
100
108
221
100
108
221
100
108
221
X-axis
0.0000000000
1.2234080000E-02
-0.3242030000
0.0000000000
0.0146808960
-0.3890436000
0.0000000000
0.0146808960
-0.3890436000
Y-axis
0.9262119700
-1.0023390000
0.8500849600
1.1114543640
-1.2028068000
1.0201019520
1.1145436400
-1.2028680000
1.0201019520
Z-axis
5.0000000000
5.0000000000
4.0000000000
6.0000000000
6.0000000000
4.8000000000
6.0000000000
6.0000000000
4.8000000000
Y-axis
0.9262119700
-1.0023390000
0.8500849600
0.7409695760
-0.8018712000
0.6800679680
0.9262119700
-0.8018712000
0.6800679680
Z-axis
5.0000000000
5.0000000000
4.0000000000
4.0000000000
4.0000000000
3.2000000000
4.0000000000
4.0000000000
3.2000000000
表5-2 80%変換結果
Before
After
(Program)
After (Star
Suite 7 Calc)
Node number
100
108
221
100
108
221
100
108
221
X-axis
0.0000000000
1.2234080000E-02
-0.3242030000
0.0000000000
0.0097872640
-0.2593624000
0.0000000000
0.0097872640
-0.2593624000
表5-3 80-120%変換結果
Before
After
(Program)
After (Star
Suite 7 Calc)
Node number
100
108
221
100
108
221
100
108
221
X-axis
0.0000000000
1.2234080000E-02
-0.3242030000
0.0000000000
0.0122340800
-0.3242030000
0.0000000000
0.0122340800
-0.3242030000
Y-axis
0.9262119700
-1.0023390000
0.8500849600
0.9262119700
-1.0023390000
0.8500849600
0.9262119700
-1.0023390000
0.8500849600
Z-axis
5.0000000000
-5.0000000000
4.0000000000
4.0000000000
-6.0000000000
3.2000000000
4.0000000000
-6.0000000000
3.2000000000
これらから分かるように,プログラムで拡大縮小変換したデータとStar Suite 7 Calcで
-25-
拡大縮小変換したデータとの間に差が見られないので,拡大縮小変換時に誤差が発生して
いないのは明らかである.従って,有限要素モデル編集で誤差を考慮せず変換可能である
と判断できた.
5.2 解析結果
前項の結果より,編集プログラムの拡大縮小変換の正確性が確認できたので,個体別歯
の有限要素モデルを構築し,解析した.解析結果から,節点(表5-4)の最小主応力を取り出
したところ,表5-5,図5-1に示すような結果が得られた.
表5-4 解析結果に用いた節点の座標値
Node number
896
996
1096
1196
1296
1396
1496
1596
1696
1796
1896
1996
2096
2196
2296
2396
X-axis
3.1973485800
3.4542641700
3.0505396700
2.9404329900
3.1239441300
2.7446877800
2.3409632700
2.3042610500
2.2797928900
2.0473454500
1.9127706200
1.7781957800
1.7537276300
1.6436209500
1.3744712800
1.0441512300
-26-
Y-axis
0.0000000000
0.0000000000
0.0000000000
0.0126878400
-0.0253757000
0.0000000000
0.0000000000
0.0000000000
0.0380635100
0.0000000000
0.0000000000
0.0126878400
0.0126878400
0.0000000000
0.0126878400
0.0000000000
Z-axis
-2.0000000000
-3.0000000000
-4.0000000000
-5.0000000000
-6.0000000000
-7.0000000000
-8.0000000000
-9.0000000000
-10.0000000000
-11.0000000000
-12.0000000000
-13.0000000000
-14.0000000000
-15.0000000000
-16.0000000000
-17.0000000000
表5-5 解析結果(標準モデル,80モデル,120モデル,80-120%モデル)
Node
Minimum principal stress [Pa]
number Normal Model 80%Model 120%Model 80-120%Model
896
-0.074068
-0.115740 -0.051438
-0.068540
996
-0.082290
-0.128570 -0.057142
-0.075074
1096
-0.092082
-0.143890 -0.063952
-0.079797
1196
-0.070594
-0.110300 -0.049023
-0.058814
1296
-0.063579
-0.099350 -0.044155
-0.051008
1396
-0.059737
0.093334 -0.041482
-0.046624
1496
-0.049302
-0.077044 -0.034242
-0.037452
1596
-0.031764
-0.049633 -0.022059
-0.022597
1696
-0.018279
-0.028558 -0.012693
-0.011954
1796
-0.009888
-0.015452 -0.006868
-0.005982
1896
0.003778
0.005897
0.002621
0.004291
1996
0.014154
0.022111
0.009827
0.010978
2096
0.024130
0.037707
0.016758
0.017528
2196
0.036469
0.056987
0.025327
0.025574
2296
0.035070
0.054788
0.024350
0.024473
2396
0.025888
0.040439
0.017973
0.018059
Min imu n pr in cipa l st r ess [P a ]
0.07
0.05
0.02
0.00
-0.03
-0.05
-0.08
St a n da r d m odel
-0.10
80% m odel
-0.13
80-120% m odel
120% m odel
-0.15
896
996
1096 1196 1296 1396 1496 1596 1696 1796 1896 1996 2096 2196 2296 2396
Node n u m ber
図5-1 解析結果の応力分布
また,80%モデル,120%モデルの形状は標準モデルと相似である.今回の解析は線形
解析であることから,それらの応力推定値を標準モデルの解析結果から求めた.標準モデ
ルの各節点における最小主応力値を1/0.8倍した値を80%モデルの応力推定値,1/1.2倍し
た値を120%モデルの応力推定値として求めた(表5-6,図5-2).
-27-
表5-6 80%モデル,120%モデルの応力推定値
Node
number
896
996
1096
1196
1296
1396
1496
1596
1696
1796
1896
1996
2096
2196
2296
2396
Minimum principal stress [Pa]
Standard model
80% model
120% model
-0.074068
-0.092585
-0.061723
-0.082290
-0.102863
-0.068575
-0.092082
-0.115103
-0.076735
-0.070594
-0.088243
-0.058828
-0.063579
-0.079474
-0.052983
-0.059737
-0.074671
-0.049781
-0.049302
-0.061628
-0.041085
-0.031764
-0.039705
-0.026470
-0.018279
-0.022849
-0.015233
-0.009888
-0.012360
-0.008240
0.003778
0.004723
0.003148
0.014154
0.017693
0.011795
0.024130
0.030163
0.020108
0.036469
0.045586
0.030391
0.035070
0.043838
0.029225
0.025888
0.032360
0.021573
0.06
Minimum principal stress
0.04
0.02
0.00
-0.02
-0.04
-0.06
-0.08
Standard model
80% model
-0.10
120% model
-0.12
896
996
1096 1196 1296 1396 1496 1596 1696 1796 1896 1996 2096 2196 2296 2396
Node number
図5-2 80%モデル,120%モデルの応力推定値分布
-28-
図
5.3 考察
本プログラムには,主に以下の機能を実装できた.
● NLIST,ELISTをインポートする機能
● 節点データの拡大縮小変換機能
● 節点データをCSV形式で出力する機能
これにより個体別歯の有限要素モデル解析が可能となり,歯科矯正治療患者の多様化へ
の対応が期待できる.一方,編集している有限要素モデルの3D表示を実現するために,
Java3Dを使用したが,モデルを表示可能にはできなかった.Java3Dについては,Linux
では動いたが,Windows XPでJava SDK1.5で動かせなかった.一方,WindowsでJava
SDK1.4を使用した場合は問題なく動かせた.動かない原因はインストールした際に,
Java3DのライブラリへPATHを通し,クラスファイルの位置をCLASSPATHを設定して
いないためと考えられた.しかし,PATH,CLASSPATHの設定後に動作確認したにも関
わらず,設定前と同様に動かなかった.それは他に原因があるか,PATH,CLASSPATH
の設定方法が間違っていたと考えられる.
標準歯の有限要素モデルと,それを編集して作成した3種類のデータの合計4つの有限要
素データを解析し,得られた結果から,モデルを編集することで,応力分布が変化するこ
とが分かった.これは,歯の形状,大きさによって歯の力学的シミュレーション結果に差
が出ることを意味すると考えられる.これらのことから,個体別に有限要素モデルを作り
,解析することは有効であると判断できる.本研究では有限要素モデルを線形解析で検証
したが,実際の歯の力学的適応変形は非線形である.その場合,歯を一律に拡大縮小する
代わりに標準歯の有限要素モデルの解析結果から推定することはできないので,標準歯の
有限要素モデルから個体別歯に構築するプログラムの存在は有効であると判断できる.
今回は,自分自身が計画的にプログラムを作成できなかったため,本研究で作成した編
集プログラムに搭載する予定だった機能を全て搭載することができなかった.
そのため,満足できるプログラムを作成することが出来なかった.そこで,今後の課題
として以下の点を挙げる.
● Java3Dを利用した有限要素モデルの3D表示機能の実装
● 3D表示画面上でマウス操作による有限要素モデル編集機能の実装
以上の機能が搭載されることで,さらに完成度の高いプログラムになると期待できる.
-29-
第 6 章 結言
本研究では,個体別歯の有限要素モデルを作成し,実際の歯科矯正治療条件により近い
歯槽骨の力学的変形シミュレーションを実現することを目的として,有限要素モデル編集
プログラムを作成した.そして,作成した編集プログラムを使用して標準歯の有限要素モ
デルを編集して,編集データを解析した.
本研究の具体的成果として,作成したプログラムで以下の機能を実現した.
● 節点データを読み込むことを可能にした.
● X,Y,Z 軸方向座標変換と Z 軸正,負方向拡大縮小変換の 2 種類の拡大縮小変換機能
を作成した.
● 出力した節点データを ANSYS に読み込んで解析出来るように CSV 形式で出力する
ことを可能にした.
編集プログラムの上記機能が完成後,大きさが異なる 3 種類の編集データを作成し,作
成データを有限要素解析して,標準歯の有限要素モデルと編集して有限要素モデルによる
応力分布の違いを定量的に確認した.
その結果,以下のことが確認できた.
● 本研究で作成したプログラムを使用することで,実際の矯正治療期間,個体別歯に対
応した歯の挙動をシミュレーションできる可能性がある.
● 個体別歯の有限要素モデルを解析した結果と,標準歯の有限要素モデルを解析した結
果にあたりまえだが差異が生じた.
● 本研究で作成したプログラムの改良で,猫や犬等の歯の有限要素モデルも作成できる
可能性がある.
さらに,今後の課題として,
● 編集要素の 3 次元表示可能にすること.
● グラフィカルに値を変えられること.
が挙げられる.
-30-
本研究を通して,Java プログラミングについて,歯科矯正学分野に対する Java の活用
について学習することができた.今後もこれらのプログラムの開発がさらに発展すること
を期待する.
-31-