Category Archives: ICM

geoTree – ICM final documentation

geoTree is the initial concept for a geographic family tree. I’m interested overlaying geography with family tree data to get a clearer picture of how, when, and why people migrated. I’m also interested in developing a coherent visual vocabulary for communicating such layered information. Ultimately, I hope that geoTree can serve as a tool to begin telling a rich personal history.

geoTree is built on processing and organizes information from either a web database or spreadsheet.

ICM – Final Project Proposal

A few years ago around the holidays, I was visiting my grandmother in St. Louis. 

Bored, I started flipping through some books she had laying around. One of them was filled with newspaper clippings, old (really old) photographs, hand written notes, and various birth and death certificates; the earliest of them dating back to the late 1800′s. It dawned on me, that I was looking at the only comprehensive and qualitative record of my maternal blood line. For the next several hours I sat down with my grandmother and listened to her tell me stories about my dead ancestors. 

My ahistorical world was suddenly disrupted by the wonderful realization that my personal circumstances had been (in part) shaped by the actions of others who had come long before me.

A few of the accounts told of my mostly Polish and Dutch ancestors living in squalor, and getting into bloody skirmishes with Native Americans. I realized that traditional family trees are missing a critical layer of information: geography. Geography sets the stage for political dissent, religious subscription, territorial disputes, language, skin color, and many other elements that form our personal identities. I think it’s important to confront the full spectrum of these issues of identity not just so that we can better understand our own history, but so that we might see our connections to others and empathize with the circumstances that history and geography have placed them in.

For my ICM final, I want to explore the idea of the geographic family tree through an investigation of my own family tree overlaid on a world map with an interactive timeline. This is more of an initial test of concept that I would like to develop further into the future. This interface could conceivably be rolled out to an interactive web interface and database to open up the interaction to others.

Below are some of my initial concept images for the project.

01-02 02-02 03-02 04-02 05-02

Mirror Balls

Screen Shot 2013-10-23 at 12.39.26 PM Screen Shot 2013-10-23 at 12.39.14 PM Screen Shot 2013-10-23 at 12.39.05 PM

 

The challenge this week was to use processing to manipulate pixels on an image. Building off of what I’ve been working on over the past couple weeks – collision detection and arrays – I created a hacked mirror from my computer’s webcam.

The algorithm works like this:

1. Find all the pixels on the screen
2. Draw a ball
3. If any given pixel is within 50 pixels of the ball, increase its size.

 

 

balls on balls

Screen Shot 2013-10-09 at 10.38.28 AM

 

this week I was introduced to the concept of array lists … a list of lists of sorts. the array list allowed me to create an interface to interact with … balls … lots of balls. in this exercise i experimented with ways to generate other shapes using animation of primitives.

source code is here.

Lonely Pong Modules

This week’s assignment was to modularize last week’s code.

Source below with a few modifications.

//the ball, size, and speed
float ballX;
float ballY;
float ballR = 20;
float speedX = 3;
float speedY = 3;

//paddle position
float padX;
float padY;
float padW;
float padH = 5;

//general parameters
int lives = 1;
int resets = 5;
int score = 0;
int textFade = 100;

void setup() {
size(500, 500);
smooth();
ellipseMode(RADIUS);
rectMode(RADIUS);
noStroke();
ballX = random(10, width – 10);
ballY = random(10, height – 10);
padY = height – (height*.1);
padW = width/10;
}

void draw() {

fadeBackground();
welcome();
score();
livesLeft();
boundaryLine();
drawPad();
drawBall();

if (lives > 0) {
ballBelowLine();
bouncePad();
constrainBall();
}

else {
gameoverSucka();
reset();
}
}

Fruit Loops (within loops)

I wanted to work a bit with loops within loops just for practice.

Here is the result … source code below.

Screen Shot 2013-10-02 at 11.40.32 AM

 

float cirHue = 30;
float cirMod = 2;
float hueDir = .25;

void setup() {
size(500, 500);
ellipseMode(RADIUS);
colorMode(HSB, 100);
background(0);
noStroke();
smooth();
}

void draw() {
cirFill();
drawCircles();
}

void cirFill() {
fill(cirHue, 100, 100);
cirHue += hueDir;
println(cirHue);

if (cirHue > 100 || cirHue < 0) {
hueDir = -hueDir;
}
}

void drawCircles() {

if ((mouseX < width/2) && (mouseY < height/2) || (mouseX > width/2) && (mouseY > height/2)) {
float cirRad = map(mouseX, 0, width/2, 5, 10);
for (int cirX = 0; cirX < width; cirX += cirRad) {
for (int cirY = 0; cirY < height; cirY += cirRad + map(mouseY, 0, height, 50, 10)) {
ellipse(cirMod*cirX, cirMod*cirY, cirRad, cirRad);
}
}
}
else {
float cirRad = map(mouseX, width/2, width, 50, 10);
for (int cirX = 0; cirX < width; cirX += cirRad) {
for (int cirY = 0; cirY < height; cirY += cirRad + map(mouseY, 0, height, 10, 50)) {
ellipse(cirMod*cirX, cirMod*cirY, cirRad, cirRad);
}
}
}
}

ICM – Lonely Pong

This project started as a collaboration between myself and Seiya Kobayashi. Once we had the bones of the system in place, we split up to make our own games. 

I decided to make a pong game for solo play. Some of the functionality includes:

The ball is bound by the left, right, and top of the game window
If the ball touches the left, right, or top edge of the game window, it changes direction
The ball size shrinks each time it hits the paddle
The ball speed increases each time the ball hits the paddle
The paddle size shrinks each time the ball hits it
If the paddle gets too small, the size can be reset by clicking the mouse (up to 5 times)
The score increases each time the ball hits the paddle
The game ends if the ball crosses the line over

lonelypong01

 

//the ball, size, and speed
float ballX;
float ballY;
float ballR = 20;
float speedX = 3;
float speedY = 3;

//paddle position
float padX;
float padY;
float padW;
float padH = 5;

//general parameters
int lives = 5;
int score = 0;
int textFade = 100;
int gameState = 0;

void setup() {
size(500, 500);
ballX = random(10, width – 10);
ballY = random(10, height – 10);
padY = height – (height*.1);
padW = width/10;
smooth();
ellipseMode(RADIUS);
rectMode(RADIUS);
}

void draw() {

if (lives > 0) {

gameState = 0;

println(lives);

textAlign(CENTER);
textSize(25);
fill(0, 174, 239, textFade);
text(“WELCOME TO LONELY PONG!!!”, width/2, height/2);
textFade -= .5;

fill(0, 30); //black background
rect(0, 0, width, height);

fill(236, 0, 140);

//score
textAlign(LEFT);
textSize(25);
text(score, 35, 35);

// lives left
textAlign(CENTER);
textSize(25);
text(lives, mouseX, padY + 35);

//boundary line
for (int i = 0; i < width; i += width/100) {
ellipse(i, padY, 1, 1);
}

//if the ball drops below the line, subtract one life
if (ballY > padY) {
lives = 0;
}

padX = mouseX;
noStroke();

//draw the ball
fill(0, 174, 239);
ellipse(ballX, ballY, ballR, ballR);
ballX += speedX;
ballY += speedY;

//constrain within the window
if (ballX-ballR < 0 || ballX+ballR > width) {
speedX = -speedX;
}
if (ballY-ballR < 0 || ballY+ballR > height) {
speedY = -speedY;
}

//draw the bar
fill(236, 0, 140);
rect(padX, padY, padW, padH);

//bounce on the bar
if ((ballX + ballR > padX – padW) && (ballX + ballR < padX + padW) && (ballY + ballR > padY – padH) && (ballY + ballR < padY + padH)) {
speedY = – speedY;
score += 10;
if ( ballR > 2 ) {
ballR –;
}
if (padW > 5) {
padW -= 2;

if (speedX < 10) {
if (speedX > 0 ) {
speedX += .2;
}
else if (speedX < 0) {
speedX -= .2;
}

if (speedY > 0 ) {
speedY += .2;
}
else if (speedY < 0) {
speedY -= .2;
}
}
}
}
}

else {
gameState = 1;

textAlign(CENTER);
textSize(50);
fill(0, 174, 239);
text(“GAME OVER”, width/2, height/2);
textSize(15);
text(“SCORE: ” + score, width/2, (height/2) + 25);

//Reset the game

rect(width/2, height/2 + 50, 50, 10);
fill(0);
text(“AGAIN?”, width/2, height/2 + 56 );
if ((mousePressed == true)
&& ((mouseX > width/2 -50) && (mouseX < width/2 + 50)) && ((mouseY > height/2 – 40) && (mouseY < height/2 + 60))) {
gameState = 0;
score = 0;
lives = 6;
speedX = 3;
speedY = 3;
ballX = width/2;
ballY = height/2;
}
}
}

