幾何学プラレールを本当に走れるように3Dプリンタで作りたい。その1
カテゴリー:DIYプラレール(記事数:10)

2019.01.22

幾何学プラレールを本当に走れるように3Dプリンタで作りたい。その1

この前紹介したこれ

リンク先では市販されているレールを使い、美しいけど実際は走れない感じで組んでいますが、これ、俺が遊んでいる3Dプリンターのプラレール出力プログラムを使えば走れるように作れるかも!

リンク先の画像をよく見ると、6回右に曲がって、1回左に曲がる。を繰り返しているように見えます。プラレールの標準レール(曲がったやつ)は半径は不明ですが、8個つなぐと円形になるので、1つあたり45度、すなわち270度進んで、45度反対方向にカーブって事。実際にどうなるかパソコン上で試してみました。出力のための座標決定の計算に必要な要素としてはこんな感じ(個人的メモ)


OpenSCADは関数のスコープが謎なので、Perlで組んでシミュレーションしてみたところ


おお!!確かに同じようにつながった!!!!!ただし白い線でレールのつなぎ目を表していますが、レールを45度間隔で出力した場合ではレールのつなぎ目にレールが重なる部分がくるようで問題ありそうです。う〜ん。カスタムで分岐させつつ、レールの出力単位を変更する必要がありそうです。

使ったPerlのスクリプトは下記のような感じ。レール1つ分が終了した後の進行方向は上記の手書きの式を微分して求めています。

-----------------------------------
#!/usr/bin/perl
#
use GD;

$im = GD::Image->new(1000,1000);
$black=$im->colorAllocate(0,0,0);
$white=$im->colorAllocate(255,255,255);
$red=$im->colorAllocate(255,0,0);
$green=$im->colorAllocate(0,128,0);

$im->line(500,0,500,1000,$green);
$im->line(0,500,1000,500,$green);

@result=(0,0,0,1);
for($i=1;$i<=8;$i++){
@result=&right(@result);
@result=&right(@result);
@result=&right(@result);
@result=&right(@result);
@result=&right(@result);
@result=&right(@result);
@result=&left(@result);
}

$png = $im->png;
open (WR,'>out.png');
binmode WR;
print WR $png;
close WR;

exit;

sub right(){
($x1,$y1,$xa,$ya)=@_;
$r=100;
$xc=$x1+$ya*$r*sqrt(1/($ya*$ya+$xa*$xa));
$yc=$y1-$xa*$r*sqrt(1/($ya*$ya+$xa*$xa));

$im->filledArc(500+$x1,500+$y1,4,4,0,360,$white);
for ($t=0;$t<=45;$t=$t+0.05){
$x2=$xc+cos($t/360*3.14*2)*($x1-$xc)+sin($t/360*3.14*2)*($y1-$yc);
$y2=$yc+cos($t/360*3.14*2)*($y1-$yc)+sin($t/360*3.14*2)*(-$x1+$xc);
#bibun
$xv=-sin($t/360*3.14*2)*($x1-$xc)+cos($t/360*3.14*2)*($y1-$yc);
$yv=-sin($t/360*3.14*2)*($y1-$yc)+cos($t/360*3.14*2)*(-$x1+$xc);
$im->filledArc(500+$x2,500+$y2,1,1,0,360,$red);
};
$im->filledArc(500+$x2,500+$y2,3,3,0,360,$red);
return ($x2,$y2,$xv,$yv);
}


sub left(){
($x1,$y1,$xa,$ya)=@_;
$r=100;
$xc=$x1-$ya*$r*sqrt(1/($ya*$ya+$xa*$xa));
$yc=$y1+$xa*$r*sqrt(1/($ya*$ya+$xa*$xa));

$im->filledArc(500+$x1,500+$y1,4,4,0,360,$white);
for ($t=0;$t>=-45;$t=$t-0.05){
$x2=$xc+cos($t/360*3.14*2)*($x1-$xc)+sin($t/360*3.14*2)*($y1-$yc);
$y2=$yc+cos($t/360*3.14*2)*($y1-$yc)+sin($t/360*3.14*2)*(-$x1+$xc);
#bibun
$xv=-sin($t/360*3.14*2)*($x1-$xc)+cos($t/360*3.14*2)*($y1-$yc);
$yv=-sin($t/360*3.14*2)*($y1-$yc)+cos($t/360*3.14*2)*(-$x1+$xc);
$im->filledArc(500+$x2,500+$y2,1,1,0,360,$green);
};
return ($x2,$y2,-$xv,-$yv);
}
-----------------------------------


試しに他のつなぎ方も試してみました。

右に2回、左に1回、8回繰り返し。これだとデカい環状でつながります。


右に3回、左に1回、4回繰り返し。小さく4角形につながります。


右に3回、左に2回、8回繰り返し。これだとアホみたいにデカい環状でつながります。


右に4回、左に1回、8回繰り返し。これは結構美しい!!!!


右に4回、左に2回、4回繰り返し。変な形です(^^;


右に5回、左に1回、2回繰り返し。楕円形


右に5回、左に2回、8回繰り返し。これも結構面白い。


右に6回、左に1回、8回繰り返し。最初に紹介したやつです。これがコンパクトで一番美しいですね。


右に6回、左に2回、2回繰り返し。変な形。


右に7回、左に1回、4回繰り返し。これはちょっと「幾何学」って感じで面白いかもしれません。


右に7回、左に2回、8回繰り返し。これもかなり面白い!!!が中心部分のパーツは一体形成する必要がありそう。


これは面白いかも。実際にこの形で走れるレールをこれから出力してみようと思います。

昨晩の息子(5才)との会話
息子「パッパ〜、xxちゃんも大人になったら3Dプリンターで好きなレール作れるようになるかなー」
俺「うんうん、大人にならなくても小学生ぐらいになったら作れるよー」
息子「あと何回寝たら小学生?」
俺「1000回ぐらい」
息子「100が10個?」
俺「そお」

誰でも作れるようになるわけじゃないんだが、彼はどこまで行くんだろうか?親の影響は強力で残酷だ。可哀そうだが、リア充文系人生はもう無理なんじゃないだろうか。

そっか1歳半でプラレール与えたんだね。ちっこくてかわいー。今じゃヒドイ悪ガキなのに。

Category:DIYプラレール



■ ■ ■ コメント ■ ■ ■

いいっすね!=10

名前 ↑B

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

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


→カテゴリー:DIYプラレール(記事数:10) (コメント数)