/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://studio.sketchpad.cc/sp/pad/view/ro.ShUVPSn3VaO/rev.2
*
* authors:
* (Unnamed author)
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
// This sketch builds on a prior work, "Untitled Sketch", created by coco & Princess Sunshine
// http://sketchpad.cc/sp/pad/view/ro.exasJ6g$y09/rev.1054
/*****************************************
* Assignment 08
* Name: Jenny Wang
* E-mail: [email protected]
* Course: CS 110 - Section 02
* Submitted: 05-13-2011
*
* For this extra credit assignment, I modified
* my 6th assignment to incorporate multi-
* dimensional arrays to fulfill the
* requirements of the assignemnt. I worked really
* hard on assignment 6 and I want it to help me
* some more points! :)
*
* I combined the starfield code and penguinField
* code as the backbone for this sketch. However,
* instead of penguins, I wanted the viewer to be
* flying through space with the 12 zodiac
* constellations - Aries, Taurus, Gemini, Cancer,
* Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn,
* Aquarius and Pisces.
*
***********************************************/
int AQUARIUS = 0;
int ARIES = 1;
int CANCER = 2;
int CAPRICORN = 3;
int GEMINI = 4;
int LEO = 5;
int LIBRA = 6;
int PISCES = 7;
int SAGITTARIUS = 8;
int SCORPIO = 9;
int TAURUS = 10;
int VIRGO = 11;
int mode;
float centerX;
float centerY;
// a multi-dimensional array!
Constellation [] [] constellation = new Constellation [12][2];
// a plain old array...
Star[] stars = new Star[400];
void setup() {
size(600, 600);
smooth();
stroke(255);
strokeWeight(1);
rectMode(CENTER);
centerX = 0.5*width;
centerY = 0.5*height;
// Init all stars
for (int i=0; i<stars.length; i++)
stars[i] = new Star();
// Init all constellations
for (int i=0; i<constellation.length; i++) {
for ( int j=0; j<constellation[i].length; j++) {
constellation[i][j] = new Constellation( i );
}
}
}
void draw() {
background(0);
// Draw all stars wrt center of screen
translate(0.5*width, 0.5*height);
// Update and draw all stars
for (int i=0; i<stars.length; i++) {
stars[i].update();
stars[i].draw();
}
// Update and draw all constellations
for (int i=0; i<constellation.length; i++) {
for (int j=0; j<constellation[i].length; j++) {
constellation[i][j].update();
constellation[i][j].draw();
}
}
}
class Star {
// Star coordinates in 3D
float x;
float y;
float z;
Star() {
x = random(-5000, 5000);
y = random(-5000, 5000);
z = random(0, 2000);
}
void update() {
z-=10; // Move star closer to viewport
if (z <= 0.0) // Reset star if it passes viewport
reset();
}
void reset() {
// Reset star to a position far away
x = random(-5000, 5000);
y = random(-5000, 5000);
z = 2000.0;
}
void draw() {
// Project star only viewport
float offsetX = 100.0*(x/z);
float offsetY = 100.0*(y/z);
float scaleZ = 0.0001*(2000.0-z);
// Draw this star
pushMatrix();
translate(offsetX, offsetY);
scale(scaleZ);
fill (255);
ellipse(0,0,20,20);
popMatrix();
}
}
class Constellation {
// Declare variables
float x;
float y;
float z;
float r;
Constellation( int mode ) {
// Assign values to variables
x = random(-5000, 5000);
y = random(-5000, 5000);
z = random(0, 2000);
r = random(0, TWO_PI);
}
// Update the constellation to rotate with an increasing radius until it
// has reached the viewer
void update() {
z-=10;
r = (r + 0.05) % TWO_PI;
if (z <= 0.0) reset();
}
// Reset the constellation to show up randomly far away (to come toward
// viewer again)
void reset() {
x = random(-5000, 5000);
y = random(-5000, 5000);
z = 2000.0;
}
void draw() {
float offsetX = (x/z)*100.0;
float offsetY = (y/z)*100.0;
float scaleZ = 0.001*(2000.0-z);
noFill();
translate(offsetX+centerX, offsetY+centerY);
scale(scaleZ,scaleZ);
rotate(r);
if (mode == AQUARIUS) {
drawAquarius();
}
if (mode == ARIES) {
drawAries();
}
if (mode == CANCER) {
drawCancer();
}
if (mode == CAPRICORN) {
drawCapricorn();
}
if (mode == GEMINI) {
drawGemini();
}
if (mode == LEO) {
drawLeo();
}
if (mode == LIBRA) {
drawLibra();
}
if (mode == PISCES) {
drawPisces();
}
if (mode == SAGITTARIUS) {
drawSagittarius();
}
if (mode == SCORPIO) {
drawScorpio();
}
if (mode == TAURUS) {
drawTaurus();
}
else if (mode == VIRGO) {
drawVirgo();
}
}
//Aquarius
void drawAquarius() {
pushMatrix();
beginShape();
vertex(119, 183);
vertex(106, 174);
vertex(102, 171);
vertex(85, 172);
vertex(85, 185);
vertex(64, 159);
vertex(67, 153);
vertex(73, 151);
vertex(72, 138);
vertex(98, 122);
vertex(122, 102);
endShape();
beginShape();
vertex(72, 138);
vertex(94, 148);
vertex(110, 146);
endShape();
ellipse(119, 183,3,3);
ellipse(106, 174,3,3);
ellipse(102, 171,3,3);
ellipse(85, 172,3,3);
ellipse(85, 185,3,3);
ellipse(64, 159,3,3);
ellipse(67, 153,3,3);
ellipse(73, 151,3,3);
ellipse(72, 138,3,3);
ellipse(98, 122,3,3);
ellipse(122, 102,3,3);
ellipse(72, 138,3,3);
ellipse(94, 148,3,3);
ellipse(110, 146,3,3);
popMatrix();
}
//Aries
void drawAries () {
pushMatrix();
beginShape();
vertex(65, 301);
vertex(90, 307);
vertex(101, 313);
vertex(103, 319);
endShape();
ellipse(65, 301,3,3);
ellipse(90, 307,3,3);
ellipse(101, 313,3,3);
ellipse(103, 319,3,3);
popMatrix();
}
//Cancer
void drawCancer() {
pushMatrix();
beginShape();
vertex(309, 347);
vertex(320, 362);
vertex(323, 369);
vertex(321, 390);
vertex(323, 369);
vertex(352, 379);
endShape();
ellipse(309, 347,3,3);
ellipse(320, 362,3,3);
ellipse(323, 369,3,3);
ellipse(321, 390,3,3);
ellipse(323, 369,3,3);
ellipse(352, 379,3,3);
popMatrix();
}
//Capricorn
void drawCapricorn () {
pushMatrix();
beginShape();
vertex(163, 54);
vertex(165, 60);
vertex(179, 99);
vertex(179, 105);
vertex(170, 108);
vertex(158, 118);
vertex(146, 118);
vertex(137, 122);
vertex(140, 116);
vertex(145, 106);
vertex(152, 98);
vertex(165, 61);
endShape();
ellipse(163, 54,3,3);
ellipse(165, 60,3,3);
ellipse(179, 99,3,3);
ellipse(179, 105,3,3);
ellipse(170, 108,3,3);
ellipse(158, 118,3,3);
ellipse(146, 118,3,3);
ellipse(137, 122,3,3);
ellipse(140, 116,3,3);
ellipse(145, 106,3,3);
ellipse(152, 98,3,3);
ellipse(165, 61,3,3);
popMatrix();
}
//Gemini
void drawGemini() {
pushMatrix();
beginShape();
vertex(265, 391);
vertex(259, 393);
vertex(256, 400);
vertex(252, 410);
vertex(247, 421);
vertex(252, 410);
vertex(231, 403);
vertex(220, 398);
vertex(207, 393);
vertex(207, 388);
vertex(214, 374);
vertex(218, 375);
vertex(225, 376);
vertex(248, 388);
vertex(259, 393);
endShape();
ellipse(265, 391,3,3);
ellipse(259, 393,3,3);
ellipse(256, 400,3,3);
ellipse(252, 410,3,3);
ellipse(247, 421,3,3);
ellipse(252, 410,3,3);
ellipse(231, 403,3,3);
ellipse(220, 398,3,3);
ellipse(207, 393,3,3);
ellipse(207, 388,3,3);
ellipse(214, 374,3,3);
ellipse(218, 375,3,3);
ellipse(225, 376,3,3);
ellipse(248, 388,3,3);
ellipse(259, 393,3,3);
popMatrix();
}
//Leo
void drawLeo() {
pushMatrix();
beginShape();
vertex(374, 277);
vertex(364, 279);
vertex(363, 297);
vertex(370, 303);
vertex(380, 302);
vertex(393, 311);
vertex(355, 340);
vertex(342, 357);
vertex(346, 330);
vertex(370, 303);
endShape();
ellipse(374, 277,3,3);
ellipse(364, 279,3,3);
ellipse(363, 297,3,3);
ellipse(370, 303,3,3);
ellipse(380, 302,3,3);
ellipse(393, 311,3,3);
ellipse(355, 340,3,3);
ellipse(342, 357,3,3);
ellipse(346, 330,3,3);
ellipse(370, 303,3,3);
popMatrix();
}
//Libra
void drawLibra() {
pushMatrix();
beginShape();
vertex(368, 175);
vertex(368, 169);
vertex(382, 161);
vertex(385, 137);
vertex(368, 125);
vertex(361, 141);
vertex(356, 144);
vertex(351, 147);
endShape();
ellipse(368, 175,3,3);
ellipse(368, 169,3,3);
ellipse(382, 161,3,3);
ellipse(385, 137,3,3);
ellipse(368, 125,3,3);
ellipse(361, 141,3,3);
ellipse(356, 144,3,3);
ellipse(351, 147,3,3);
popMatrix();
}
//Pisces
void drawPisces() {
pushMatrix();
beginShape();
vertex(55, 197);
vertex(49, 189);
vertex(50, 180);
vertex(57, 176);
vertex(66, 180);
vertex(68, 190);
vertex(63, 198);
vertex(55, 197);
vertex(58, 208);
vertex(69, 236);
vertex(73, 247);
vertex(88, 263);
vertex(100, 275);
vertex(80, 271);
vertex(62, 269);
vertex(37, 271);
vertex(30, 278);
vertex(21, 272);
endShape();
ellipse(55, 197,3,3);
ellipse(49, 189,3,3);
ellipse(50, 180,3,3);
ellipse(57, 176,3,3);
ellipse(66, 180,3,3);
ellipse(68, 190,3,3);
ellipse(63, 198,3,3);
ellipse(55, 197,3,3);
ellipse(58, 208,3,3);
ellipse(69, 236,3,3);
ellipse(73, 247,3,3);
ellipse(88, 263,3,3);
ellipse(100, 275,3,3);
ellipse(80, 271,3,3);
ellipse(62, 269,3,3);
ellipse(37, 271,3,3);
ellipse(30, 278,3,3);
ellipse(21, 272,3,3);
popMatrix();
}
//Sagittarius
void drawSagittarius() {
pushMatrix();
beginShape();
vertex(276, 70);
vertex(263, 77);
vertex(262, 81);
vertex(253, 78);
vertex(251, 89);
vertex(256, 94);
vertex(251, 89);
vertex(253, 78);
vertex(248, 67);
vertex(255, 53);
vertex(248, 67);
vertex(236, 72);
vertex(231, 70);
vertex(224, 57);
vertex(229, 54);
vertex(224, 57);
vertex(219, 57);
vertex(207, 50);
endShape();
beginShape();
vertex(236, 72);
vertex(228, 78);
vertex(224, 74);
vertex(231, 70);
vertex(224, 74);
vertex(207, 69);
vertex(197, 81);
vertex(193, 84);
vertex(205, 103);
vertex(212, 115);
vertex(223, 109);
vertex(212, 115);
vertex(225, 117);
endShape();
ellipse(276, 70,3,3);
ellipse(263, 77,3,3);
ellipse(262, 81,3,3);
ellipse(253, 78,3,3);
ellipse(251, 89,3,3);
ellipse(256, 94,3,3);
ellipse(251, 89,3,3);
ellipse(253, 78,3,3);
ellipse(248, 67,3,3);
ellipse(255, 53,3,3);
ellipse(248, 67,3,3);
ellipse(236, 72,3,3);
ellipse(231, 70,3,3);
ellipse(224, 57,3,3);
ellipse(229, 54,3,3);
ellipse(224, 57,3,3);
ellipse(219, 57,3,3);
ellipse(207, 50,3,3);
ellipse(236, 72,3,3);
ellipse(228, 78,3,3);
ellipse(224, 74,3,3);
ellipse(231, 70,3,3);
ellipse(224, 74,3,3);
ellipse(207, 69,3,3);
ellipse(197, 81,3,3);
ellipse(193, 84,3,3);
ellipse(205, 103,3,3);
ellipse(212, 115,3,3);
ellipse(223, 109,3,3);
ellipse(212, 115,3,3);
ellipse(225, 117,3,3);
popMatrix();
}
//Scorpio
void drawScorpio() {
pushMatrix();
beginShape();
vertex(291, 119);
vertex(285, 124);
vertex(281, 128);
vertex(289, 135);
vertex(301, 136);
vertex(312, 132);
vertex(314, 123);
vertex(316, 112);
vertex(327, 98);
vertex(332, 93);
vertex(336, 91);
vertex(352, 85);
vertex(349, 78);
vertex(352, 85);
vertex(352, 95);
vertex(351, 101);
endShape();
ellipse(291, 119,3,3);
ellipse(285, 124,3,3);
ellipse(281, 128,3,3);
ellipse(289, 135,3,3);
ellipse(301, 136,3,3);
ellipse(312, 132,3,3);
ellipse(314, 123,3,3);
ellipse(316, 112,3,3);
ellipse(327, 98,3,3);
ellipse(332, 93,3,3);
ellipse(336, 91,3,3);
ellipse(352, 85,3,3);
ellipse(349, 78,3,3);
ellipse(352, 85,3,3);
ellipse(352, 95,3,3);
ellipse(351, 101,3,3);
popMatrix();
}
//Taurus
void drawTaurus() {
pushMatrix();
beginShape();
vertex(182, 401);
vertex(180, 398);
vertex(160, 384);
vertex(151, 374);
vertex(146, 371);
vertex(141, 368);
vertex(117, 344);
endShape();
beginShape();
vertex(151, 374);
vertex(150, 367);
vertex(148, 367);
vertex(148, 362);
vertex(144, 349);
vertex(132, 328);
endShape();
ellipse(182, 401,3,3);
ellipse(180, 398,3,3);
ellipse(160, 384,3,3);
ellipse(151, 374,3,3);
ellipse(146, 371,3,3);
ellipse(141, 368,3,3);
ellipse(117, 344,3,3);
ellipse(151, 374,3,3);
ellipse(150, 367,3,3);
ellipse(148, 367,3,3);
ellipse(148, 362,3,3);
ellipse(144, 349,3,3);
ellipse(132, 328,3,3);
popMatrix();
}
//Virgo
void drawVirgo() {
pushMatrix();
beginShape();
vertex(381, 263);
vertex(389, 251);
vertex(396, 252);
vertex(408, 232);
vertex(382, 226);
vertex(374, 235);
vertex(361, 256);
vertex(374, 235);
vertex(382, 226);
vertex(385, 202);
vertex(367, 198);
vertex(385, 202);
vertex(397, 201);
vertex(402, 187);
vertex(404, 169);
vertex(402, 187);
vertex(397, 201);
vertex(401, 220);
vertex(408, 232);
endShape();
ellipse(381, 263,3,3);
ellipse(389, 251,3,3);
ellipse(396, 252,3,3);
ellipse(408, 232,3,3);
ellipse(382, 226,3,3);
ellipse(374, 235,3,3);
ellipse(361, 256,3,3);
ellipse(374, 235,3,3);
ellipse(382, 226,3,3);
ellipse(385, 202,3,3);
ellipse(367, 198,3,3);
ellipse(385, 202,3,3);
ellipse(397, 201,3,3);
ellipse(402, 187,3,3);
ellipse(404, 169,3,3);
ellipse(402, 187,3,3);
ellipse(397, 201,3,3);
ellipse(401, 220,3,3);
ellipse(408, 232,3,3);
popMatrix();
}
}