void mouseClicked() {
ballR = 20;
lives = lives – 1;
padW = width/10;
}

ICM – Assignment 02

For this assignment, I wanted to explore simple motion with referenced vector based PShapes. I’ve always loved the look of Japanese wood block prints, and an iconic example of one is The Great Wave off Kanagawa. I decided to try and break a couple of the layers of the original image apart in illustrator to generate some vector geometry. This vector geometry could then be referenced into processing to reinterpret the image with motion. The result is below.

Screen Shot 2013-09-18 at 1.29.04 PM

Screen Shot 2013-09-18 at 2.00.25 AM

Source code (and files) here:

PShape wave01;
PShape wave02;
PShape wave03;
PShape fuji01;

float wave01Start = 0;
float wave02Start = 0;
float wave03Start = 0;
float wave04Start = 400;
float wave05Start = 700;
float wave06Start = 300;
float wave07Start = 300;

float moonMove = 200;

float r01 = random(1, 5);
float r02 = random(1, 5);

void setup() {
size(920, 506);
colorMode(HSB, 360);
smooth();
wave01 = loadShape(“wave01.svg”);
wave02 = loadShape(“wave02.svg”);
wave03 = loadShape(“wave03.svg”);
fuji01 = loadShape(“fuji01.svg”);
}

void draw() {
background (360, 200, map(mouseY, 0, height, 60, 360));

//mount fuji
shape(fuji01, 200, -50);

//bigwave in the background
shape(wave01, wave04Start, -125);
wave04Start = wave04Start + random(3, 7);
println(wave04Start);
if (wave04Start > width) {
wave04Start = wave04Start – (width+400);
}

//smaller wave in the background 01
shape(wave02, wave06Start, 1-map(mouseY, 0, height, 30, 45));
//shape(wave02, (wave02Start – wave02.width*2), map(mouseY, 0, height, 0, 15));
wave06Start = wave06Start + r02;
if (wave06Start > wave02.width) {
wave06Start = wave06Start – ((wave02.width*2));
}

//mirrored wave in the background 01
shape(wave03, (wave07Start – wave03.width), 1-map(mouseY, 0, height, 30, 45));
wave07Start = wave07Start + r02;
if (wave07Start > wave03.width*2) {
wave07Start = wave07Start – ((wave03.width*2));
}

//bigwave in the foreground 01
shape(wave01, wave01Start, -75);
wave01Start = wave01Start + random(1, 5);
if (wave01Start > width) {
wave01Start = wave01Start – (width + wave01.width-300);
}

//smaller wave in the background 02
shape(wave02, wave02Start, map(mouseY, 0, height, 0, 15));
//shape(wave02, (wave02Start – wave02.width*2), map(mouseY, 0, height, 0, 15));
wave02Start = wave02Start + r01;
if (wave02Start > wave02.width) {
wave02Start = wave02Start – (wave02.width*2);
}

 

//mirrored wave in the background 02
shape(wave03, (wave03Start – wave03.width), map(mouseY, 0, height, 0, 15));
wave03Start = wave03Start + r01;
if (wave03Start > wave03.width*2) {
wave03Start = wave03Start – (wave03.width*2);
}

//bigwave in the foreground 02
shape(wave01, wave05Start, 50);
wave05Start = wave05Start + random(1, 5);
if (wave05Start > width) {
wave05Start = wave05Start – (width + wave01.width-300);
}

fill(0, (map(mouseY, 0, height-100, 0, 250)));
rect(0, 0, width, height);

//the moon
fill(50, 115, (map(mouseY, 0, height, 300, 360)));
ellipse(moonMove, 50, 25, 25);
moonMove = moonMove + .25;
}

ICM – Week 01 – Self Portrait

Screen Shot 2013-09-11 at 1.41.15 AM

 

The process for this one was a bit messy … I think I got a little overzealous. I wanted to create a vector based drawing translation of a raster image using only a couple processing primitives, the triangle and the ellipse.

First I took a (crappy) picture of myself while I was on an airplane back to Chicago. I then used Photoshop to grayscale the image, gaussian blur it, and posterize it to reduce the amount of values in the image to 4 levels of gray.

process01

I then a used a few manual drafting methods in Rhinoceros to describe the different regions of the image. Including manual circle packing and meshing through closed poly-curves vertices. I also had to flip my coordinate system in Rhino to accommodate Processing’s default coordinate system.

ICM Capture01 ICM Capture02 ICM Capture03

Now that the shapes were in cartesian space, I needed a way to extract the circle center-points, radii, and mesh vertices. Once the data was extracted and sorted using Grasshopper, I needed a way to automate the conversion of the data into something that Processing could read. I exported the list data from Grasshopper to a CSV file, and then imported into excel. Using a simple Concatenate function, I was able to convert my data from Grasshopper into something that Processing could handle. The resulting values were simple copied and pasted into the processing editor, section by section.

=CONCATENATE(“triangle(“,A1,”, “,B1,”, “, A2,”, “, B2,”, “,A3,”, “,B3,”);”)

process02

 

Source Code below:

size(640,420);
colorMode(RGB, 100);
background(0);
strokeWeight(.25);
stroke(0,0,255);

