「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



こないだOpenSCADで書いてみた、トロコイドポンプの
スクリプト。いくつかの条件下で、ポリゴンに割れ目が
生じてしまうという件。



こんな風になっちゃうやつ。理由を探ってみることに。

ロジックから考えると、特におかしなことはやって
いなくて、



この図の左下の花びら型から、右のトンガリを引いて、
それに左上のギザギザを足しているだけの、単純な
造形なので、これだけ考えれば、おかしな割れ目は
出来ないはずなんだよなと。

じゃぁ、なんで割れ目が出来ちゃうのかをあれこれ
考えてみた。


仮説として1個思い浮かぶのは、仕上がりの立体の周囲
の波型曲線上で、「変曲点」にあたる部分(凸と凹が切り
替わる点)は、中心点から見ると、曲線の接線がちょうど
中心点の方を向いてしまうという計算式になっている
なぁ、と。

それを念頭に、もし、桁落ちなんかによる計算誤差が
含まれると、隣り合うポリゴンが微妙に入れ替わって
しまって、内部的には裏返ったポリゴンが生じたり、
もしくは厚みがゼロの「妙なポリゴン」が生じたり
するのではないかな?と。

その「妙な」ポリゴンが悪さしているような気がする…。





というわけで、解決するとしたら、ロジックを少しばかり
変えないといけない気がする。

現在は、上記のように、外側に膨らむ花びら型と、内側
に膨らむギザギザ型を別々に描いて、それらを合成する
というロジックになっているんだけど、この曲線を描く
ロジックを分けずに済ませたいなと。

そのためには、現在は「epicycloid」と「hypercycloid」
を別々の関数として計算させているんだけど、これらを
統合して、角度によって内部で自動的に切り替えて、
いっぺんに描画できるようにしてやるのがいいのかな?と。


ただ、OpenSCADの関数って、C言語の関数とかと違って、
単純に「計算式」を記述する、いわゆる関数なので、
内部にif文を入れ込んだり、forループを組み込んだり
といったことが出来ないんだよな。

三項演算子は使えるので、その辺をうまく使って、きれいな
式で表せられるといいんだけどな。
三項演算子、嫌いなんだよな。




コメント ( 0 )