作りたい形を指定するだけでプラレールのレールの3Dプリントデータを作成するOpenSCADスクリプト
カテゴリー:#DIYプラレール(記事数:26)

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プラレール



■ ■ ■ コメント ■ ■ ■

いいっすね!=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)

名前 ↑B

コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数:2197

本カテゴリーで直近コメントが書かれた記事
04/29 10:41:DIYカスタムプラレール売りに出しました!485179分前
03/23 01:08:お花見仕様のピンク水玉カスタム幾何学プラレール。by多色3Dプリンター。ちゃんと走るよ動画374日前
03/04 20:54:ピンクの水玉プラレールを大量製造中392日前
02/17 12:54:Bambulab A1 miniの多色出力でピンクの水玉のプラレール!408日前


→カテゴリー:#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コメ

最近の常連さん
orz★38 白★53 らむ★32 トクメー★17 ななしさそ★72 F★52 ふぇちゅいん(年度末まったり) TW★95 ω★105 umomo★2 特命さん★79 JP★26 ポコ★346 ふぇいちゅん★2 うにゃ(emでネクサス5→�)★38 Dcd★83 すきやき★77 酔もぐら★41 ふぇちゅいんさんふぁん(ゆるりゆラリー)★101 うぃ(滅茶苦茶久しぶり)★70 さてさて★30 とくめい★82 τ(はじめてのすまほ) TW★52 名古屋関西人 TW★25 ☆★45 knob★2 774(←半角のひと)★83 匿名?★28 謎★80 京ポン3B(意地でもエッジ)★40 10年選手★48