//face01
fill(35,0,60);
ellipse(359.658091, 154.900137, 3.862398, 3.862398);
ellipse(362.025198, 154.111102, 3.862398, 3.862398);
ellipse(364.786823, 153.815213, 3.862398, 3.862398);
ellipse(364.786823, 155.491914, 3.862398, 3.862398);
ellipse(363.011493, 156.872727, 3.862398, 3.862398);
ellipse(360.644386, 155.985062, 3.862398, 3.862398);
ellipse(358.08002, 154.998767, 3.862398, 3.862398);
ellipse(101.860322, 112.993504, 3.862398, 3.862398);
ellipse(211.385854, 88.287211, 3.862398, 3.862398);
ellipse(367.799948, 139.941157, 8.09483, 8.09483);
ellipse(368.895831, 135.801155, 8.09483, 8.09483);
ellipse(371.818186, 131.539388, 8.09483, 8.09483);
ellipse(374.009951, 129.834682, 8.09483, 8.09483);
ellipse(374.49701, 133.244095, 8.09483, 8.09483);
ellipse(374.375246, 137.505862, 8.09483, 8.09483);
ellipse(373.157598, 141.767629, 8.09483, 8.09483);
ellipse(370.235244, 144.202924, 8.09483, 8.09483);
ellipse(151.114809, 120.221546, 8.09483, 8.09483);
ellipse(150.993045, 125.457431, 8.09483, 8.09483);
ellipse(149.410103, 129.353904, 8.09483, 8.09483);
ellipse(146.000689, 128.014492, 8.09483, 8.09483);
ellipse(99.33111, 102.967417, 8.09483, 8.09483);
ellipse(99.782091, 108.529512, 8.09483, 8.09483);
ellipse(96.625227, 103.268071, 8.09483, 8.09483);
ellipse(319.300361, 60.214284, 8.09483, 8.09483);
ellipse(321.766097, 59.22799, 8.09483, 8.09483);
ellipse(325.809905, 58.438954, 8.09483, 8.09483);
ellipse(328.4729, 56.466365, 8.09483, 8.09483);
ellipse(327.881124, 52.915704, 8.09483, 8.09483);
ellipse(325.908534, 50.449968, 8.09483, 8.09483);
ellipse(322.949651, 46.800678, 8.09483, 8.09483);
ellipse(311.114115, 42.165093, 8.09483, 8.09483);
ellipse(301.941575, 42.066464, 8.09483, 8.09483);
ellipse(289.317004, 40.98154, 8.09483, 8.09483);
ellipse(278.763652, 39.600727, 8.09483, 8.09483);
ellipse(265.941822, 37.924026, 8.09483, 8.09483);
ellipse(257.262429, 36.937732, 8.09483, 8.09483);
ellipse(234.905829, 36.125269, 8.09483, 8.09483);
ellipse(230.112437, 37.563287, 8.09483, 8.09483);
ellipse(227.635851, 39.560533, 8.09483, 8.09483);
ellipse(226.836953, 42.516458, 8.09483, 8.09483);
ellipse(229.313538, 44.433815, 8.09483, 8.09483);
ellipse(232.908582, 46.191392, 8.09483, 8.09483);
ellipse(240.289236, 90.25889, 8.09483, 8.09483);
ellipse(247.686446, 86.116453, 8.09483, 8.09483);
ellipse(243.839897, 90.653408, 8.09483, 8.09483);
ellipse(242.754973, 95.683511, 8.09483, 8.09483);
ellipse(342.831871, 88.661818, 8.09483, 8.09483);
ellipse(336.416458, 85.683234, 8.09483, 8.09483);
ellipse(330.68841, 83.392015, 8.09483, 8.09483);
ellipse(324.731241, 82.017284, 8.09483, 8.09483);
ellipse(317.170219, 82.017284, 8.09483, 8.09483);
ellipse(93.080843, 418.96398, 8.09483, 8.09483);
ellipse(97.740976, 405.735215, 8.09483, 8.09483);
ellipse(105.557974, 390.251547, 8.09483, 8.09483);
ellipse(110.969741, 375.66984, 8.09483, 8.09483);
ellipse(115.629874, 360.78748, 8.09483, 8.09483);
ellipse(120.740988, 344.702505, 8.09483, 8.09483);
ellipse(127.35537, 329.218837, 8.09483, 8.09483);
ellipse(132.616811, 315.388764, 8.09483, 8.09483);
ellipse(137.577598, 302.460653, 8.09483, 8.09483);
ellipse(140.133154, 287.72862, 8.09483, 8.09483);
ellipse(140.584135, 272.545606, 8.09483, 8.09483);
ellipse(141.185443, 255.708996, 8.09483, 8.09483);
ellipse(139.720644, 240.891237, 8.09483, 8.09483);
ellipse(137.293472, 223.091377, 8.09483, 8.09483);
ellipse(136.842492, 207.908363, 8.09483, 8.09483);
ellipse(136.692165, 189.418157, 8.09483, 8.09483);
ellipse(184.843337, 162.088876, 8.09483, 8.09483);
ellipse(172.540298, 160.091629, 8.09483, 8.09483);
ellipse(209.513245, 166.65363, 8.09483, 8.09483);
ellipse(199.862631, 163.127444, 8.09483, 8.09483);
ellipse(340.571098, 103.599073, 8.09483, 8.09483);
ellipse(333.889903, 106.93967, 8.09483, 8.09483);
ellipse(327.02312, 107.310847, 8.09483, 8.09483);
ellipse(320.156337, 106.93967, 8.09483, 8.09483);
ellipse(313.660732, 104.527016, 8.09483, 8.09483);
ellipse(309.948957, 96.917878, 8.09483, 8.09483);
ellipse(311.433667, 90.422273, 8.09483, 8.09483);
ellipse(316.258974, 86.710498, 8.09483, 8.09483);
ellipse(323.868112, 86.524909, 8.09483, 8.09483);
ellipse(329.806951, 87.638442, 8.09483, 8.09483);
ellipse(335.003436, 90.051095, 8.09483, 8.09483);
ellipse(340.756686, 92.649338, 8.09483, 8.09483);
ellipse(346.881115, 87.638442, 8.09483, 8.09483);
ellipse(340.571098, 83.741079, 8.09483, 8.09483);
ellipse(334.44667, 80.58607, 8.09483, 8.09483);
ellipse(329.064596, 77.987828, 8.09483, 8.09483);
ellipse(321.641047, 76.874295, 8.09483, 8.09483);
ellipse(314.774264, 76.503118, 8.09483, 8.09483);
ellipse(236.837205, 86.6096, 8.09483, 8.09483);
ellipse(234.568728, 92.330109, 8.09483, 8.09483);
ellipse(228.256442, 95.78214, 8.09483, 8.09483);
ellipse(218.590755, 95.683511, 8.09483, 8.09483);
ellipse(213.757911, 93.217774, 8.09483, 8.09483);
ellipse(208.43192, 93.020515, 8.09483, 8.09483);
ellipse(203.10593, 94.00681, 8.09483, 8.09483);
ellipse(198.273086, 92.527368, 8.09483, 8.09483);
ellipse(193.83476, 88.680819, 8.09483, 8.09483);
ellipse(193.341613, 83.650716, 8.09483, 8.09483);
ellipse(187.522475, 94.894475, 8.09483, 8.09483);
ellipse(187.719734, 89.469855, 8.09483, 8.09483);
ellipse(188.015622, 84.73564, 8.09483, 8.09483);
ellipse(190.481358, 81.382239, 8.09483, 8.09483);
ellipse(193.242983, 79.606908, 8.09483, 8.09483);
ellipse(230.115135, 74.532627, 8.09483, 8.09483);
ellipse(223.70422, 73.250444, 8.09483, 8.09483);
ellipse(218.378229, 73.84222, 8.09483, 8.09483);
ellipse(213.644015, 75.223033, 8.09483, 8.09483);
ellipse(210.685131, 73.94085, 8.09483, 8.09483);
ellipse(234.454831, 69.009377, 8.09483, 8.09483);
ellipse(228.832952, 67.924453, 8.09483, 8.09483);
ellipse(223.309702, 67.825823, 8.09483, 8.09483);
ellipse(218.476859, 67.727194, 8.09483, 8.09483);
ellipse(213.446756, 68.220341, 8.09483, 8.09483);
ellipse(209.698836, 69.601154, 8.09483, 8.09483);
ellipse(206.641323, 71.672372, 8.09483, 8.09483);
ellipse(94.438982, 50.959623, 20.953076, 20.953076);
ellipse(81.360544, 34.874648, 20.953076, 20.953076);
ellipse(72.491259, 21.194902, 20.953076, 20.953076);
ellipse(100.600785, 63.34047, 20.953076, 20.953076);
ellipse(108.792317, 77.999001, 20.953076, 20.953076);
ellipse(132.073513, 93.088665, 20.953076, 20.953076);
ellipse(123.450848, 77.567868, 20.953076, 20.953076);
ellipse(117.414982, 64.202737, 20.953076, 20.953076);
ellipse(110.085717, 48.250806, 20.953076, 20.953076);
ellipse(101.463052, 33.161142, 20.953076, 20.953076);
ellipse(91.97812, 23.67621, 20.953076, 20.953076);
ellipse(86.373387, 11.604479, 20.953076, 20.953076);
ellipse(83.845527, 4.751353, 20.953076, 20.953076);
ellipse(66.092224, 5.145871, 20.953076, 20.953076);
ellipse(139.481988, 6.590227, 20.953076, 20.953076);
ellipse(142.046354, 13.39566, 20.953076, 20.953076);
ellipse(145.104409, 22.231187, 20.953076, 20.953076);
ellipse(147.898153, 31.310854, 20.953076, 20.953076);
ellipse(150.691896, 41.787392, 20.953076, 20.953076);
ellipse(154.184075, 54.01002, 20.953076, 20.953076);
ellipse(156.977819, 64.835776, 20.953076, 20.953076);
ellipse(158.025473, 74.264661, 20.953076, 20.953076);
ellipse(150.342678, 81.947455, 20.953076, 20.953076);
ellipse(146.501281, 94.519301, 20.953076, 20.953076);
ellipse(145.104409, 103.24975, 20.953076, 20.953076);
ellipse(144.405973, 115.12316, 20.953076, 20.953076);
ellipse(143.358319, 118.964557, 20.953076, 20.953076);
ellipse(134.278653, 113.027852, 20.953076, 20.953076);
ellipse(126.945076, 107.789583, 20.953076, 20.953076);
ellipse(120.659153, 100.805224, 20.953076, 20.953076);
ellipse(113.674794, 93.471647, 20.953076, 20.953076);
ellipse(97.610769, 92.773212, 20.953076, 20.953076);
ellipse(93.070936, 86.487289, 20.953076, 20.953076);
ellipse(87.832667, 76.709186, 20.953076, 20.953076);
ellipse(81.895962, 66.581866, 20.953076, 20.953076);
ellipse(76.657692, 55.75611, 20.953076, 20.953076);
ellipse(70.022552, 44.930354, 20.953076, 20.953076);
ellipse(64.784282, 34.803033, 20.953076, 20.953076);
ellipse(58.498359, 23.628059, 20.953076, 20.953076);
ellipse(53.26009, 14.897611, 20.953076, 20.953076);
ellipse(48.371039, 5.468726, 20.953076, 20.953076);
ellipse(45.577296, -1.166415, 20.953076, 20.953076);
ellipse(209.146588, 102.905683, 20.953076, 20.953076);
ellipse(316.766037, 115.968231, 20.953076, 20.953076);
ellipse(332.346325, 117.801206, 20.953076, 20.953076);
ellipse(246.567809, 142.807308, 20.953076, 20.953076);
ellipse(259.856878, 134.55892, 20.953076, 20.953076);
ellipse(266.501413, 129.289116, 20.953076, 20.953076);
ellipse(272.229461, 136.621017, 20.953076, 20.953076);
ellipse(282.769068, 145.098527, 20.953076, 20.953076);
ellipse(299.724087, 139.828723, 20.953076, 20.953076);
ellipse(303.160916, 125.164922, 20.953076, 20.953076);
ellipse(302.931794, 111.417609, 20.953076, 20.953076);
ellipse(300.411453, 99.961514, 20.953076, 20.953076);
ellipse(297.203747, 90.338395, 20.953076, 20.953076);
ellipse(288.955359, 80.715275, 20.953076, 20.953076);
ellipse(273.37507, 85.297713, 20.953076, 20.953076);
ellipse(271.312973, 96.066442, 20.953076, 20.953076);
ellipse(268.105266, 81.860885, 20.953076, 20.953076);
ellipse(269.250876, 92.400492, 20.953076, 20.953076);
ellipse(268.56351, 102.023611, 20.953076, 20.953076);
ellipse(235.79908, 112.563218, 20.953076, 20.953076);
ellipse(234.882592, 121.957216, 20.953076, 20.953076);
ellipse(233.278739, 130.434726, 20.953076, 20.953076);
ellipse(270.882584, 182.895257, 20.953076, 20.953076);
ellipse(282.338679, 192.060133, 20.953076, 20.953076);
ellipse(280.734826, 203.516227, 20.953076, 20.953076);
ellipse(273.173803, 208.556909, 20.953076, 20.953076);
ellipse(261.94683, 208.786031, 20.953076, 20.953076);
ellipse(253.46932, 201.45413, 20.953076, 20.953076);
ellipse(187.54129, 425.053663, 20.953076, 20.953076);
ellipse(187.999534, 413.82669, 20.953076, 20.953076);
ellipse(190.519874, 400.766742, 20.953076, 20.953076);
ellipse(192.123728, 387.477672, 20.953076, 20.953076);
ellipse(194.414947, 374.875968, 20.953076, 20.953076);
ellipse(196.706165, 365.940215, 20.953076, 20.953076);
ellipse(197.851775, 357.004461, 20.953076, 20.953076);
ellipse(201.059481, 346.235732, 20.953076, 20.953076);
ellipse(204.038066, 335.925247, 20.953076, 20.953076);
ellipse(209.536991, 326.989493, 20.953076, 20.953076);
ellipse(215.265039, 319.428471, 20.953076, 20.953076);
ellipse(224.429914, 315.075155, 20.953076, 20.953076);
ellipse(238.864594, 317.595495, 20.953076, 20.953076);
ellipse(246.88386, 322.177933, 20.953076, 20.953076);
ellipse(256.277857, 323.552665, 20.953076, 20.953076);
ellipse(264.068002, 326.302127, 20.953076, 20.953076);
ellipse(273.232877, 328.593346, 20.953076, 20.953076);
ellipse(281.939509, 332.488418, 20.953076, 20.953076);
ellipse(286.980191, 336.841734, 20.953076, 20.953076);
ellipse(289.729653, 332.946662, 20.953076, 20.953076);
ellipse(294.770335, 319.886714, 20.953076, 20.953076);
ellipse(300.498382, 313.242179, 20.953076, 20.953076);
ellipse(303.476967, 307.514132, 20.953076, 20.953076);
ellipse(307.142917, 299.494866, 20.953076, 20.953076);
ellipse(310.121502, 289.871747, 20.953076, 20.953076);
ellipse(311.267111, 278.873896, 20.953076, 20.953076);
ellipse(314.933061, 267.646923, 20.953076, 20.953076);
ellipse(316.766037, 258.252926, 20.953076, 20.953076);
ellipse(317.22428, 248.629806, 20.953076, 20.953076);
ellipse(317.453402, 235.569858, 20.953076, 20.953076);
ellipse(322.264962, 223.426398, 20.953076, 20.953076);
ellipse(327.076522, 215.17801, 20.953076, 20.953076);
ellipse(329.367741, 210.137328, 20.953076, 20.953076);
ellipse(332.117203, 201.88894, 20.953076, 20.953076);
ellipse(334.408422, 191.349333, 20.953076, 20.953076);
ellipse(337.616129, 180.580604, 20.953076, 20.953076);
ellipse(340.365591, 170.728363, 20.953076, 20.953076);
ellipse(342.885932, 163.854706, 20.953076, 20.953076);
ellipse(347.010126, 153.085977, 20.953076, 20.953076);
ellipse(347.010126, 143.462858, 20.953076, 20.953076);
ellipse(347.010126, 134.527104, 20.953076, 20.953076);
ellipse(345.864517, 129.257301, 20.953076, 20.953076);
ellipse(344.948029, 122.612766, 20.953076, 20.953076);
ellipse(346.551883, 112.302281, 20.953076, 20.953076);
ellipse(348.155736, 107.261599, 20.953076, 20.953076);
ellipse(349.301345, 98.325845, 20.953076, 20.953076);
ellipse(349.759589, 102.908283, 20.953076, 20.953076);
ellipse(303.332472, 80.506771, 20.953076, 20.953076);
ellipse(295.41221, 68.626376, 20.953076, 20.953076);
ellipse(303.049606, 58.160315, 20.953076, 20.953076);
ellipse(312.384201, 54.765916, 20.953076, 20.953076);
ellipse(315.212867, 49.391452, 20.953076, 20.953076);
ellipse(306.444004, 48.542853, 20.953076, 20.953076);
ellipse(294.846476, 47.411387, 20.953076, 20.953076);
ellipse(282.683216, 46.562787, 20.953076, 20.953076);
ellipse(271.368554, 44.299855, 20.953076, 20.953076);
ellipse(259.48816, 44.016988, 20.953076, 20.953076);
ellipse(250.719297, 42.036922, 20.953076, 20.953076);
ellipse(241.384702, 41.754056, 20.953076, 20.953076);
ellipse(242.233301, 44.865588, 20.953076, 20.953076);
ellipse(251.002164, 50.240052, 20.953076, 20.953076);
ellipse(259.205293, 61.83758, 20.953076, 20.953076);
ellipse(255.245162, 73.435108, 20.953076, 20.953076);
ellipse(240.253236, 76.263773, 20.953076, 20.953076);
ellipse(243.364768, 79.941038, 20.953076, 20.953076);
ellipse(235.161638, 100.590295, 20.953076, 20.953076);
ellipse(221.584044, 103.41896, 20.953076, 20.953076);
ellipse(195.042575, 99.059134, 20.953076, 20.953076);
ellipse(192.947267, 110.234109, 20.953076, 20.953076);
ellipse(192.248831, 118.615339, 20.953076, 20.953076);
ellipse(195.741011, 124.202826, 20.953076, 20.953076);
ellipse(202.376151, 128.74266, 20.953076, 20.953076);
ellipse(212.154254, 133.282493, 20.953076, 20.953076);
ellipse(222.98001, 139.219198, 20.953076, 20.953076);
ellipse(230.662805, 143.759031, 20.953076, 20.953076);
ellipse(235.551856, 145.155903, 20.953076, 20.953076);
ellipse(249.520574, 150.394172, 20.953076, 20.953076);
ellipse(255.108061, 161.219928, 20.953076, 20.953076);
ellipse(257.552586, 170.99803, 20.953076, 20.953076);
ellipse(259.298676, 178.680825, 20.953076, 20.953076);
ellipse(245.679176, 191.601889, 20.953076, 20.953076);
ellipse(234.85342, 186.36362, 20.953076, 20.953076);
ellipse(224.027664, 178.331607, 20.953076, 20.953076);
ellipse(220.535484, 176.2363, 20.953076, 20.953076);
ellipse(202.725369, 172.74412, 20.953076, 20.953076);
ellipse(215.646433, 173.442556, 20.953076, 20.953076);
ellipse(191.899613, 166.807415, 20.953076, 20.953076);
ellipse(179.327767, 169.251941, 20.953076, 20.953076);
ellipse(164.660614, 163.664454, 20.953076, 20.953076);
ellipse(155.930165, 178.331607, 20.953076, 20.953076);
ellipse(143.707537, 181.474569, 20.953076, 20.953076);
ellipse(141.961448, 198.586248, 20.953076, 20.953076);
ellipse(143.358319, 213.951837, 20.953076, 20.953076);
ellipse(144.405973, 230.015863, 20.953076, 20.953076);
ellipse(147.898153, 247.127542, 20.953076, 20.953076);
ellipse(147.898153, 263.540785, 20.953076, 20.953076);
ellipse(146.850499, 280.652464, 20.953076, 20.953076);
ellipse(145.104409, 296.018054, 20.953076, 20.953076);
ellipse(141.61223, 310.335989, 20.953076, 20.953076);
ellipse(136.723178, 324.304707, 20.953076, 20.953076);
ellipse(130.437255, 339.321078, 20.953076, 20.953076);
ellipse(124.849768, 355.385104, 20.953076, 20.953076);
ellipse(119.611499, 370.750693, 20.953076, 20.953076);
ellipse(114.37323, 385.068629, 20.953076, 20.953076);
ellipse(108.436525, 399.735782, 20.953076, 20.953076);
ellipse(101.452166, 414.402936, 20.953076, 20.953076);
ellipse(96.213897, 428.022435, 20.953076, 20.953076);

