OpenSCAD で『けん玉』作ってみたの2回目です。
前回は『たま』作りました。
今回は、『とって』作ってみます。
OpenSCAD を使い始めて、最初のころに書いたプログラムです。
OpenSCAD で何か作るときのコツは、まずは作ろうとする物の形状をよく考える(観察する)こと。
今回の『とって」の形状は、(いきなり完成した画像ですけど)
こんな形状をしています。
どうやら、高さが高い低いとか、細いとか太いとかはありますけれども、いくつかの円筒を組み合わせればできそうな感じ。
後は先端部分を丸くして、この画像だと見えないけれど、底の部分は小さなお皿状にしてたまを乗せられるようにする事が必要です。
最初に伝えておきますが、プログラムはいろいろな書き方があるし、この方法が良いとは限らないわけで、別の方法もあるよということなのですね。
アマチュアのレベルであれば、今や個人の PC を所有している人も沢山いると思うし、多少の処理速度の違いだとか、会社だとよくあるのがここはこういう書き方に統一する!なんてこともあるので、そんなときには素直に従った方が良いかもしれないけれど、よほどの事がない限り、どう書いたってかまわないと思うのです。
確かに太古の昔は、おっきなコンピュータに端末を沢山ぶら下げて、1台のコンピュータを共同で使っていたわけで、これをタイムシェア(今は有料の駐車場みたいな呼び方だね)というのだけど、そんなときにはプログラムの処理速度なんてのがすごく重要となったのです。
だって、早く処理すればそれだけコンピュータの負荷が少なくなって、CPU タイム(CPU をどれだけっかったか)で課金されるから、死活問題なのでした。
今はそんなことないので、気にしなくても良いとは思うけれど、書き方の違いによってその処理速度が変わるのは確かなのですよ。
横道にそれたけれど、とりあえず円筒を重ねて『とって』を作ったのが、下記のソースコード。
$fn=360; difference(){ translate([0,0,0]){ cylinder(h=10,r1=14,r2=15.5); } translate([0,0,-26.6]){ sphere(r=30); } } translate([0,0,10]){ cylinder(h=31,r1=14,r2=13.3); } translate([0,0,41]){ cylinder(h=5.2,r1=15.5,r2=15.5); } translate([0,0,46.2]){ cylinder(h=59,r1=13.3,r2=5.5); } translate([0,0,105.2]){ cylinder(h=60,r1=5.5,r2=5.5); } translate([0,0,165.2]){ sphere(r=5.5); }
前回説明した $fn は、最初はコメントアウトしておいてもよい。
後は、素直に『とって」の下から円筒を積み上げているけれど、
最初の円筒台形の底部分は半径 30mm の sphere で底面をお皿状に difference しています。
後は寸法の通りに、太かったり細かったり厚かったり薄かったりな円筒を移動(translate)しながら積み上げていって、最後に剣先部分の丸いたまを sphere で乗っけてるという感じですね。
このソースコードをコピペして OpenSCAD の左のウインドウに張り付けてコンパイルすると、右側のウインドウに、こんな感じで『とって』が表示されるはずです。
これでよいと思うけれど、冒頭でプログラムの書き方はたくさんあるよと書いたので、Take 2 ってことで、違う方法で作ってみる。
いつもの通りいきなりソースコード出すけれど、これにも実は意味があって、一つ一つのコマンドを覚える必要なんてないと思うんだよね。
使わないコマンドもあるんだから、使うコマンドはタイプしなけりゃわからない訳だし、その時に覚えりゃいいのよ。学校のテストじゃないんだからさ。
ってことでソースコード。
$fn=360; difference(){ rotate_extrude (angle = 360){ polygon(points=[[0,0],[0,167.95],[2.5,167.95],[5.5,165.2],[5.5,105.2],[13.3,46.2],[15.5,46.2],[15.5,41],[13.3,41],[14,10],[15.5,10,],[14,0]]); } translate([0,0,-26.6]){ sphere(r=30); } }
あはは。こっちの方がぜんぜん短いね。
まだ説明していないコマンドが出てきているので、ざっくりと説明すると、
順不同だけど、
polygon ってコマンドを使っている。
これは OpenScad の中で2次元図形を作る際に使われるコマンド。
他には、四角や丸、テキストなんてコマンドが用意されている。
2次元だから、X / Y 平面上で形を作るのだけれど、ここでプロットした平面図形を立体にするコマンドが、rotate_extrude ってコマンドなのです。
簡単に言うと平面図形を縦にして Z 軸を中心にぐるっと回して立体にしてしまうという、魔法のようなコマンド。
ただし少し2次元図形を描くときに注意が必要で、X 軸上で 90°回転してから Z軸上に引き起こされ、指定した回転を行い立体を形成するという点。
だから2次元図形を描くときに、その軸ってものを考えておく必要がある。
このソースコードを OpenSCAD で実行すると、
こんな感じで、(ほぼ)最初のソースコードと同じ結果を得ることができる。
違う部分は先端部分で、気になるようなら、rotate_extrude した後で、sphere で小さな球を乗っけてあげればよいと思う。
ちなみにちょっと間抜けに見えるけど、rotate_extrude と sphere(3次元になる前だから)をコメントアウトして実行するとこんな感じ。
これが polygon で書いた、2次元の図形。
これを90度回して Z 軸上に立てて 360°回すと、『とって』ができる。
でもね。
これソースコードは短いけれど、処理速度はというと、最初のソースの方が早いみたい。
多分これは OpenSCAD の rotate_extrude の処理速度の問題だと思うのだけれど、まぁ個人の範囲ならどっちでもって感じ。
けれども polygon と rotate_extrude の組み合わせは何かと使えるので、便利だよね。
左右対称の丸い(実はだけじゃにようにもできる)物体なら半分書いてぐるっと回せができるもの。
こうやってとにかく使って覚えていけばよいのですよ。
エラーなんてたくさん出しても自分の PC ならだれにも怒られないでしょ。
Windows 版の OpenSCAD には備わっていないのだけれど、他の開発ツールや Android で動く OpenSCAD のアプリなどでは、OpenSCAD で用意されたコマンドや関数を入力すると、ちゃんと入力補助してくれて、引数などの指定の仕方を表示してくれるんだよ~というのもあんまり覚える必要なしと思う理由の一つなんだな。これは便利。最近の開発環境はほとんどがこうなっているね。
使ってれば覚えるものです。
3回の連載で「けん玉」が完成します。
OpenSCAD で『けん玉』作ってみた – 『たま』編(初心者向けのチュートリアルに使ってね)
OpenSCAD で『けん玉』作ってみた – 『とって』編(初心者向けのチュートリアルに使ってね)- この記事
OpenSCAD で『けん玉』作ってみた – 『さら』編(初心者向けのチュートリアルに使ってね)
記事がアップされ次第、それぞれにリンクを張ります。
お楽しみに~
電子機器が大好きです。
プログラムを書くのをお仕事としていたこともあるので、両方できる PIC や Arduino を使って、いろいろな(役にあんまり立たない)ものを作っています。
実は UNIX 関連のお仕事も長かったので、Raspberry Pi もお手の物なのですけれど、これから触る機会が多くなるのかなぁ。
ボチボチ行きますが、お付き合いください。
若いころの写真なので、現時点では、まだ髪の毛は黒くてありますが、お髭は真っ白になりました。
愛車の国鉄特急カラーのカスタムしたリトルカブで、時々、秋月電子通商の八潮店に出没します。