Initial release
This commit is contained in:
parent
910450e249
commit
851d30f036
5 changed files with 149 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.*.swp
|
44
black_stone.scad
Normal file
44
black_stone.scad
Normal file
|
@ -0,0 +1,44 @@
|
|||
include <params.scad>
|
||||
use <white_stone.scad>
|
||||
|
||||
module bstone() {
|
||||
difference() {
|
||||
wstone();
|
||||
rotate([90, 0, 0]) linear_extrude(center=true, height=$stone_radius*2) {
|
||||
polygon([
|
||||
[-$stone_radius/7, 0],
|
||||
[$stone_radius/7, 0],
|
||||
[0, $stone_height*1.5/5]
|
||||
]);
|
||||
polygon([
|
||||
[-$stone_radius*4/7, 0],
|
||||
[-$stone_radius*2/7, 0],
|
||||
[-$stone_radius*3/7, $stone_height*1.5/5]
|
||||
]);
|
||||
polygon([
|
||||
[$stone_radius*4/7, 0],
|
||||
[$stone_radius*2/7, 0],
|
||||
[$stone_radius*3/7, $stone_height*1.5/5]
|
||||
]);
|
||||
}
|
||||
rotate([90, 0, 90]) linear_extrude(center=true, height=$stone_radius*2) {
|
||||
polygon([
|
||||
[-$stone_radius/7, $stone_height],
|
||||
[$stone_radius/7, $stone_height],
|
||||
[0, $stone_height*3.5/5]
|
||||
]);
|
||||
polygon([
|
||||
[-$stone_radius*4/7, $stone_height],
|
||||
[-$stone_radius*2/7, $stone_height],
|
||||
[-$stone_radius*3/7, $stone_height*3.5/5]
|
||||
]);
|
||||
polygon([
|
||||
[$stone_radius*4/7, $stone_height],
|
||||
[$stone_radius*2/7, $stone_height],
|
||||
[$stone_radius*3/7, $stone_height*3.5/5]
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bstone();
|
61
goban.scad
Normal file
61
goban.scad
Normal file
|
@ -0,0 +1,61 @@
|
|||
include <params.scad>
|
||||
|
||||
module goban() {
|
||||
$goban_width = $cell_width*($goban_size-1) +
|
||||
$goban_size*$line_width +
|
||||
$goban_padding*2;
|
||||
|
||||
$goban_length = $cell_length*($goban_size-1) +
|
||||
$goban_size*$line_width +
|
||||
$goban_padding*2;
|
||||
|
||||
difference() {
|
||||
cube([$goban_width, $goban_length, $goban_height]);
|
||||
for(n=[0:$goban_size-1]) {
|
||||
translate([
|
||||
$goban_padding,
|
||||
$goban_padding + n*($cell_length+$line_width),
|
||||
$goban_height - $line_depth])
|
||||
cube([
|
||||
$goban_size*($line_width+$cell_width)-$cell_length,
|
||||
$line_width,
|
||||
$line_depth+1
|
||||
]);
|
||||
translate([
|
||||
$goban_padding + n*($cell_width+$line_width),
|
||||
$goban_padding,
|
||||
$goban_height - $line_depth])
|
||||
cube([
|
||||
$line_width,
|
||||
$goban_size*($line_width+$cell_length)-$cell_length,
|
||||
$line_depth+1
|
||||
]);
|
||||
for(y=[0:$goban_size-1]) {
|
||||
translate([
|
||||
$goban_padding + n*($cell_width+$line_width),
|
||||
$goban_padding + y*($cell_length+$line_width),
|
||||
-1
|
||||
]) union() {
|
||||
translate([0, 0, 1 + $goban_height - $stone_height*0.60])
|
||||
cylinder(
|
||||
h=$stone_height*0.60+1,
|
||||
r=$stone_radius+$stone_clearance,
|
||||
$fn=200);
|
||||
if(search(n+1, $hoshi_pos) && search(y+1, $hoshi_pos)) {
|
||||
cylinder(
|
||||
h=$goban_height+1,
|
||||
r=$hoshi_radius,
|
||||
$fn=200);
|
||||
} else {
|
||||
cylinder(
|
||||
h=$goban_height+1,
|
||||
r=$goban_hole_radius,
|
||||
$fn=200);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
goban();
|
13
params.scad
Normal file
13
params.scad
Normal file
|
@ -0,0 +1,13 @@
|
|||
$stone_height = 10;
|
||||
$stone_radius = 10;
|
||||
$stone_clearance = 0.75;
|
||||
$hoshi_radius = 3;
|
||||
$goban_hole_radius = 1;
|
||||
$goban_height = 18;
|
||||
$line_depth = 2;
|
||||
$cell_width = 22;
|
||||
$cell_length = 23.7;
|
||||
$goban_padding = 25;
|
||||
$line_width = 1;
|
||||
$goban_size = 19;
|
||||
$hoshi_pos = [4, 10, 16]; // [4, 10, 16] for 19x19, [4, 7, 10] for 13x13
|
30
white_stone.scad
Normal file
30
white_stone.scad
Normal file
|
@ -0,0 +1,30 @@
|
|||
include <params.scad>
|
||||
|
||||
module wstone() {
|
||||
union() {
|
||||
x1 = $stone_radius;
|
||||
y1 = $stone_height*2/5;
|
||||
x2 = 0;
|
||||
y2 = 0;
|
||||
x3 = -$stone_radius;
|
||||
y3 = $stone_height*2/5;
|
||||
xc = ((pow(x3, 2)-pow(x2, 2)+pow(y3, 2)-pow(y2, 2))/(2*(y3-y2))-(pow(x2, 2)-pow(x1, 2)+pow(y2, 2)-pow(y1, 2))/(2*(y2-y1)))/((x3-x2)/(y3-y2)-(x2-x1)/(y2-y1));
|
||||
yc = -(x2-x1)/(y2-y1)*xc+(pow(x2, 2)-pow(x1, 2)+pow(y2, 2)-pow(y1, 2))/(2*(y2-y1));
|
||||
r = sqrt(pow(x1-xc, 2)+pow(y1-yc, 2));
|
||||
|
||||
difference() {
|
||||
translate([0, 0, r]) sphere(r=r, $fn=200);
|
||||
translate([-r-1, -r-1, $stone_height*2/5])
|
||||
cube([r*2+2, r*2+2, r*2+2]);
|
||||
}
|
||||
translate([0, 0, $stone_height*2/5])
|
||||
cylinder(h=2, r=$stone_radius, $fn=200);
|
||||
translate([0, 0, $stone_height*3/5]) difference() {
|
||||
translate([0, 0, -r+$stone_height*2/5]) sphere(r=r, $fn=200);
|
||||
translate([-r-1, -r-1, -r*2-2])
|
||||
cube([r*2+2, r*2+2, r*2+2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wstone();
|
Loading…
Reference in a new issue