//face0201
noStroke();
fill(74,0,126);
triangle(92.9823, -1.187134, 145.581787, -1.485992, 98.062927, 13.158173);
triangle(98.062927, 13.158173, 149.765808, 15.250183, 111.511658, 37.664734);
triangle(111.511658, 37.664734, 154.547546, 29.894348, 121.672913, 60.079285);
triangle(121.672913, 60.079285, 163.812256, 66.355347, 122.569519, 69.045105);
triangle(122.569519, 69.045105, 153.352112, 83.390411, 129.443298, 82.792694);
triangle(129.443298, 82.792694, 153.352112, 83.390411, 134.523926, 95.643677);
triangle(134.523926, 95.643677, 153.053284, 98.931152, 138.707947, 107.000397);
triangle(138.707947, 107.000397, 148.570374, 109.989014, 142.892029, 110.586731);
triangle(148.570374, 109.989014, 138.707947, 107.000397, 153.053284, 98.931152);
triangle(153.053284, 98.931152, 134.523926, 95.643677, 153.352112, 83.390411);
triangle(153.352112, 83.390411, 122.569519, 69.045105, 157.237305, 80.102936);
triangle(157.237305, 80.102936, 163.812256, 66.355347, 162.915649, 77.413208);
triangle(163.812256, 66.355347, 121.672913, 60.079285, 159.927063, 46.032837);
triangle(159.927063, 46.032837, 121.672913, 60.079285, 154.547546, 29.894348);
triangle(154.547546, 29.894348, 111.511658, 37.664734, 149.765808, 15.250183);
triangle(149.765808, 15.250183, 98.062927, 13.158173, 145.581787, -1.485992);
triangle(163.812256, 66.355347, 157.237305, 80.102936, 122.569519, 69.045105);

