今まで三角形パッチをうなげた面を折らずに張って曲面にすることを考えていたが、設計思想を根本から変更。TGIFでスプライン曲線を書いて何点か座標を拾い、いくつかの稜線を自作コード内部でもスプラインとして扱うことにした。初めは任意の二つのスプラインを直線でつなげばOKかと思っていたが、よく考えたら線でつないだ両端で面の法線ベクトルが同じ方向になってないと紙で作れない。たとえばリボンの両端をひねって回転させたような面は途中に折り目を入れれば出来るがなめらかにねじることは出来ない。
数学的には可展面、Developable Surface というらしい。
法線が一致というのは拘束条件が二つあるので、一方の点を動かすだけでは条件に合う点があるとは限らない。とりあえず見つけた可能な条件は:
- 平行な二つの面にある別々のスプラインで曲線の傾きが端で一致している場合
- 同じスプラインを根元でつなげて一方を回転させてリンゴの8つ切りをつくるような場合。
[
前者の場合、一方の曲線を横軸で等分割し、各点で傾きを計算して、もう一方の曲線で同じ傾きを持つ点をニュートン法で見つけて結ぶ。変曲点があるとちょっと厄介。
もっといろいろ可能な条件を見つけてみよう。
とりあえず実験として手持ちの条件でできそうなデフォルメしたB2爆撃機を考えてみた。
赤い線にスプラインを置いてそのあいだをつなぐ。