λx. x K S K @はてな

このブログ内に記載された文章およびコードの著作権は,すべて Keisuke Nakano に帰属します.

LablGL でオロイド

KeisukeNakano2006-12-21

ここを見て思い出したのだが, 昔 lablGL でオロイドを描いて転がして遊んだことがあった. オロイドとは,「2つの直角円錐を底面で貼り合わせ,軸を通る断面(正方形になっている)を 90 度ずらしてできる立体」で 一度転がすだけで全ての面を接地させられるなどといった不思議な性質を持っている. せっかくなので当時のコードを掘り出してきて動かしてみた.

例によって,Objective Label(OLabl)で書かれた 8 年ほど前のコードなのでそのままでは動かない. 特に,LablGL ではその名の通りラベル付き引数がふんだんに使用されているため, 現在の Objective Caml で動かすには大幅な変更が必要となる. また,当時とは LablGL の実装もだいぶ異なるため,その点でも変更が必要だ. 主な変更としては,

OLabl OCaml
ラベル付き引数 let f pos:(x,y) = ... let f ~pos:(x,y) = ...
省略可能引数 let f ?:pos [< (0,0) >] = ... let f ?(pos=(0,0)) = ...
これ以外にも,全ての引数を省略可能引数にした場合の振る舞いや, 変数名の省略の仕方の違いについても考慮する必要があり, 一筋縄には行かない.

とりあえず,動くものができたので画像だけ載せておく. なお,冒頭の記事では Glut を使用していたが,ここでは LablTk とTogl を使用している.