//face0202
triangle(253.441345, 59.084961, 269.520142, 41.241455, 248.931458, 53.986816);
triangle(248.931458, 53.986816, 249.71582, 40.457123, 244.42157, 49.084747);
triangle(244.42157, 49.084747, 244.42157, 42.417938, 242.264648, 45.555267);
triangle(244.42157, 42.417938, 244.42157, 49.084747, 249.71582, 40.457123);
triangle(249.71582, 40.457123, 248.931458, 53.986816, 269.520142, 41.241455);
triangle(269.520142, 41.241455, 264.029846, 68.889069, 278.539917, 42.025787);
triangle(278.539917, 42.025787, 295.795166, 67.712585, 288.344055, 43.398376);
triangle(288.344055, 43.398376, 303.246338, 62.810516, 303.246338, 44.770935);
triangle(303.246338, 44.770935, 310.893555, 59.477112, 309.128784, 45.751343);
triangle(309.128784, 45.751343, 310.893555, 59.477112, 314.61908, 48.888672);
triangle(314.61908, 48.888672, 310.893555, 59.477112, 315.403442, 55.359406);
triangle(310.893555, 59.477112, 303.246338, 44.770935, 303.246338, 62.810516);
triangle(303.246338, 62.810516, 288.344055, 43.398376, 295.795166, 67.712585);
triangle(295.795166, 67.712585, 278.539917, 42.025787, 286.38324, 75.163727);
triangle(286.38324, 75.163727, 266.774963, 73.595062, 278.539917, 79.673615);
triangle(278.539917, 79.673615, 267.36322, 79.477539, 273.441772, 82.810944);
triangle(273.441772, 82.810944, 267.36322, 79.477539, 270.500549, 83.007019);
triangle(267.36322, 79.477539, 278.539917, 79.673615, 266.774963, 73.595062);
triangle(266.774963, 73.595062, 286.38324, 75.163727, 264.029846, 68.889069);
triangle(264.029846, 68.889069, 269.520142, 41.241455, 257.559082, 64.379181);
triangle(257.559082, 64.379181, 269.520142, 41.241455, 253.441345, 59.084961);
triangle(264.029846, 68.889069, 286.38324, 75.163727, 278.539917, 42.025787);

//face0203
triangle(196.152161, 109.128601, 198.216919, 128.82312, 191.863831, 114.369904);
triangle(207.27002, 103.728485, 198.216919, 128.82312, 196.152161, 109.128601);
triangle(220.61145, 99.916656, 210.28772, 135.493866, 207.27002, 103.728485);
triangle(227.599854, 98.963684, 237.447083, 112.146301, 220.61145, 99.916656);
triangle(234.270569, 99.757813, 237.288269, 104.840271, 227.599854, 98.963684);
triangle(237.447083, 112.146301, 227.599854, 98.963684, 237.288269, 104.840271);
triangle(236.811829, 125.80542, 220.61145, 99.916656, 237.447083, 112.146301);
triangle(235.382385, 136.12915, 219.817322, 139.782166, 236.811829, 125.80542);
triangle(235.223511, 142.641052, 226.646912, 144.546967, 235.382385, 136.12915);
triangle(231.72937, 145.817596, 226.646912, 144.546967, 235.223511, 142.641052);
triangle(219.817322, 139.782166, 235.382385, 136.12915, 226.646912, 144.546967);
triangle(210.28772, 135.493866, 236.811829, 125.80542, 219.817322, 139.782166);
triangle(198.216919, 128.82312, 207.27002, 103.728485, 210.28772, 135.493866);
triangle(191.705017, 123.264191, 191.863831, 114.369904, 198.216919, 128.82312);
triangle(220.61145, 99.916656, 236.811829, 125.80542, 210.28772, 135.493866);

