今回使っている各ソフトのバージョン等は以下の通りです.
- blender 2.90.1
- MATLAB R2021a
- MATLAB Partial Differential Equation Toolbox
はじめに
最近, ロゴマークを作らないといけないことがあった. しかし, 小学生のころから美術の成績の低さには自信があり, 自分で作れる気が全くしなかった. そこで, 数値計算できれいなコンター図を作ってもらおうと考え, 今回の問題に取り組んだ.
Blenderから文字の.stlファイルを作成する
まず, blenderで解析を行う文字の3D形状を出力する. 今回はアルファベットの"M"を題材として行う.
注意: 解析は閉じた形状について行うため, 1回に行えるのは1文字である.
参考にしたサイト
その後, tabキーを押して, 解析を行いたい文字を入力する. また, フォントなどもこの時に指定する.
そして, 文字の形状を.stlファイルとして出力する. (今回はこのファイルをletter-M.stlとして保存した)
MATLABにより静解析を行う
今回は以下のサイトを参考にして, 文字を構造物とした有限要素法解析を行った.
https://jp.mathworks.com/help/pde/ug/stress-concentration-in-plate-with-circular-hole.html
静解析モデルの作成と.stlファイルのインポート
まず, 以下で2D構造静解析のモデルを作成し, 文字形状のデータをインポートする.(createpde, importGeometry)
model = createpde('structural','static-planestress');
importGeometry(model,'letter-M.stl');
figure
pdegplot(model,'VertexLabel','on','EdgeLabel','on');
このコードを実行したときにエラーが出る場合は, 文字形状が閉じていない可能性がある. そのようなときは, Meshlabを用いて不具合部分のメッシュを取り除き再度.stlファイルを作成してからインポートする.
材料定数と境界条件の付加
次に, 材料特性を付加する. 今回は, ヤング率 0.2[MPa], ポアソン比 0.25とした. (structuralProperties)
structuralProperties(model,'YoungsModulus',200E3,'PoissonsRatio',0.25);
また, インポート時に作成したfigureを参照しながら, y=0の部分に境界条件x=0,y=0を付加する. (structuralBC)
structuralBC(model,'Edge',5,'XDisplacement',0,'YDisplacement',0);
structuralBC(model,'Edge',15,'XDisplacement',0,'YDisplacement',0);
そして, 真ん中にy軸負の方向に荷重を付加した. (structuralBoundaryLoad)
structuralBoundaryLoad(model,'Edge',8,'SurfaceTraction',[0;-200]);
メッシュの作成
次に, モデルからメッシュを作成した. (generateMesh)
generateMesh(model,'Hmax',0.01);
figure
pdemesh(model)
求解
これまでに作った解析モデルで有限要素法解析を実施する.
R = solve(model);
可視化
figure
pdeplot(model,'XYData',R.Stress.syy,'ColorMap','jet')
axis equal
title('Stress yy');
MATLABのいいところは, この結果を様々なカラーマップで表示できるところである. 例えば...
figure
pdeplot(model,'XYData',R.Displacement.y,'ColorMap','winter')
axis equal
title('Displacement y');
もちろん変形後形状の可視化することもできる.
おわりに
今回は, 文字を構造物とした有限要素法解析を実施して, 連続的なグラデーションを持った文字の作成を行った. もちろんこの方法は, 文字でなくても閉じた形状の.stlファイルを準備できれば応用が可能である.