#はじめに
本記事は、あるとき友人がRevitで立体トラスシェルの屋根をモデリングしていたのを見て、Grasshopperでやってみようとなったのがきっかけです。
その際に使用したRemapNumberコンポーネントの挙動があまりにもわからなかったため、一旦内部処理を考察してみました。
GHファイルをアップロードしました。実際にコードに触れながら読んでみてください。
https://drive.google.com/open?id=1ycWlJcnIkYT_OiGK9_DCXjkwYTy7jLQA
(add:20190413 15:32)
タイトル「Rhinoceros / Grasshopper Remap Numbers 内部処理の考察」を訂正し「数理的性質」です。
内部処理というとrhinocerosやgrashopper背後で動くコードなどを連想させてしまったかもしれません。
期待されてこられていた方、すみません!
#データやりとりの違い
これら3つは同じアルゴリズム(?)を採用していますが、一部データやりとりが違うため、3つの異なる形状が生成されています。
そのデータやり取りの違いが「Remap Numbers」(以下Remap)の入力の違いになります。
ぞれぞれ、RemapのValueにsinによる値を入力しているか、sin+sin(grafted)の値を入力しているか、そしてsin+sin(grafted)をflattenするかという
3パターンに分類されます。(もう1パターンがありますが、形状がパターン1と類似しているので省いています)
#単純にして考えてみる
ここから雑な手書きが入ります笑
##パターン1の処理
「Remapは、ソースの配列の値の個数と変化率をそのままに、値の大きさの範囲だけがターゲットで指定した範囲に置き換わる」といえると思います。(間違っていたらコメントしていただけると助かります!)
数学的に正しい解説ではないと思いますが、図右下に書いたような処理が行われていると思います。
##パターン2の処理
今度は、図で解釈してみました。
先ほどのパターン1で行ったように、valueのドメインと、ソースのドメインが一致していればいいのですが、
今回はboundsをflattenしたことで、これが一致していません。
その時には、図で考えたほうがわかりやすかったので書いてみました。
##パターン3の処理
図的に考えると、どうして-1000が現れるのかがわかりやすくなったと思います。
#おわりに
今回は、sinに0からπを代入していますから、0や1、2という数値がでて、図を見ても半周期の形になっているのがわかります。
単純に考えるために、サーフェスをUVそれぞれ2分割して考えましたが、性質は3分割でも10分割でも以降同じです。(add:20190411 14:51)
以上で簡単にですが、RemapNumbersの数理的性質の考察を終わりにします。
図に関しては追々きれいなものに変えていきますが、ひとまず忘れないうちに雑記的にまとめておきました。