//face0204
triangle(98.5401, 411.355133, 193.445435, 427.035187, 91.185547, 426.629944);
triangle(105.894592, 395.23175, 193.445435, 427.035187, 98.5401, 411.355133);
triangle(115.229187, 369.490906, 198.683716, 393.859497, 105.894592, 395.23175);
triangle(125.978149, 338.658447, 201.128235, 369.763458, 115.229187, 369.490906);
triangle(134.464111, 318.857788, 201.128235, 369.763458, 125.978149, 338.658447);
triangle(140.687195, 299.905731, 210.906311, 337.635406, 134.464111, 318.857788);
triangle(141.818665, 269.921875, 217.890686, 322.968262, 140.687195, 299.905731);
triangle(142.384399, 243.898163, 227.668762, 318.428406, 141.818665, 269.921875);
triangle(140.970032, 224.097504, 237.427551, 181.384659, 142.384399, 243.898163);
triangle(142.950134, 211.085648, 237.427551, 181.384659, 140.970032, 224.097504);
triangle(142.101501, 191.850723, 151.436096, 180.536057, 142.950134, 211.085648);
triangle(143.798706, 182.516129, 151.436096, 180.536057, 142.101501, 191.850723);
triangle(156.52771, 173.464386, 176.045532, 165.544128, 151.436096, 180.536057);
triangle(160.204956, 162.998322, 171.236755, 161.866852, 156.52771, 173.464386);
triangle(165.013733, 159.038208, 171.236755, 161.866852, 160.204956, 162.998322);
triangle(176.045532, 165.544128, 156.52771, 173.464386, 171.236755, 161.866852);
triangle(185.097229, 162.715454, 201.220642, 165.544128, 176.045532, 165.544128);
triangle(192.451782, 160.735413, 201.220642, 165.544128, 185.097229, 162.715454);
triangle(209.423767, 167.241333, 142.950134, 211.085648, 201.220642, 165.544128);
triangle(219.889832, 167.807068, 229.224426, 175.161591, 209.423767, 167.241333);
triangle(237.427551, 181.384659, 142.950134, 211.085648, 229.224426, 175.161591);
triangle(245.064941, 184.779053, 252.136597, 192.69931, 237.427551, 181.384659);
triangle(260.339722, 202.59964, 142.384399, 243.898163, 252.136597, 192.69931);
triangle(267.977112, 206.276917, 233.256287, 318.777649, 260.339722, 202.59964);
triangle(276.180237, 202.882507, 319.513123, 237.759079, 267.977112, 206.276917);
triangle(282.969055, 199.770981, 319.513123, 237.759079, 276.180237, 202.882507);
triangle(284.949097, 197.790909, 325.100586, 228.679413, 282.969055, 199.770981);
triangle(282.40332, 193.265045, 342.21228, 178.741241, 284.949097, 197.790909);
triangle(271.371521, 189.587784, 288.060669, 143.763397, 282.40332, 193.265045);
triangle(261.754089, 184.213318, 288.060669, 143.763397, 271.371521, 189.587784);
triangle(255.531006, 178.555984, 251.85376, 170.635727, 261.754089, 184.213318);
triangle(251.005127, 159.88681, 288.060669, 143.763397, 251.85376, 170.635727);
triangle(249.59082, 149.137878, 280.989014, 136.691742, 251.005127, 159.88681);
triangle(248.459351, 142.066193, 255.248108, 131.317291, 249.59082, 149.137878);
triangle(265.99707, 124.528473, 274.200195, 129.620087, 255.248108, 131.317291);
triangle(280.989014, 136.691742, 255.248108, 131.317291, 274.200195, 129.620087);
triangle(288.060669, 143.763397, 251.005127, 159.88681, 280.989014, 136.691742);
triangle(294.566589, 141.217621, 282.40332, 193.265045, 288.060669, 143.763397);
triangle(298.243835, 133.863068, 348.148987, 164.423309, 294.566589, 141.217621);
triangle(297.395264, 121.416962, 322.570374, 110.66803, 298.243835, 133.863068);
triangle(297.960999, 112.082367, 307.012695, 104.444946, 297.395264, 121.416962);
triangle(301.638245, 105.576416, 307.012695, 104.444946, 297.960999, 112.082367);
triangle(322.570374, 110.66803, 297.395264, 121.416962, 307.012695, 104.444946);
triangle(338.410889, 118.871155, 298.243835, 133.863068, 322.570374, 110.66803);
triangle(347.745483, 125.377075, 352.554199, 135.277405, 338.410889, 118.871155);
triangle(348.148987, 164.423309, 298.243835, 133.863068, 352.554199, 135.277405);
triangle(342.21228, 178.741241, 294.566589, 141.217621, 348.148987, 164.423309);
triangle(339.069275, 195.503708, 284.949097, 197.790909, 342.21228, 178.741241);
triangle(331.037292, 216.456787, 284.949097, 197.790909, 339.069275, 195.503708);
triangle(325.100586, 228.679413, 284.949097, 197.790909, 331.037292, 216.456787);
triangle(319.513123, 237.759079, 282.969055, 199.770981, 325.100586, 228.679413);
triangle(323.005249, 248.934052, 321.957642, 261.50589, 319.513123, 237.759079);
triangle(317.068542, 280.712891, 267.977112, 206.276917, 321.957642, 261.50589);
triangle(314.274841, 299.919861, 260.146057, 328.555725, 317.068542, 280.712891);
triangle(309.385803, 311.094849, 299.607666, 321.920593, 314.274841, 299.919861);
triangle(288.781921, 329.254181, 260.146057, 328.555725, 299.607666, 321.920593);
triangle(277.257751, 333.095581, 260.146057, 328.555725, 288.781921, 329.254181);
triangle(242.335938, 324.714355, 233.256287, 318.777649, 260.146057, 328.555725);
triangle(227.668762, 318.428406, 260.339722, 202.59964, 233.256287, 318.777649);
triangle(217.890686, 322.968262, 141.818665, 269.921875, 227.668762, 318.428406);
triangle(210.906311, 337.635406, 140.687195, 299.905731, 217.890686, 322.968262);
triangle(201.128235, 369.763458, 134.464111, 318.857788, 210.906311, 337.635406);
triangle(198.683716, 393.859497, 115.229187, 369.490906, 201.128235, 369.763458);
triangle(194.842285, 419.70163, 105.894592, 395.23175, 198.683716, 393.859497);
triangle(193.445435, 427.035187, 105.894592, 395.23175, 194.842285, 419.70163);
triangle(142.384399, 243.898163, 260.339722, 202.59964, 227.668762, 318.428406);
triangle(237.427551, 181.384659, 252.136597, 192.69931, 142.384399, 243.898163);
triangle(151.436096, 180.536057, 176.045532, 165.544128, 142.950134, 211.085648);
triangle(201.220642, 165.544128, 142.950134, 211.085648, 176.045532, 165.544128);
triangle(209.423767, 167.241333, 229.224426, 175.161591, 142.950134, 211.085648);
triangle(267.977112, 206.276917, 317.068542, 280.712891, 233.256287, 318.777649);
triangle(319.513123, 237.759079, 321.957642, 261.50589, 267.977112, 206.276917);
triangle(282.40332, 193.265045, 294.566589, 141.217621, 342.21228, 178.741241);
triangle(261.754089, 184.213318, 251.85376, 170.635727, 288.060669, 143.763397);
triangle(249.59082, 149.137878, 255.248108, 131.317291, 280.989014, 136.691742);
triangle(338.410889, 118.871155, 352.554199, 135.277405, 298.243835, 133.863068);
triangle(314.274841, 299.919861, 299.607666, 321.920593, 260.146057, 328.555725);
triangle(260.146057, 328.555725, 233.256287, 318.777649, 317.068542, 280.712891);

//face0205
triangle(297.855896, 91.770599, 306.381042, 90.842133, 299.712891, 95.568939);
triangle(296.167786, 87.887878, 306.381042, 90.842133, 297.855896, 91.770599);
triangle(293.804382, 84.342773, 298.109131, 78.09668, 296.167786, 87.887878);
triangle(294.564026, 79.784821, 298.109131, 78.09668, 293.804382, 84.342773);
triangle(321.658691, 78.012268, 311.698669, 84.089569, 298.109131, 78.09668);
triangle(328.580078, 79.700409, 331.449951, 84.596008, 321.658691, 78.012268);
triangle(331.449951, 81.304138, 331.449951, 84.596008, 328.580078, 79.700409);
triangle(333.138062, 83.751953, 331.449951, 84.596008, 331.449951, 81.304138);
triangle(311.698669, 84.089569, 321.658691, 78.012268, 331.449951, 84.596008);
triangle(309.335266, 85.102448, 298.109131, 78.09668, 311.698669, 84.089569);
triangle(307.731567, 87.381439, 298.109131, 78.09668, 309.335266, 85.102448);
triangle(306.381042, 90.842133, 296.167786, 87.887878, 307.731567, 87.381439);
triangle(305.368164, 95.737732, 299.712891, 95.568939, 306.381042, 90.842133);
triangle(304.270874, 97.594696, 300.725769, 97.510284, 305.368164, 95.737732);
triangle(302.076294, 98.438782, 300.725769, 97.510284, 304.270874, 97.594696);
triangle(299.712891, 95.568939, 305.368164, 95.737732, 300.725769, 97.510284);
triangle(298.109131, 78.09668, 307.731567, 87.381439, 296.167786, 87.887878);

//face0206
triangle(350.235352, 94.820251, 348.209595, 97.521271, 353.189575, 97.43689);
triangle(353.189575, 97.43689, 348.209595, 100.391113, 353.696045, 101.404022);
triangle(353.696045, 101.404022, 348.209595, 100.391113, 351.501465, 103.851807);
triangle(351.501465, 103.851807, 348.209595, 100.391113, 348.884827, 103.767395);
triangle(348.209595, 100.391113, 353.189575, 97.43689, 348.209595, 97.521271);
//face0301
stroke(0,0,255);
strokeWeight(.25);
fill(131,0,222);
triangle(133.703735, 22.045776, 141.350952, -0.699799, 126.252563, -0.895874);
triangle(142.135254, 45.771759, 151.743286, 34.791138, 133.703735, 22.045776);
triangle(149.978516, 67.536896, 158.017944, 60.085754, 142.135254, 45.771759);
triangle(153.900269, 73.615448, 160.763062, 72.63504, 149.978516, 67.536896);
triangle(157.037598, 74.791962, 160.763062, 72.63504, 153.900269, 73.615448);
triangle(158.017944, 60.085754, 149.978516, 67.536896, 160.763062, 72.63504);
triangle(156.645386, 49.69339, 142.135254, 45.771759, 158.017944, 60.085754);
triangle(151.743286, 34.791138, 142.135254, 45.771759, 156.645386, 49.69339);
triangle(145.664795, 14.202484, 133.703735, 22.045776, 151.743286, 34.791138);
triangle(141.350952, -0.699799, 133.703735, 22.045776, 145.664795, 14.202484);

