2018.03.01
作りたい形を指定するだけでプラレールのレールの3Dプリントデータを作成するOpenSCADスクリプト
子育てとはこんなにも苦労が多いのか、息子(4歳)の教育が悪かったのか、無いものは作ればよいじゃんと言うようになってしまってパパ大変ですw。
使えない無茶なレールもこの通りw。こういうレールも息子のオモチャ箱に放り込むことで教育になるかもw
まずは手持ちのレールを物差しで測ってサイズを調べます。手書きで失礼、最近雑記帳がソニーのデジタルペーパーDPT-RP1なんです。
レールの軌跡はt[0~1]で定義するとします。レール中央の部分(body)と飛び出た凸構造部分(out)、凹部分(in)部分の3つに分けます。
t=t1における座標を(x1, y1)とする。この時の進行方向のベクトル、その時の垂直方向のベクトルを一般化。この式を用いて(x1, y1)から垂直方向にD離れた場所の座標(XA,YA)を一般式化、シンプルな式として表せるね。
同様に進行方向にD離れた座標(XB,YB)も簡単な式で表せる。
上記式でスクリプトを組んでいきます。
下記が全スクリプトです。OpenSCADにコピペしたら動きます。$fn=10ってのは3Dモデルをレンダリングする時の解像度を表しています。気にしなくて良し。
-----------------------------------------------------
$fn=10;
function t2xy(temp)=[(30+100*temp)*sin(temp*720),(30+100*temp)*cos(temp*720)];
// sub-routin
function XY(angle,distance)=[Sign(angle[0])*sqrt(pow(distance,2)/(1+pow(angle[1]/angle[0],2))),
Sign(angle[1])*abs(angle[1]/angle[0])*sqrt(pow(distance,2)/(1+pow(angle[1]/angle[0],2)))];
function Sign(temp)=temp/abs(temp);
pitch=0.02;
// body
for (t=[0:pitch:1]){
Dir1=t2xy(t+pitch)-t2xy(t);
Ver1=[-Dir1[1],Dir1[0]];
Dir2=t2xy(t+pitch*2)-t2xy(t+pitch);
Ver2=[-Dir2[1],Dir2[0]];
linear_extrude(height = 1.5,center=true){
polygon(points=[t2xy(t)+XY(Ver1,19),t2xy(t)-XY(Ver1,19),t2xy(t+pitch)-XY(Ver2,19),t2xy(t+pitch)+XY(Ver2,19)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[t2xy(t)+XY(Ver1,19),t2xy(t)+XY(Ver1,17.5),t2xy(t+pitch)+XY(Ver2,17.5),t2xy(t+pitch)+XY(Ver2,19)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[t2xy(t)-XY(Ver1,19),t2xy(t)-XY(Ver1,17.5),t2xy(t+pitch)-XY(Ver2,17.5),t2xy(t+pitch)-XY(Ver2,19)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[t2xy(t)+XY(Ver1,9.5),t2xy(t)+XY(Ver1,8),t2xy(t+pitch)+XY(Ver2,8),t2xy(t+pitch)+XY(Ver2,9.5)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[t2xy(t)-XY(Ver1,9.5),t2xy(t)-XY(Ver1,8),t2xy(t+pitch)-XY(Ver2,8),t2xy(t+pitch)-XY(Ver2,9.5)]);
}
}
//start out
for(t=[0]){
Dir=t2xy(t+pitch)-t2xy(t);
Ver=[-Dir[1],Dir[0]];
//hiraban
translate([t2xy(t)[0],t2xy(t)[1],0]){
linear_extrude(height = 1.5,center=true){
polygon(points=[-XY(Ver,3),-XY(Dir,7.5)-XY(Ver,5),-XY(Dir,7.5)+XY(Ver,5),XY(Ver,3)]);
}}
translate([t2xy(t)[0],t2xy(t)[1],0]){
linear_extrude(height = 8,center=true){
polygon(points=[XY(Ver,3),XY(Dir,1.5)+XY(Ver,3),XY(Dir,1.5)+XY(Ver,8),XY(Ver,8),XY(Ver,4.5),
-XY(Dir,9)+XY(Ver,6.5),-XY(Dir,9)-XY(Ver,6.5),-XY(Ver,4.5),-XY(Ver,8),XY(Dir,1.5)-XY(Ver,8),
XY(Dir,1.5)-XY(Ver,3),-XY(Ver,3),-XY(Dir,7.5)-XY(Ver,5),-XY(Dir,7.5)+XY(Ver,5)]);
}}
}
//start in
t=1;
Dir=t2xy(t+pitch)-t2xy(t);
Ver=[-Dir[1],Dir[0]];
translate([t2xy(t)[0],t2xy(t)[1],0]){
linear_extrude(height = 8,center=true){
polygon(points=[-XY(Ver,8),XY(Dir,9)-XY(Ver,4.5),XY(Dir,9)-XY(Ver,9.5),-XY(Dir,1.5)-XY(Ver,9.5),
-XY(Dir,1.5)+XY(Ver,9.5),XY(Dir,9)+XY(Ver,9.5),XY(Dir,9)+XY(Ver,4.5),XY(Ver,8)]);
}
linear_extrude(height = 1.5,center=true){
polygon(points=[XY(Ver,11),XY(Dir,9)+XY(Ver,11),XY(Dir,9)+XY(Ver,17.5),XY(Ver,17.5)]);
}
linear_extrude(height = 1.5,center=true){
polygon(points=[-XY(Ver,11),XY(Dir,9)-XY(Ver,11),XY(Dir,9)-XY(Ver,17.5),-XY(Ver,17.5)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[XY(Dir,9)+XY(Ver,17.5),XY(Dir,9)+XY(Ver,19),XY(Ver,19),XY(Ver,17.5)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[XY(Dir,9)-XY(Ver,17.5),XY(Dir,9)-XY(Ver,19),-XY(Ver,19),-XY(Ver,17.5)]);
}}
-----------------------------------------------------
スクリプトが出来てしまったので、今後は2行目の
function t2xy(temp)=[(30+100*temp)*sin(temp*720),(30+100*temp)*cos(temp*720)];
を変更すれば色々な形のレールを出力します。関数t2xyが、今回のぐるぐるまわるレールの軌跡を示す関数です。tが0~1まで動く時に720度回転して、それぞれのx,yの値を返します。
関数XYは距離と傾きのベクトルを与えるとその座標を返します。関数Signは数値がプラスかマイナスかを返します。pitchはbody部分をどれぐらいに分割して出力するかを示します。
まずはbody部分。

out部分。

in部分。

よ~し、ふざけたレールを量産するぞー。

Category:#DIYプラレール
Follow @fetuin
■ ■ ■ コメント ■ ■ ■
いいっすね!=107
001 [03.01 15:09]とくめいー@Biglobe:螺旋にするのって難しいの? ↑(21)
002 [03.01 21:08]。@InfoWeb:車両が曲がれるサイズの割り出しも難しそう…。 ↑(23)
003 [03.02 02:14]鯵@Biglobe:早く3Dスキャナー買おうぜ。プリンターだけじゃ楽しみ半分だぞ ↑(11)
004 [03.02 12:21]exe:私は3DCADを使って仕事をしているので、プログラムでモデリングする人を見ると素直に凄いと思う。 ↑(9)
005 [03.03 05:32]鈴木:私はこちらに変なレールをいろいろ置いてあります。よろしければこちらもどうぞ。https://www.thingiverse.com/tag:plarail/ ↑(8)
本カテゴリーで直近コメントが書かれた記事
04/29 10:41:DIYカスタムプラレール売りに出しました!622261分前
03/23 01:08:お花見仕様のピンク水玉カスタム幾何学プラレール。by多色3Dプリンター。ちゃんと走るよ動画469日前
03/04 20:54:ピンクの水玉プラレールを大量製造中487日前
02/17 12:54:Bambulab A1 miniの多色出力でピンクの水玉のプラレール!504日前
→カテゴリー:#DIYプラレール(記事数:26)
本カテゴリーの最近の記事(コメント数)
2024.04.28DIYカスタムプラレール売りに出しました!11コメ
2024.03.22お花見仕様のピンク水玉カスタム幾何学プラレール。by多色3Dプリンター。ちゃんと走るよ動画38コメ
2024.03.02ピンクの水玉プラレールを大量製造中5コメ
2024.02.16Bambulab A1 miniの多色出力でピンクの水玉のプラレール!26コメ
2022.02.18俺のゴーストがこれを3Dプリンターとプラレールで再現しろと言っている8コメ
2021.04.05DIY幾何学プラレール第3弾【出力データあり】。これも美しいなぁ♪2コメ
2021.01.11DIY幾何学プラレール第2弾(メルカリに出品中)91コメ
2020.12.24幾何学DIYプラレール2020年12月最新版【3Dプリンタ用データ(stl)有り】21コメ
2020.03.05DIY幾何学プラレール3Dプリント用データ(.stl)公開(ver.2020.02.29)。完璧じゃないけど56コメ
2019.12.19DIY幾何学プラレールの外周部脱線多発ゾーンの要因分析71コメ
鬮ォ�エ陝��「�つ鬯ョ�エ陷ソ�ー�ス�サ�ス�」�ス�ス�ス�ス鬮ッ譎「�ス�カ�ス�ス�ス�ク鬯ッ�ィ�ス�セ�ス�ス�ス�」鬩搾スオ�ス�コ鬮エ驛�スイ�サ�ス�ス�ス�ス 鬩搾スオ�ス�コ�ス�ス�ス�ィ鬩搾スオ�ス�コ髣包スウ陞ゑソス�ス�ス遶擾スォ�ス�ク�ス�コ�ス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス82鬩搾スオ�ス�イ�ス縺、ツDcd鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス85鬩搾スオ�ス�イ�ス縺、ツ鬮エ螟ァ�、�イ�ス�ス�ス�ケ鬮ッ�キ�ス�サ�ス�ス�ス�ス鬩搾スオ�ス�コ鬮エ驛�スイ�サ�ス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス79鬩搾スオ�ス�イ�ス縺、ツ鬩搾スオ�ス�コ�ス�ス�ス�オ鬩搾スオ�ス�コ�ス�ス�ス�ス髫ィ�ス�ソ�ス鬩幢ス「�ス�ァ�ス�ス�ス�ス�ス�ス隶捺慣�ス�ケ�ス�ァ鬮ヲ�ョ陷サ�サ�ス�シ�ス�ス�ス�ケ�ス�ァ鬮ヲ�ョ陷サ�サ�ス�ソ�ス�ス鬩搾スオ�ス�コ驕カ荳橸ス、�イ�ス�ス�ス�ス(鬩幢ス「�ス�ァ�ス�ス�ス�ス�ス�ス霑「證ヲ�ス�ケ�ス�ァ鬩怜遜�ス�ォ�ス�ス�ス�ス�ス�ケ隴趣ス「�ス�ス�ス�ゥ鬩幢ス「隴趣ス「�ス�ス�ス�ェ鬩幢ス「隴趣ス「�ス�ス�ス�シ)鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス102鬩搾スオ�ス�イ�ス縺、ツ鬩幢ス「�ス�ァ髯晢スイ�ス�ィ�ス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス32鬩搾スオ�ス�イ�ス縺、ツJP鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス26鬩搾スオ�ス�イ�ス縺、ツ鬩搾スオ�ス�コ�ス�ス�ス�ス驕カ莨∬アェ�ス�ケ�ス�ァ�ス�ス�ス�ス(em鬩搾スオ�ス�コ�ス�ス�ス�ァ鬩幢ス「隴取ィ費スコ繧会スク�コ鬩「謳セ�ス�ケ�ス�ァ�ス�ス�ス�オ鬩幢ス「�ス�ァ�ス�ス�ス�ケ5鬩包スカ鬯�ャャ�ス�ス�ス�ス�ソ�ス�ス�ス�ス)鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス38鬩搾スオ�ス�イ�ス縺、ツ�ス�ス隰ォ�セ�ス�ソ�ス�ス(鬩搾スオ�ス�コ�ス�ス�ス�ッ鬩搾スオ�ス�コ髯区サゑスス�・�ス�ス遶擾スォ�ス�ク�ス�コ�ス�ス�ス�ヲ鬩搾スオ�ス�コ�ス�ス�ス�ョ鬩搾スオ�ス�コ髯キ�キ�ス�カ驕カ謫セ�ス�ェ鬩搾スオ�ス�コ�ス�ス�ス�サ) TW鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス52鬩搾スオ�ス�イ�ス縺、ツumomo鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス2鬩搾スオ�ス�イ�ス縺、ツ鬩搾スオ�ス�コ�ス�ス�ス�オ鬩搾スオ�ス�コ�ス�ス�ス�ス髫ィ�ス�ソ�ス鬩幢ス「�ス�ァ�ス�ス�ス�ス�ス�ス隶捺慣�ス�ケ�ス�ァ�ス�ス�ス�ス(鬮」蛹�スス�ウ�ス�ス�ス�サ鬮ッ讖ク�ス�ウ�ス�ス�ス�ー) TW鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス96鬩搾スオ�ス�イ�ス縺、ツ鬩幢ス「隴主�讓滄し�コ鬩「謳セ�ス�ケ隴趣ス「�ス�ス�ス�。鬩幢ス「隴趣ス「�ス�ス�ス�シ鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス17鬩搾スオ�ス�イ�ス縺、ツ鬩搾スオ�ス�コ�ス�ス�ス�オ鬩搾スオ�ス�コ�ス�ス�ス�ス�ス�ス隶捺慣�ス�ク�ス�コ�ス�ス�ス�。鬩幢ス「�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス2鬩搾スオ�ス�イ�ス縺、ツ774(鬩包スカ髮榊��ス�サ陷サ雜」�ス�ソ�ス�ス鬯ョ�ォ隲、諛カ�ソ�ス�ス�ス�ス�ス鬩搾スオ�ス�コ�ス�ス�ス�イ鬩搾スオ�ス�コ�ス�ス�ス�ィ)鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス83鬩搾スオ�ス�イ�ス縺、ツ鬯ッ�ゥ雋企ヲエ�ア謚オ�ソ�ス郢ァ莨夲スス�ク�ス�コ鬮」莨�スッ莨夲スス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス41鬩搾スオ�ス�イ�ス縺、ツ鬩搾スオ�ス�コ髯キ�キ�ス�カ驕ッ�カ�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ス驕ッ�カ�ス�ウ鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス78鬩搾スオ�ス�イ�ス縺、ツ鬮ッ蜈キ�ス�ケ�ス�ス�ス�ソ鬮ッ�キ�ス�キ髫ー�ウ�ス�セ�ス�ス�ス�シ�ス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス28鬩搾スオ�ス�イ�ス縺、ツ鬩搾スオ�ス�コ鬮エ蝓溷繭�つ�ス�サ鬩搾スオ�ス�コ鬮エ蝓溷繭�つ�ス�サ鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス30鬩搾スオ�ス�イ�ス縺、ツF鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス52鬩搾スオ�ス�イ�ス縺、ツ鬩搾スオ�ス�コ�ス�ス�ス�ス�ス�ス�ス�ス(鬮ョ蜿・�・�ス�ス�ソ�ス�ス髯晢スキ�ス�サ鬯ョ�」隰ウ�セ�ス�ス�ス�ヲ鬯ョ�」鬲�シ夲スス�ス�ス�カ鬮」蛹�スス�オ�ス�ス�ス�ス�ス�ス�ス�ス鬩搾スオ�ス�コ�ス�ス�ス�カ鬩幢ス「�ス�ァ�ス�ス�ス�ス)鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス70鬩搾スオ�ス�イ�ス縺、ツ鬩搾スオ�ス�コ�ス�ス�ス�ェ鬩搾スオ�ス�コ�ス�ス�ス�ェ鬩搾スオ�ス�コ髯キ莨夲スス�ア�ス�ス�ス�ス�ス�ク�ス�コ�ス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス73鬩搾スオ�ス�イ�ス縺、ツ鬮」雋サ�ソ�ス�ス�ス�ス�ャ鬩幢ス「隴趣ソス�コ�「�ス雜」�ス�ヲ3B(鬮ォ�イ�ス�「髣包スウ隶灘・�スソ�ス鬩搾スオ�ス�コ�ス�ス�ス�ァ鬩幢ス「�ス�ァ驛「�ァ�ス�ス隨卍鬩幢ス「隴趣ス「�ス�ソ�ス�ス驍オ�コ�ス�ス)鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス40鬩搾スオ�ス�イ�ス縺、ツknob鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス2鬩搾スオ�ス�イ�ス縺、ツ鬮ッ�キ�ス�キ髫カ譛ア螳ヲ髢ケ螟占セィ�ス�サ鬩墓得�ス�ゥ髫エ蟷「�ス�ェ鬯ョ�ォ陋幢ソス�ス�ス�ス�ソ鬮」雋サ�ソ�ス�ス�ス�ス�コ TW鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス25鬩搾スオ�ス�イ�ス縺、ツ鬯ィ�セ陷茨スキ�ス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス53鬩搾スオ�ス�イ�ス縺、ツ鬩幢ス「隴趣ソス�コ�「驍オ�コ�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス346鬩搾スオ�ス�イ�ス縺、ツ鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス45鬩搾スオ�ス�イ�ス縺、ツ10鬮ッ譎「�ス�キ�ス�ス�ス�エ鬯ッ�ゥ陋ケ�ス�ス�ス�ス�ク鬮ォ�ー�ス�ス�ス�ソ�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス48鬩搾スオ�ス�イ�ス縺、ツ�ス�ス隰ォ�セ�ス�ソ�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス105鬩搾スオ�ス�イ�ス縺、ツorz鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス38鬩搾スオ�ス�イ�ス縺、ツ鬯ョ�ォ�ス�ー�ス�ス�ス�ス鬮ォ�ィ陋幢ソス�ス�ソ�ス�ス80鬩搾スオ�ス�イ�ス縺、ツ |