Vytvorte skeč, ktorý vykreslí n čiar zo stredu obrazovky do bodov na kružnici. Body sú na kružnici rovnomerne rozmiestnené.
Riešenie
size(400, 400);
background(0);
stroke(255);
// Stred kruhu
PVector C = new PVector(width/2, height/2);
// Polomer kruhu
float r = height/2-10;
// Pocet ciar
int n = 100;
// Uhlovy rozostup medzi ciarami
float du = TWO_PI / n;
for (int i = 0; i < n; i++)
{
float u = i*du;
float x = C.x + r * cos(u);
float y = C.x + r * sin(u);
line(C.x, C.y, x, y);
}
Úloha 2
Upravte skeč tak, aby body na kružnici neboli rovnomerne rozmiestnené, ale aby bol uhol pre každú čiaru náhodný.
Riešenie
size(400, 400);
background(0);
stroke(255);
// Stred kruhu
PVector C = new PVector(width/2, height/2);
// Polomer kruhu
float r = height/2-10;
// Pocet ciar
int n = 100;
for (int i = 0; i < n; i++)
{
float u = random(TWO_PI);
float x = C.x + r * cos(u);
float y = C.x + r * sin(u);
line(C.x, C.y, x, y);
}
Úloha 3
Upravte skeč tak, aby každá čiara spájala dva rôzne náhodné body na kružnici.
Riešenie
size(400, 400);
background(0);
stroke(255);
// Stred kruhu
PVector C = new PVector(width/2, height/2);
// Polomer kruhu
float r = height/2-10;
// Pocet ciar
int n = 100;
for (int i = 0; i < n; i++)
{
float u1 = random(TWO_PI);
float x1 = C.x + r * cos(u1);
float y1 = C.x + r * sin(u1);
float u2 = random(TWO_PI);
float x2 = C.x + r * cos(u2);
float y2 = C.x + r * sin(u2);
line(x1, y1, x2, y2);
}
Úloha 4
Upravte skeč tak, aby body na čiare mali ten istý náhodný uhol u ale začiatočný bod je na menšom polomere r1 a koncový bod čiary je na väčšom polomere r2.
Vytvorte animovaný pohyb po kružnici. Uhol u v každom draw() trochu zväčšite, a tým docielite animáciu.
Riešenie
PVector C; // Stred kruhu
float r; // Polomer
float u; //Uhol
void setup()
{
size(400, 400);
background(0);
noStroke();
colorMode(HSB);
C = new PVector(width/2, height/2);
r = width/3;
}
void draw()
{
background(0);
float x = C.x + r * cos(u);
float y = C.x + r * sin(u);
circle(x,y,20);
u = u + 0.03; // Animovany uhol
}
Úloha 6
Upravte skeč tak, aby sa zmenila farba na inú náhodnú farbu ak uhol opíše celú kružnicu. Nezabudnite, že treba v takom prípade aj vynulovať uhol, inak by sa odvtedy farba menila v každom frame. A vypnite prekresľovanie pozadia, nech obrázok zostáva na obrazovke.
Riešenie
PVector C; // Stred kruhu
float r; // Polomer
float u; //Uhol
void setup()
{
size(400, 400);
background(0);
noStroke();
colorMode(HSB);
C = new PVector(width/2, height/2);
r = width/3;
}
void draw()
{
float x = C.x + r * cos(u);
float y = C.x + r * sin(u);
circle(x,y,20);
u = u + 0.03; // Animovany uhol
if (u > TWO_PI)
{
fill(0,255,255);
u = 0;
}
}
Úloha 7
Vytvorte skeč, ktorý nakreslí kruh z n čiar. Aký uhol má začiatočný bod i-tej čiary a aký uhol má koncový bod i-tej čiary?
Riešenie
size(400,400);
background(0);
stroke(255);
PVector C = new PVector(width/2, height/2);
float r = width/3;
int n = 13;
float du = TWO_PI/n;
for (int i = 0; i < n; i++)
{
// Zaciatocny bod ciary
float x1 = C.x + r * cos(i*du);
float y1 = C.y + r * sin(i*du);
// Koncovy bod ciary
float x2 = C.x + r * cos(i*du + du);
float y2 = C.y + r * sin(i*du + du);
line(x1,y1,x2,y2);
}
Úloha 8
Upravte skeč tak, aby okrem začiatočného a koncového bodu čiary vypočítal aj bod uprostred medzi nimi. Aký uhol bude mať tento bod? Vykreslite do tohto bodu bodku:
Riešenie
size(400,400);
background(0);
stroke(255);
PVector C = new PVector(width/2, height/2);
float r = width/3;
int n = 13;
float du = TWO_PI/n;
for (int i = 0; i < n; i++)
{
// Zaciatocny bod
float x1 = C.x + r * cos(i*du);
float y1 = C.y + r * sin(i*du);
// Stredny bod
float xs = C.x + r * cos(i*du + du/2);
float ys = C.y + r * sin(i*du + du/2);
// Koncovy bod
float x2 = C.x + r * cos(i*du + du);
float y2 = C.y + r * sin(i*du + du);
line(x1,y1,x2,y2);
circle(xs,ys,5);
}
Úloha 9
Stiahnite tento stredný bod bližšie k stredu kružnice. Použite na jeho výpočet menší polomer:
Riešenie
size(400,400);
background(0);
stroke(255);
PVector C = new PVector(width/2, height/2);
float r = width/3;
float rs = width/4;
int n = 13;
float du = TWO_PI/n;
for (int i = 0; i < n; i++)
{
// Zaciatocny bod
float x1 = C.x + r * cos(i*du);
float y1 = C.y + r * sin(i*du);
// Stredny bod
float xs = C.x + rs * cos(i*du + du/2);
float ys = C.y + rs * sin(i*du + du/2);
// Koncovy bod
float x2 = C.x + r * cos(i*du + du);
float y2 = C.y + r * sin(i*du + du);
line(x1,y1,x2,y2);
circle(xs,ys,5);
}
Úloha 10
Teraz upravte skeč tak, aby nekreslil čiaru zo začiatočného do koncového bodu, ale aby kreslil jednu čiaru zo začiatočného do stredného bodu a druhú čiaru zo stredného bodu do koncového. Dostanete hviezdicu:
Riešenie
size(400,400);
background(0);
stroke(255);
PVector C = new PVector(width/2, height/2);
float r = width/3;
float rs = width/4;
int n = 13;
float du = TWO_PI/n;
for (int i = 0; i < n; i++)
{
// Zaciatocny bod
float x1 = C.x + r * cos(i*du);
float y1 = C.y + r * sin(i*du);
// Stredny bod
float xs = C.x + rs * cos(i*du + du/2);
float ys = C.y + rs * sin(i*du + du/2);
// Koncovy bod
float x2 = C.x + r * cos(i*du + du);
float y2 = C.y + r * sin(i*du + du);
line(x1,y1,xs,ys);
line(xs,ys,x2,y2);
}
Úloha 11
Prerobte predošlý skeč tak, aby sa pri kliknutí myšou vykreslila hviezdica so stredom na pozícii myši:
Riešenie
void setup()
{
size(400, 400);
background(0);
stroke(255);
}
void mousePressed()
{
PVector C = new PVector(mouseX, mouseY);
float r = width/3;
float rs = width/4;
int n = 13;
float du = TWO_PI/n;
for (int i = 0; i < n; i++)
{
// Zaciatocny bod
float x1 = C.x + r * cos(i*du);
float y1 = C.y + r * sin(i*du);
// Stredny bod
float xs = C.x + rs * cos(i*du + du/2);
float ys = C.y + rs * sin(i*du + du/2);
// Koncovy bod
float x2 = C.x + r * cos(i*du + du);
float y2 = C.y + r * sin(i*du + du);
line(x1, y1, xs, ys);
line(xs, ys, x2, y2);
}
}
void draw()
{
}
Úloha 12
Upravte skeč tak, aby sa mala každá hviezdica iný polomer, iný počet vrcholov a inú farbu.
Riešenie
void setup()
{
size(400, 400);
background(0);
stroke(255);
}
void mousePressed()
{
PVector C = new PVector(mouseX, mouseY);
float r = random(30,50);
float rs = random(r-25,r-10);
int n = int(random(5,15));
stroke(random(256), random(256), random(256));
float du = TWO_PI/n;
for (int i = 0; i < n; i++)
{
// Zaciatocny bod
float x1 = C.x + r * cos(i*du);
float y1 = C.y + r * sin(i*du);
// Stredny bod
float xs = C.x + rs * cos(i*du + du/2);
float ys = C.y + rs * sin(i*du + du/2);
// Koncovy bod
float x2 = C.x + r * cos(i*du + du);
float y2 = C.y + r * sin(i*du + du);
line(x1, y1, xs, ys);
line(xs, ys, x2, y2);
}
}
void draw()
{
}