//face0302
triangle(263.321289, 48.580933, 261.574219, 58.904663, 273.168457, 48.739746);
triangle(273.168457, 48.739746, 270.150757, 63.510651, 286.351196, 50.169189);
triangle(286.351196, 50.169189, 291.910034, 63.351837, 296.198364, 50.169189);
triangle(296.198364, 50.169189, 299.057251, 58.110535, 300.010254, 53.663391);
triangle(299.057251, 58.110535, 296.198364, 50.169189, 291.910034, 63.351837);
triangle(291.910034, 63.351837, 286.351196, 50.169189, 281.268677, 68.910767);
triangle(281.268677, 68.910767, 270.150757, 63.510651, 275.86853, 69.228424);
triangle(270.150757, 63.510651, 273.168457, 48.739746, 261.574219, 58.904663);
triangle(261.574219, 58.904663, 263.321289, 48.580933, 256.809326, 54.298706);
triangle(256.809326, 54.298706, 263.321289, 48.580933, 257.126953, 50.010376);
triangle(270.150757, 63.510651, 281.268677, 68.910767, 286.351196, 50.169189);

//face0303
triangle(210.359253, 115.4823, 222.124268, 116.658813, 220.359497, 110.384186);
triangle(220.359497, 110.384186, 225.261597, 111.364594, 224.085083, 109.403748);
triangle(225.261597, 111.364594, 220.359497, 110.384186, 222.124268, 116.658813);
triangle(222.124268, 116.658813, 210.359253, 115.4823, 220.751709, 121.168701);
triangle(220.751709, 121.168701, 214.869141, 127.051178, 222.320313, 126.07077);
triangle(214.869141, 127.051178, 210.359253, 115.4823, 208.006348, 123.913849);
triangle(208.006348, 123.913849, 210.359253, 115.4823, 205.65332, 119.207886);
triangle(210.359253, 115.4823, 214.869141, 127.051178, 220.751709, 121.168701);

