音線や光線の反射を解析する際にRhinocerosではBounce機能がその選択肢の一つです。
http://docs.mcneel.com/rhino/5/help/ja-jp/index.htm#commands/bounce.htm
Grasshopper上では実装されていませんがBrepやCurveなどと同様にRhinocommonの中にはRay3dというクラスが存在し、その中にRayShootというメソッドがあります。
これをC#やVBで呼び出す事でBounceコマンドをGrasshopper上で利用できます。
PythonではrhinoscriptsyntaxのShootRayが同様の機能になります。
普通にコーディングすると手間も時間も掛かりますが、RayShootメソッドを利用する事で下記コード(C#)だけで線の反射計算を実行してくれます。
上図で示しているコードの変数は下記を意味します。
geo・・・必要なものは反射対象になるジオメトリ(SurfaceかBrepのみ。複数可)、
pt・・・線の基点、
vec・・・基点からの線の発射方向、
count・・・反射回数
反射対象に複数のポリサーフェスがあっても計算してくれます。が、総当たりで計算してしまう事が強いて言うとデメリットです。(細かく書きませんがコードが書ける方はその意味を理解できるかと思います。)
以下、少し余談と注意点です。meshには対応していないようですがRhinocommon内のRayShootの説明にはGeometryの入力について、
Type: System.Collections.Generic.IEnumerable<GeometryBase>
とあり、BrepではなくGeometryBaseと書かれています。GeometryBaseはmeshやCurve等のスーパークラスでもある上に、RayShootページのParameters → geometry項目の説明を見ると、
Only Surface and Brep objects are currently supported. Trims are ignored on Breps.
とあり、currentlyという言葉にmeshやcurveなどでも反射計算が行えるよう、今後の機能拡張を期待したくもなります。
尚、このツールを使う際にはこの説明の末尾に掛かれているようにTrimmed Surfaceに対応していない為、全ての面がUntrimmed Surfaceの状態で計算される事に注意してください。
より具体的な解析は専門的なソフトウェアで行うとしても、こういった方法を利用して意匠検討と共に簡易な確認を事前に行う事も時には大切な事かと思います。
コメントをするにはログインしてください。