Digital Bauhaus Vorkurs/Projekte/Form und Raum/Code11: Difference between revisions
From Medien Wiki
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Form und Raum == | == Form und Raum == | ||
<source lang="Java" highlight=" | <source lang="Java" highlight="11,44,46,57,62,67,72,83,88,93,98,103,108,116,143,145,157">Segmente[] objekt = new Segmente[9]; | ||
void setup() { | void setup() { | ||
Line 11: | Line 11: | ||
for (int i=0; i < objekt.length; i++) { | for (int i=0; i < objekt.length; i++) { | ||
objekt[i] = new Segmente() | objekt[i] = new Segmente(); //Konstruktor des Objekts | ||
} | } | ||
} | } | ||
Line 51: | Line 32: | ||
} | } | ||
} | } | ||
//verändere die Position des ausgewählten Objekts | |||
void mouseDragged() { //verändere die Position des ausgewählten Objekts | |||
for (int i=objekt.length-1; i >= 0 ; i--) { | for (int i=objekt.length-1; i >= 0 ; i--) { | ||
if (objekt[i].mouseOver) { | if (objekt[i].mouseOver) { | ||
Line 139: | Line 120: | ||
objekt[i].x = random(width); | objekt[i].x = random(width); | ||
objekt[i].y = random(height); | objekt[i].y = random(height); | ||
//bessere Verteilung der Werte bzw. weniger Kreise | |||
switch((int)random(4)) { | switch((int)random(4)) { | ||
case 0: | case 0: | ||
Line 160: | Line 141: | ||
} | } | ||
} | } | ||
//aktiviere die Bewegung aller Objekte | //aktiviere die Bewegung aller Objekte (0) | ||
for (int i=0; i < objekt.length; i++) { | for (int i=0; i < objekt.length; i++) { | ||
if ((key == '0') && (objekt[i].move == false)) { | if ((key == '0') && (objekt[i].move == false)) { | ||
Line 169: | Line 150: | ||
} | } | ||
} | } | ||
//bewege alle Objekte, außer das ausgewählte, frei im Raum | |||
void mouseMoved() { //bewege alle Objekte, außer das ausgewählte, frei im Raum | |||
for (int i=0; i < objekt.length; i++) { | for (int i=0; i < objekt.length; i++) { | ||
if ((objekt[i].move == true) && (objekt[i].mouseOver == false)) { | if ((objekt[i].move == true) && (objekt[i].mouseOver == false)) { | ||
Line 201: | Line 182: | ||
int seg; // Segmentzähler | int seg; // Segmentzähler | ||
int r; // Radius | int r; // Radius | ||
float g; // Richtung bzw. | float g; // Richtung bzw. Gradzahl | ||
boolean mouseOver; //Maus über dem Objekt | boolean mouseOver; //Maus über dem Objekt | ||
Line 212: | Line 193: | ||
Segmente() { | Segmente() { | ||
println("Segmente erstellt!"); | //println("Segmente erstellt!"); | ||
x = random(100,width-100); | |||
y = random(100,height-100); | |||
seg = (int)random(6); | |||
r = 100; | |||
g = 90; // Richtung nach oben | |||
h = (int)random(360); | |||
s = 100; | |||
b = 100; | |||
a = 100; | |||
mouseOver = false; | |||
visible = true; | |||
move = false; | |||
sx = 5; | |||
sy = 5; | |||
} | } | ||
Line 220: | Line 219: | ||
} | } | ||
//abgewandelte Funktion aus dem Buch "Generative Gestaltung" Seite 187 | |||
void maleSegmente(int seg,int r,float g,float x,float y) { | void maleSegmente(int seg,int r,float g,float x,float y) { | ||
float segmentzahl = 3 + (float)seg; | float segmentzahl = 3 + (float)seg; | ||
float angleStep = 360/segmentzahl; | float angleStep = 360/segmentzahl; | ||
//zeichnet Linien über die berechneten Punkte auf der äußeren Kreisbahn | |||
beginShape(); | beginShape(); | ||
vertex(x, y); | vertex(x, y); |
Latest revision as of 17:55, 30 March 2011
Form und Raum
Segmente[] objekt = new Segmente[9];
void setup() {
size(800, 800);
smooth();
noStroke();
//frameRate(25);
colorMode(HSB,360,100,100,100);
for (int i=0; i < objekt.length; i++) {
objekt[i] = new Segmente(); //Konstruktor des Objekts
}
}
void draw() {
background(0);
//male die Objekte nur wenn sie aktiviert bzw. sichtbar sind
for (int i=0; i < objekt.length; i++) {
if (objekt[i].visible) {
objekt[i].maleSegmente();
}
}
//prüfe ob die Maus über dem Objekt ist
for (int i=0; i < objekt.length; i++) {
if ((mouseX >= objekt[i].x-objekt[i].r) && (mouseX <= objekt[i].x+objekt[i].r) && (mouseY >= objekt[i].y-objekt[i].r) && (mouseY <= objekt[i].y+objekt[i].r)) {
objekt[i].mouseOver = true;
}else {
objekt[i].mouseOver = false;
}
}
}
void mouseDragged() { //verändere die Position des ausgewählten Objekts
for (int i=objekt.length-1; i >= 0 ; i--) {
if (objekt[i].mouseOver) {
objekt[i].x = mouseX;
objekt[i].y = mouseY;
break;
}
}
}
void keyPressed() {
int k = (int)key-48-1; //Zahlenverschiebung: '1' entspricht objekt[0]
//aktiviere bzw. mache das Objekt mit der jeweiligen Zahl sichtbar
if ((k >= 0) && (k < objekt.length)) {
if (objekt[k].visible == false) {
objekt[k].visible = true;
}else if (objekt[k].visible) { //oder wieder unsichtbar
objekt[k].visible = false;
}
}
//verändere die Segmentzahl oder Farbe des ausgewählten Objekts (UP,DOWN,LEFT,RIGHT)
if (key == CODED) {
for (int i=0; i < objekt.length; i++) {
if (objekt[i].mouseOver) {
if (keyCode == UP) {
if (objekt[i].seg <= 100) {
objekt[i].seg += 1;
}
}
if (keyCode == DOWN) {
if (objekt[i].seg >= 1) {
objekt[i].seg -= 1;
}
}
if (keyCode == RIGHT) {
if (objekt[i].h <= 360) {
objekt[i].h += 1;
}
}
if (keyCode == LEFT) {
if (objekt[i].h >= 1) {
objekt[i].h -= 1;
}
}
}
}
}
//verändere Radius (+,-), Alphawert (,,.) und Gradzahl bzw. Richtung (/,*) des Objekts
for (int i=0; i < objekt.length; i++) {
if (objekt[i].mouseOver) {
if (key == '+') {
if (objekt[i].r <= 200) {
objekt[i].r += 1;
}
}
if (key == '-') {
if (objekt[i].r >= 50) {
objekt[i].r -= 1;
}
}
if (key == ',') {
if (objekt[i].a <= 100) {
objekt[i].a += 1;
}
}
if (key == '.') {
if (objekt[i].a >= 10) {
objekt[i].a -= 1;
}
}
if (key == '/') {
if (objekt[i].g <= 360) {
objekt[i].g += 1;
}
}
if (key == '*') {
if (objekt[i].g >= 1) {
objekt[i].g -= 1;
}
}
}
}
//erzeuge Zufallswerte bei allen Objekten (ENTER)
if (key == ENTER || key == RETURN) {
for (int i=0; i < objekt.length; i++) {
objekt[i].x = random(width);
objekt[i].y = random(height);
//bessere Verteilung der Werte bzw. weniger Kreise
switch((int)random(4)) {
case 0:
objekt[i].seg = (int)random(6);
break;
case 1:
objekt[i].seg = (int)random(6,12);
break;
case 3:
objekt[i].seg = (int)random(12,100);
break;
default:
break;
}
objekt[i].r = (int)random(50,100);
objekt[i].g = random(360);
objekt[i].h = (int)random(360);
objekt[i].a = (int)random(50,100);
}
}
//aktiviere die Bewegung aller Objekte (0)
for (int i=0; i < objekt.length; i++) {
if ((key == '0') && (objekt[i].move == false)) {
objekt[i].move = true;
}else if ((key == '0') && (objekt[i].move)) { //oder deaktiviere sie
objekt[i].move = false;
}
}
}
void mouseMoved() { //bewege alle Objekte, außer das ausgewählte, frei im Raum
for (int i=0; i < objekt.length; i++) {
if ((objekt[i].move == true) && (objekt[i].mouseOver == false)) {
objekt[i].x = objekt[i].x + objekt[i].sx;
objekt[i].y = objekt[i].y + objekt[i].sy;
//drehe das Objket
objekt[i].g = objekt[i].g + 1;
if (objekt[i].g >= 360) {
objekt[i].g = 0;
}
//wechsel die Bewegungsrichtung, wenn das Objekt an den Rand stößt
if (objekt[i].x >= width || objekt[i].x <= 0){
objekt[i].sx = -objekt[i].sx;
}
if (objekt[i].y >= height || objekt[i].y <= 0){
objekt[i].sy = -objekt[i].sy;
}
}
}
}
Segmente
class Segmente {
float x; // X-Position
float y; // Y-Position
int seg; // Segmentzähler
int r; // Radius
float g; // Richtung bzw. Gradzahl
boolean mouseOver; //Maus über dem Objekt
boolean visible; //Objekt sichtbar
boolean move; //Objekt bewegt sich
int h,s,b,a; // Farbe HSB und Alpha
float sx,sy; //Geschwindigeit
Segmente() {
//println("Segmente erstellt!");
x = random(100,width-100);
y = random(100,height-100);
seg = (int)random(6);
r = 100;
g = 90; // Richtung nach oben
h = (int)random(360);
s = 100;
b = 100;
a = 100;
mouseOver = false;
visible = true;
move = false;
sx = 5;
sy = 5;
}
void maleSegmente() {
fill(h,s,b,a);
maleSegmente(seg,r,g,x,y);
}
//abgewandelte Funktion aus dem Buch "Generative Gestaltung" Seite 187
void maleSegmente(int seg,int r,float g,float x,float y) {
float segmentzahl = 3 + (float)seg;
float angleStep = 360/segmentzahl;
//zeichnet Linien über die berechneten Punkte auf der äußeren Kreisbahn
beginShape();
vertex(x, y);
for (float angle=0; angle<=360; angle+=angleStep) {
float vx = x + cos(radians(angle-g))*r;
float vy = y + sin(radians(angle-g))*r;
vertex(vx, vy);
}
vertex(x + cos(radians(360-g))*r, y + sin(radians(360-g))*r);
endShape();
}
}