//face0304
triangle(96.721436, 426.746674, 188.710815, 427.957062, 104.22583, 411.253723);
triangle(104.22583, 411.253723, 189.194946, 422.631348, 113.182739, 390.677185);
triangle(113.182739, 390.677185, 191.857788, 401.812744, 122.623779, 365.743225);
triangle(122.623779, 365.743225, 200.57251, 354.123535, 140.053345, 320.716919);
triangle(140.053345, 320.716919, 209.287354, 328.463379, 145.863159, 302.076965);
triangle(145.863159, 302.076965, 219.938721, 316.601593, 146.105225, 274.480164);
triangle(146.105225, 274.480164, 219.938721, 316.601593, 149.010132, 252.693237);
triangle(149.010132, 252.693237, 231.074219, 309.339294, 151.188843, 240.589386);
triangle(151.188843, 240.589386, 150.220581, 217.592072, 147.073486, 231.390457);
triangle(150.220581, 217.592072, 178.301514, 192.173965, 159.177368, 201.130829);
triangle(159.177368, 201.130829, 178.301514, 192.173965, 168.860474, 194.352661);
triangle(178.301514, 192.173965, 229.863892, 184.185425, 181.932617, 188.542816);
triangle(181.932617, 188.542816, 201.056763, 173.291962, 182.658813, 177.165192);
triangle(182.658813, 177.165192, 195.246826, 168.450409, 185.07959, 169.660797);
triangle(185.07959, 169.660797, 195.246826, 168.450409, 188.46875, 167.482117);
triangle(195.246826, 168.450409, 182.658813, 177.165192, 201.056763, 173.291962);
triangle(201.056763, 173.291962, 181.932617, 188.542816, 207.834839, 174.50235);
triangle(207.834839, 174.50235, 223.085693, 177.649338, 216.307617, 173.291962);
triangle(223.085693, 177.649338, 207.834839, 174.50235, 229.863892, 184.185425);
triangle(229.863892, 184.185425, 243.662231, 191.689819, 236.884155, 186.848282);
triangle(243.662231, 191.689819, 229.863892, 184.185425, 253.345337, 202.099136);
triangle(267.143799, 213.960907, 296.192993, 251.72493, 272.711548, 213.718826);
triangle(272.711548, 213.718826, 287.236206, 205.972366, 278.763428, 207.908981);
triangle(287.236206, 205.972366, 311.685913, 222.433609, 293.530151, 201.614975);
triangle(293.530151, 201.614975, 316.527466, 199.67836, 294.256348, 196.047211);
triangle(294.256348, 196.047211, 314.59082, 187.816589, 291.109375, 191.9319);
triangle(291.109375, 191.9319, 292.077759, 174.018188, 285.057495, 188.542816);
triangle(285.057495, 188.542816, 283.12085, 176.196884, 276.342651, 185.395813);
triangle(276.342651, 185.395813, 277.311035, 171.113266, 266.175415, 179.343887);
triangle(266.175415, 179.343887, 273.437744, 160.703949, 257.702759, 173.534027);
triangle(257.702759, 173.534027, 273.437744, 160.703949, 255.281982, 162.156403);
triangle(255.281982, 162.156403, 273.437744, 160.703949, 257.702759, 152.473328);
triangle(257.702759, 152.473328, 271.985352, 151.262939, 260.123535, 148.842163);
triangle(260.123535, 148.842163, 272.469482, 134.801697, 256.734497, 141.82193);
triangle(256.734497, 141.82193, 272.469482, 134.801697, 259.639404, 134.559631);
triangle(259.639404, 134.559631, 272.469482, 134.801697, 265.691284, 131.412628);
triangle(272.469482, 134.801697, 273.921875, 147.631775, 276.342651, 141.337769);
triangle(273.921875, 147.631775, 260.123535, 148.842163, 271.985352, 151.262939);
triangle(271.985352, 151.262939, 257.702759, 152.473328, 273.437744, 160.703949);
triangle(273.437744, 160.703949, 266.175415, 179.343887, 277.311035, 171.113266);
triangle(277.311035, 171.113266, 276.342651, 185.395813, 283.12085, 176.196884);
triangle(283.12085, 176.196884, 285.057495, 188.542816, 292.077759, 174.018188);
triangle(292.077759, 174.018188, 317.49585, 182.975037, 296.677124, 164.093018);
triangle(296.677124, 164.093018, 301.276611, 142.548157, 293.530151, 157.799011);
triangle(293.530151, 157.799011, 293.530151, 149.56839, 290.141113, 153.683716);
triangle(293.530151, 149.56839, 293.530151, 157.799011, 301.276611, 142.548157);
triangle(301.276611, 142.548157, 330.083862, 125.602783, 304.907837, 131.654694);
triangle(304.907837, 131.654694, 330.083862, 125.602783, 306.360229, 121.245392);
triangle(306.360229, 121.245392, 313.864624, 114.467224, 307.086426, 115.435547);
triangle(313.864624, 114.467224, 306.360229, 121.245392, 330.083862, 125.602783);
triangle(330.083862, 125.602783, 343.882202, 152.473328, 341.21936, 131.89679);
triangle(341.21936, 131.89679, 343.882202, 152.473328, 344.850464, 138.190765);
triangle(343.882202, 152.473328, 301.276611, 142.548157, 337.104004, 171.597412);
triangle(337.104004, 171.597412, 320.158691, 182.975037, 333.4729, 180.554276);
triangle(333.4729, 180.554276, 324.273926, 184.427505, 330.567993, 184.669586);
triangle(330.567993, 184.669586, 324.273926, 184.427505, 327.905151, 186.12204);
triangle(324.273926, 184.427505, 333.4729, 180.554276, 320.158691, 182.975037);
triangle(320.158691, 182.975037, 337.104004, 171.597412, 317.49585, 182.975037);
triangle(317.49585, 182.975037, 292.077759, 174.018188, 314.59082, 187.816589);
triangle(314.59082, 187.816589, 294.256348, 196.047211, 316.527466, 199.67836);
triangle(316.527466, 199.67836, 293.530151, 201.614975, 316.769531, 209.845596);
triangle(316.769531, 209.845596, 293.530151, 201.614975, 311.685913, 222.433609);
triangle(311.685913, 222.433609, 287.236206, 205.972366, 303.697388, 238.894852);
triangle(303.697388, 238.894852, 272.711548, 213.718826, 298.855835, 245.915085);
triangle(298.855835, 245.915085, 272.711548, 213.718826, 296.192993, 251.72493);
triangle(296.192993, 251.72493, 237.368286, 307.644745, 300.066284, 256.808533);
triangle(300.066284, 256.808533, 316.043335, 257.292725, 308.781006, 252.209091);
triangle(308.781006, 252.209091, 316.043335, 257.292725, 314.833008, 252.935318);
triangle(316.043335, 257.292725, 300.066284, 256.808533, 315.075073, 270.122803);
triangle(315.075073, 270.122803, 300.066284, 256.808533, 310.233521, 279.805878);
triangle(310.233521, 279.805878, 300.066284, 256.808533, 308.296875, 290.699341);
triangle(308.296875, 290.699341, 299.824219, 313.212524, 307.570679, 303.529419);
triangle(299.824219, 313.212524, 264.723022, 321.20105, 289.899048, 321.20105);
triangle(289.899048, 321.20105, 264.723022, 321.20105, 277.311035, 325.07428);
triangle(264.723022, 321.20105, 300.066284, 256.808533, 253.829468, 318.780273);
triangle(253.829468, 318.780273, 237.368286, 307.644745, 244.630615, 315.391205);
triangle(244.630615, 315.391205, 237.368286, 307.644745, 239.789063, 311.76004);
triangle(231.074219, 309.339294, 149.010132, 252.693237, 219.938721, 316.601593);
triangle(219.938721, 316.601593, 145.863159, 302.076965, 209.287354, 328.463379);
triangle(209.287354, 328.463379, 140.053345, 320.716919, 200.57251, 354.123535);
triangle(200.57251, 354.123535, 122.623779, 365.743225, 195.973145, 377.605011);
triangle(195.973145, 377.605011, 122.623779, 365.743225, 191.857788, 401.812744);
triangle(191.857788, 401.812744, 113.182739, 390.677185, 189.194946, 422.631348);
triangle(189.194946, 422.631348, 104.22583, 411.253723, 188.710815, 427.957062);
triangle(151.188843, 240.589386, 178.301514, 192.173965, 150.220581, 217.592072);
triangle(178.301514, 192.173965, 253.345337, 202.099136, 229.863892, 184.185425);
triangle(229.863892, 184.185425, 207.834839, 174.50235, 181.932617, 188.542816);
triangle(272.711548, 213.718826, 303.697388, 238.894852, 287.236206, 205.972366);
triangle(314.59082, 187.816589, 292.077759, 174.018188, 291.109375, 191.9319);
triangle(260.123535, 148.842163, 273.921875, 147.631775, 272.469482, 134.801697);
triangle(317.49585, 182.975037, 337.104004, 171.597412, 296.677124, 164.093018);
triangle(296.677124, 164.093018, 337.104004, 171.597412, 301.276611, 142.548157);
triangle(301.276611, 142.548157, 343.882202, 152.473328, 330.083862, 125.602783);
triangle(237.368286, 307.644745, 253.829468, 318.780273, 300.066284, 256.808533);
triangle(300.066284, 256.808533, 264.723022, 321.20105, 308.296875, 290.699341);
triangle(308.296875, 290.699341, 264.723022, 321.20105, 299.824219, 313.212524);
triangle(253.345337, 202.099136, 178.301514, 192.173965, 151.188843, 240.589386);
triangle(253.345337, 202.099136, 250.741455, 214.637115, 262.544312, 210.813904);
triangle(262.544312, 210.813904, 255.370239, 223.512314, 256.506348, 229.71727);
triangle(235.509155, 295.454468, 235.035889, 294.359985, 231.074219, 309.339294);
triangle(231.074219, 309.339294, 241.47168, 261.514893, 241.423828, 259.503967);
triangle(255.370239, 223.512314, 262.544312, 210.813904, 254.44812, 218.476074);
triangle(254.44812, 218.476074, 262.544312, 210.813904, 250.887085, 214.787888);
triangle(250.887085, 214.787888, 262.544312, 210.813904, 250.741455, 214.637115);
triangle(241.47168, 261.514893, 238.227417, 281.792938, 241.702759, 271.22226);
triangle(238.227417, 281.792938, 241.47168, 261.514893, 236.996826, 285.536255);
triangle(236.996826, 285.536255, 231.074219, 309.339294, 235.643799, 291.624634);
triangle(235.643799, 291.624634, 231.074219, 309.339294, 235.035889, 294.359985);
triangle(231.074219, 309.339294, 236.996826, 285.536255, 241.47168, 261.514893);
triangle(262.544312, 210.813904, 256.970459, 232.251846, 267.143799, 213.960907);
triangle(267.143799, 213.960907, 257.053711, 234.338821, 257.357056, 244.753235);
triangle(239.236206, 301.767731, 238.908569, 301.720673, 237.368286, 307.644745);
triangle(257.053711, 234.338821, 267.143799, 213.960907, 256.997192, 232.397934);
triangle(256.997192, 232.397934, 267.143799, 213.960907, 256.970459, 232.251846);
triangle(237.368286, 307.644745, 238.173218, 301.615051, 231.074219, 309.339294);
triangle(231.074219, 309.339294, 238.173218, 301.615051, 235.509155, 295.454468);
triangle(256.506348, 229.71727, 256.970459, 232.251846, 262.544312, 210.813904);
triangle(238.908569, 301.720673, 238.173218, 301.615051, 237.368286, 307.644745);
triangle(231.074219, 309.339294, 241.423828, 259.503967, 151.188843, 240.589386);
triangle(151.188843, 240.589386, 248.957764, 212.789688, 253.345337, 202.099136);
triangle(253.345337, 202.099136, 248.957764, 212.789688, 250.741455, 214.637115);
triangle(248.957764, 212.789688, 151.188843, 240.589386, 244.644043, 219.652573);
triangle(244.644043, 219.652573, 151.188843, 240.589386, 244.055786, 228.476288);
triangle(244.055786, 228.476288, 151.188843, 240.589386, 244.117065, 229.948349);
triangle(244.117065, 229.948349, 243.957275, 240.525681, 244.447876, 237.888245);
triangle(243.957275, 240.525681, 151.188843, 240.589386, 242.062744, 250.70871);
triangle(242.062744, 250.70871, 151.188843, 240.589386, 241.310547, 254.751328);
triangle(241.310547, 254.751328, 151.188843, 240.589386, 241.423828, 259.503967);
triangle(151.188843, 240.589386, 243.957275, 240.525681, 244.117065, 229.948349);
triangle(237.368286, 307.644745, 240.650513, 301.970917, 239.236206, 301.767731);
triangle(257.357056, 244.753235, 296.192993, 251.72493, 267.143799, 213.960907);
triangle(296.192993, 251.72493, 240.650513, 301.970917, 237.368286, 307.644745);
triangle(257.358887, 244.815201, 296.192993, 251.72493, 257.357056, 244.753235);
triangle(257.585449, 252.594421, 296.192993, 251.72493, 257.358887, 244.815201);
triangle(256.534546, 254.823608, 296.192993, 251.72493, 257.585449, 252.594421);
triangle(251.812988, 264.838928, 296.192993, 251.72493, 256.534546, 254.823608);
triangle(251.114746, 266.32019, 296.192993, 251.72493, 251.812988, 264.838928);
triangle(248.302612, 274.590942, 248.173462, 285.536255, 251.114746, 266.32019);
triangle(247.78125, 276.124329, 248.173462, 285.536255, 248.302612, 274.590942);
triangle(245.820435, 292.39917, 296.192993, 251.72493, 248.173462, 285.536255);
triangle(244.665527, 294.891357, 296.192993, 251.72493, 245.820435, 292.39917);
triangle(242.094971, 300.438538, 296.192993, 251.72493, 244.665527, 294.891357);
triangle(240.650513, 301.970917, 296.192993, 251.72493, 242.094971, 300.438538);
triangle(251.114746, 266.32019, 248.173462, 285.536255, 296.192993, 251.72493);