回転球体法
避雷針の保護範囲を計測する方法として回転球体法(JIS Z 9290‑3)があります。様々なパターンがありますが、3つの避雷針で保護される範囲はそれぞれの先端に接する半径R(レベルによる)の下側ということになります。
このような「3点A,B,Cに接する半径Rの球」をDynamoで作成してみましょう。
| 3点に接する半径Rの球を作成するには? |
幾何学的には案外単純
3点A,B,Cを通る半径Rの球体の中心点は、△ABCの外接円の中心を、面の法線方向に伸ばした線上にあります。幾何学的には割と単純な話ですがこれをDynamoで解くとなると一工夫必要です。
Dynamoの新規グラフを作成する
[管理]タブ>[ビジュアルプログラミング]パネル>[Dynamo]をクリックし[新規作成]を選択
プログラムの実行モードは[手動]に切り替えておきましょう。
Dynamoでは点が指定できない
現在のDynamoの仕様ではユーザーが指定した点を取得することはできません。そこで要素のエッジを選択してその両端のうちZの値が大きいほうを選ぶようにしてみます。以下はその部分を示すグラフです。
| 選択したエッジの両端のうちZが大きいほうを選ぶ |
ここで使用しているノードは次の通りです。
- SelectEdge : ユーザーにエッジを選択を促す
- Curve.StartPoint/EndPoint : エッジの始点と終点
- List.Create : エッジの始点と終点をリストにする
- List.MaximumItemByKey : リストのうちPoint.Zの値が最大のアイテムを返す
これを複製して3つ追加します。
| 3点を選ぶために複写 |
半径を入力
半径を入力するのですが、入力自体はm単位で、計算は基本的にmmなのでメートルからミリに変換します。1000を掛ければいいのですが、今回は単位変換ノードを使用します。
| 半径を取得 |
- Number : 半径をユーザーが入力
- Convert By Unit : メートルをミリメートルに変換
3点を通り半径Rの球体の中心点を求める
幾何学的には簡単、と申し上げましたがDynamoのノードだけでこれを行うのはなかなか大変です。そこでPythonスクリプトを使って求めることにします。
まず、Puthon Scriptノードを追加し+ボタンをおして、入力端子をIN[0]~[3]まで作成します。
次にノードを右クリックして[編集]を選択してエディタを開きます。そして以下を張り付けてください。

