completed cards, bread, wheels, overall layout
This commit is contained in:
commit
d9e6709b6e
28
blades.asy
Normal file
28
blades.asy
Normal file
|
@ -0,0 +1,28 @@
|
|||
import "scaling.asy" as scaling;
|
||||
|
||||
//real x = width/3;
|
||||
//real y = 2*height/6;
|
||||
|
||||
//path bread = (x,0){right}..{up}(width, height-y){up}..{left}(width-x, height){left}..{down}(0,y){down}..{right}cycle;
|
||||
|
||||
real outer_radius = height/2;
|
||||
real inner_radius = outer_radius*4/5;
|
||||
real center_radius = outer_radius/5;
|
||||
real axle_radius = center_radius/2;
|
||||
|
||||
int gaps = 6;
|
||||
real spoke_width = center_radius*0.7;
|
||||
|
||||
path spoke_part = (spoke_width/2, 0)--(spoke_width/2, outer_radius);
|
||||
|
||||
path gap = buildcycle(circle((0,0), center_radius), spoke_part, reverse(circle((0,0), inner_radius)), reflect((0,0), dir(90-180/gaps))*spoke_part);
|
||||
|
||||
//draw((-width/2,-height/2)--(width/2,-height/2)--(width/2,height/2)--(-width/2,height/2)--cycle);
|
||||
|
||||
path wheel[] = { circle((0,0), outer_radius), circle((0,0), axle_radius) };
|
||||
|
||||
for (int i = 0; i < gaps; ++i) {
|
||||
wheel = wheel^^(rotate(360*i/gaps)*gap);
|
||||
}
|
||||
|
||||
//fill(wheel, evenodd+red);
|
28
bread.asy
Normal file
28
bread.asy
Normal file
|
@ -0,0 +1,28 @@
|
|||
import "scaling.asy" as scaling;
|
||||
|
||||
//real x = width/3;
|
||||
//real y = 2*height/6;
|
||||
|
||||
//path bread = (x,0){right}..{up}(width, height-y){up}..{left}(width-x, height){left}..{down}(0,y){down}..{right}cycle;
|
||||
|
||||
real a = height*7/12;
|
||||
real b = a/2;
|
||||
real angle = 60;
|
||||
|
||||
real slash_a = a/11;
|
||||
real slash_b = b*5/8;
|
||||
real slash_angle = angle-15;
|
||||
|
||||
real slash_spacing = a*5/12;
|
||||
|
||||
pair center = (0,0);
|
||||
|
||||
path loaf = (center+a*dir(angle))..(center+b*dir(angle+90))..(center+a*dir(angle+180))..(center+b*dir(angle+270))..cycle;
|
||||
|
||||
path slash = (center+slash_b*dir(slash_angle+90))..(center+slash_a*dir(slash_angle+180))..(center+slash_b*dir(slash_angle+270))--(center+slash_b*dir(slash_angle+270))..(center+slash_a*dir(slash_angle))..(center+slash_b*dir(slash_angle+90))--cycle;
|
||||
|
||||
//draw((-width/2,-height/2)--(width/2,-height/2)--(width/2,height/2)--(-width/2,height/2)--cycle);
|
||||
|
||||
path[] bread = loaf^^slash^^(shift(slash_spacing*dir(angle))*slash)^^(shift(slash_spacing*dir(angle+180))*slash);
|
||||
|
||||
//draw(bread, evenodd+red);
|
106
cards.asy
Normal file
106
cards.asy
Normal file
|
@ -0,0 +1,106 @@
|
|||
import "scaling.asy" as scaling;
|
||||
import "puppets.asy" as puppets_suit;
|
||||
import "bread.asy" as bread_suit;
|
||||
import "chairs.asy" as chairs_suit;
|
||||
import "blades.asy" as blades_suit;
|
||||
import "wheels.asy" as wheels_suit;
|
||||
import "numerals.asy" as numerals_paths;
|
||||
|
||||
real corner_radius = width/10;
|
||||
|
||||
path corner = arc(((width/2 - corner_radius), (height/2 - corner_radius)), corner_radius, 0, 90);
|
||||
|
||||
path card = corner--reverse(reflect((0,0), (0,1))*corner)--rotate(180)*corner--reverse(reflect((0,0), (1,0))*corner)--cycle;
|
||||
|
||||
real scpx = 0.2;
|
||||
real scpy = 0.35;
|
||||
|
||||
pair placements[][] = {
|
||||
// 0
|
||||
{},
|
||||
|
||||
// 1
|
||||
{ (0,0) },
|
||||
|
||||
// 2
|
||||
{ (0,height*scpy), (0,-height*scpy) },
|
||||
|
||||
// 3
|
||||
{ (0,0), (0,height*scpy), (0,-height*scpy) },
|
||||
|
||||
// 4
|
||||
{ (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||||
|
||||
// 5
|
||||
{ (0,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||||
|
||||
// 6
|
||||
{ (width*scpx,0), (-width*scpx,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||||
|
||||
// The four face cards
|
||||
{}, {}, {}, {},
|
||||
|
||||
/* Forgot the deck doesn't have numbers past 6 lol
|
||||
// 7
|
||||
{ (0,-height*scpy/2), (width*scpx,0), (-width*scpx,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||||
|
||||
// 8
|
||||
{ (0, height*scpy/2), (0,-height*scpy/2), (width*scpx,0), (-width*scpx,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy) },
|
||||
|
||||
// 9
|
||||
{ (0,0), (width*scpx,height*scpy), (width*scpx,-height*scpy), (-width*scpx,height*scpy), (-width*scpx,-height*scpy), (width*scpx,height*scpy/3), (width*scpx,-height*scpy/3), (-width*scpx,height*scpy/3), (-width*scpx, -height*scpy/3) },
|
||||
*/
|
||||
};
|
||||
|
||||
real scale_factor = 0.15;
|
||||
real one_scale_factor = 0.3;
|
||||
|
||||
real numeral_scale_factor = 0.15;
|
||||
pair numeral_pos = (-width*0.39, height*0.37);
|
||||
real indicator_scale_factor = 0.1;
|
||||
pair indicator_pos = (-width*0.39, height*0.22);
|
||||
|
||||
int PUPPETS = 0;
|
||||
int BREAD = 1;
|
||||
int CHAIRS = 2;
|
||||
int BLADES = 3;
|
||||
int WHEELS = 4;
|
||||
int CARDS = 5;
|
||||
|
||||
path icons[][] = {
|
||||
null,
|
||||
bread,
|
||||
null,
|
||||
null,
|
||||
wheel,
|
||||
};
|
||||
|
||||
path[] recursive_card(int value, int suit, int depth=3, bool outermost=true) {
|
||||
path result[];
|
||||
if (!outermost) {
|
||||
result.push(card);
|
||||
}
|
||||
path[] suit_icon;
|
||||
if (suit == CARDS) {
|
||||
if (depth == 0) { return result; }
|
||||
suit_icon = recursive_card(value, suit, depth - 1, false);
|
||||
} else {
|
||||
suit_icon = icons[suit];
|
||||
}
|
||||
path[] indicator = shift(indicator_pos)*scale(indicator_scale_factor)*suit_icon;
|
||||
path[] numeral = shift(numeral_pos)*scale(numeral_scale_factor)*numerals[value];
|
||||
result = result^^indicator^^(rotate(180)*indicator)^^numeral^^(rotate(180)*numeral);
|
||||
|
||||
real current_scale_factor = scale_factor;
|
||||
if (value == 1) {
|
||||
current_scale_factor = one_scale_factor;
|
||||
}
|
||||
for(int i = 0; i < placements[value].length; ++i) {
|
||||
result = result^^(shift(placements[value][i])*scale(current_scale_factor)*suit_icon);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
filldraw(card, white, black);
|
||||
fill(recursive_card(2, BREAD), evenodd+red);
|
||||
|
28
chairs.asy
Normal file
28
chairs.asy
Normal file
|
@ -0,0 +1,28 @@
|
|||
import "scaling.asy" as scaling;
|
||||
|
||||
//real x = width/3;
|
||||
//real y = 2*height/6;
|
||||
|
||||
//path bread = (x,0){right}..{up}(width, height-y){up}..{left}(width-x, height){left}..{down}(0,y){down}..{right}cycle;
|
||||
|
||||
real outer_radius = height/2;
|
||||
real inner_radius = outer_radius*4/5;
|
||||
real center_radius = outer_radius/5;
|
||||
real axle_radius = center_radius/2;
|
||||
|
||||
int gaps = 6;
|
||||
real spoke_width = center_radius*0.7;
|
||||
|
||||
path spoke_part = (spoke_width/2, 0)--(spoke_width/2, outer_radius);
|
||||
|
||||
path gap = buildcycle(circle((0,0), center_radius), spoke_part, reverse(circle((0,0), inner_radius)), reflect((0,0), dir(90-180/gaps))*spoke_part);
|
||||
|
||||
//draw((-width/2,-height/2)--(width/2,-height/2)--(width/2,height/2)--(-width/2,height/2)--cycle);
|
||||
|
||||
path wheel[] = { circle((0,0), outer_radius), circle((0,0), axle_radius) };
|
||||
|
||||
for (int i = 0; i < gaps; ++i) {
|
||||
wheel = wheel^^(rotate(360*i/gaps)*gap);
|
||||
}
|
||||
|
||||
//fill(wheel, evenodd+red);
|
22
numerals.asy
Normal file
22
numerals.asy
Normal file
|
@ -0,0 +1,22 @@
|
|||
import "scaling.asy" as scaling;
|
||||
|
||||
path numerals[][] = { {} };
|
||||
|
||||
path onearc = arc((0,height*0.4), height*0.1, 0, 180);
|
||||
path[] one = { onearc--(rotate(180)*onearc)--cycle };
|
||||
numerals.push(one);
|
||||
|
||||
path[] two = { shift(width/4, 0)*one[0], shift(-width/4, 0)*one[0] };
|
||||
numerals.push(two);
|
||||
|
||||
path[] three;
|
||||
numerals.push(three);
|
||||
|
||||
path[] four;
|
||||
numerals.push(four);
|
||||
|
||||
path[] five = { (0,-height*0.3)---(width*0.45,height/2)..(width/2, height*0.45)---(height*0.1, -height*0.45)..(-height*0.1, -height*0.45)---(-width/2, height*0.45)..(-width*0.45,height/2)--cycle };
|
||||
numerals.push(five);
|
||||
|
||||
path[] six;
|
||||
numerals.push(six);
|
28
puppets.asy
Normal file
28
puppets.asy
Normal file
|
@ -0,0 +1,28 @@
|
|||
import "scaling.asy" as scaling;
|
||||
|
||||
//real x = width/3;
|
||||
//real y = 2*height/6;
|
||||
|
||||
//path bread = (x,0){right}..{up}(width, height-y){up}..{left}(width-x, height){left}..{down}(0,y){down}..{right}cycle;
|
||||
|
||||
real outer_radius = height/2;
|
||||
real inner_radius = outer_radius*4/5;
|
||||
real center_radius = outer_radius/5;
|
||||
real axle_radius = center_radius/2;
|
||||
|
||||
int gaps = 6;
|
||||
real spoke_width = center_radius*0.7;
|
||||
|
||||
path spoke_part = (spoke_width/2, 0)--(spoke_width/2, outer_radius);
|
||||
|
||||
path gap = buildcycle(circle((0,0), center_radius), spoke_part, reverse(circle((0,0), inner_radius)), reflect((0,0), dir(90-180/gaps))*spoke_part);
|
||||
|
||||
//draw((-width/2,-height/2)--(width/2,-height/2)--(width/2,height/2)--(-width/2,height/2)--cycle);
|
||||
|
||||
path wheel[] = { circle((0,0), outer_radius), circle((0,0), axle_radius) };
|
||||
|
||||
for (int i = 0; i < gaps; ++i) {
|
||||
wheel = wheel^^(rotate(360*i/gaps)*gap);
|
||||
}
|
||||
|
||||
//fill(wheel, evenodd+red);
|
2
scaling.asy
Normal file
2
scaling.asy
Normal file
|
@ -0,0 +1,2 @@
|
|||
real height = 300;
|
||||
real width = height*5/7;
|
28
swords.asy
Normal file
28
swords.asy
Normal file
|
@ -0,0 +1,28 @@
|
|||
import "scaling.asy" as scaling;
|
||||
|
||||
//real x = width/3;
|
||||
//real y = 2*height/6;
|
||||
|
||||
//path bread = (x,0){right}..{up}(width, height-y){up}..{left}(width-x, height){left}..{down}(0,y){down}..{right}cycle;
|
||||
|
||||
real outer_radius = height/2;
|
||||
real inner_radius = outer_radius*4/5;
|
||||
real center_radius = outer_radius/5;
|
||||
real axle_radius = center_radius/2;
|
||||
|
||||
int gaps = 6;
|
||||
real spoke_width = center_radius*0.7;
|
||||
|
||||
path spoke_part = (spoke_width/2, 0)--(spoke_width/2, outer_radius);
|
||||
|
||||
path gap = buildcycle(circle((0,0), center_radius), spoke_part, reverse(circle((0,0), inner_radius)), reflect((0,0), dir(90-180/gaps))*spoke_part);
|
||||
|
||||
//draw((-width/2,-height/2)--(width/2,-height/2)--(width/2,height/2)--(-width/2,height/2)--cycle);
|
||||
|
||||
path wheel[] = { circle((0,0), outer_radius), circle((0,0), axle_radius) };
|
||||
|
||||
for (int i = 0; i < gaps; ++i) {
|
||||
wheel = wheel^^(rotate(360*i/gaps)*gap);
|
||||
}
|
||||
|
||||
//fill(wheel, evenodd+red);
|
28
wheels.asy
Normal file
28
wheels.asy
Normal file
|
@ -0,0 +1,28 @@
|
|||
import "scaling.asy" as scaling;
|
||||
|
||||
//real x = width/3;
|
||||
//real y = 2*height/6;
|
||||
|
||||
//path bread = (x,0){right}..{up}(width, height-y){up}..{left}(width-x, height){left}..{down}(0,y){down}..{right}cycle;
|
||||
|
||||
real outer_radius = height/2;
|
||||
real inner_radius = outer_radius*4/5;
|
||||
real center_radius = outer_radius/5;
|
||||
real axle_radius = center_radius/2;
|
||||
|
||||
int gaps = 6;
|
||||
real spoke_width = center_radius*0.7;
|
||||
|
||||
path spoke_part = (spoke_width/2, 0)--(spoke_width/2, outer_radius);
|
||||
|
||||
path gap = buildcycle(circle((0,0), center_radius), spoke_part, reverse(circle((0,0), inner_radius)), reflect((0,0), dir(90-180/gaps))*spoke_part);
|
||||
|
||||
//draw((-width/2,-height/2)--(width/2,-height/2)--(width/2,height/2)--(-width/2,height/2)--cycle);
|
||||
|
||||
path wheel[] = { circle((0,0), outer_radius), circle((0,0), axle_radius) };
|
||||
|
||||
for (int i = 0; i < gaps; ++i) {
|
||||
wheel = wheel^^(rotate(360*i/gaps)*gap);
|
||||
}
|
||||
|
||||
//fill(wheel, evenodd+red);
|
Loading…
Reference in a new issue