B. Kreslenie s výpočtami

Toto cvičenie robte, ak ste už prešli za lekciu 10 - Udalosti.

Úloha 1

Vytvorte skeč, ktorý na náhodné miesta vykresľuje krúžok o priemere 100. Rozsah, z ktorého sa generujú náhodné pozície však upravte tak, aby krúžky nezachádzali za hranice obrazovky a boli celé na obrazovke:

Riešenie
void setup()
{
  size(400, 400);
  background(0);
  fill(255,255,0);
}

void draw()
{
  float x = random(50,width-50);
  float y = random(50,height-50);
  circle(x,y,100);  
}

Úloha 2

Upravte svoj skeč tak, aby aj priemer každého krúžku bol náhodný. Generujte ho z rozsahu 50,100. Nezabudnite prispôsobiť náhodné rozsahy pozícií, aby stále platilo, že krúžky nesmú vyjsť von z obrazovky.

Riešenie
void setup()
{
  size(400, 400);
  background(0);
  fill(255, 255, 0);
}

void draw()
{
  float d = random(50, 100);
  float x = random(d/2, width-d/2);
  float y = random(d/2, height-d/2);
  circle(x, y, d);
}

Úloha 3

Urobte niečo podobné, ale s náhodnými obdĺžnikmi. Majú náhodnú šírku a výšku z rozsahu 0,200. A ich poloha sa generuje tak, aby na okraji obrazovky zostala voľná 20 pixelová hranica, do ktorej nesmú zasahovať:

Riešenie
void setup()
{
  size(400, 400);
  background(0);
  fill(255, 255, 0);
}

void draw()
{
  float a = random(0, 200);
  float b = random(0, 200);
  float x = random(20, width-a-20);
  float y = random(20, height-b-20);
  rect(x, y, a, b);
}

Úloha 4

Vytvorte skeč, ktorý pri stlačení myši vykreslí bublinu so stredom v myši. Bublina má taký veľký priemer, aká je vertikálna súradnica myši:

Riešenie
void setup()
{
  size(400, 400);
  background(0,0,255);
  noFill();
  stroke(255);
}

void mousePressed()
{
  circle(mouseX, mouseY, mouseY);  
}

void draw()
{
}

Úloha 5

Upravte program tak, aby boli veľké bubliny hore a malé dole:

Riešenie
void setup()
{
  size(400, 400);
  background(0,0,255);
  noFill();
  stroke(255);
}

void mousePressed()
{
  circle(mouseX, mouseY, height-mouseY);  
}

void draw()
{
}

Úloha 6

Vráťte program naspäť, aby znova boli väčšie bubliny dole. Ale tento raz nech sú 5-krát menšie ako je mouseY:

Riešenie
void setup()
{
  size(400, 400);
  background(0,0,255);
  noFill();
  stroke(255);
}

void mousePressed()
{
  circle(mouseX, mouseY, mouseY/5);  
}

void draw()
{
}

Úloha 7

A znova otočte veľkosti bublín, takže teraz sú malé bubliny dole, ale zachovajte to, že sú 5x menšie:

Riešenie
void setup()
{
  size(400, 400);
  background(0,0,255);
  noFill();
  stroke(255);
}

void mousePressed()
{
  circle(mouseX, mouseY, (height-mouseY)/5);  
}

void draw()
{
}

Úloha 8

Vytvorte skeč, ktorý bude kresliť obdĺžniky, ktoré začínajú na predošlej pozícii myši (pmouseX, pmouseY) a končia na súčasnej pozícii myši (mouseX, mouseY). Vo výsledku tak rýchle pohyby myšou budú tvoriť väčšie obdĺžniky, lebo myš sa stihla viac vzdialiť od predošlej pozície:

Nakreslite si to najprv na papier. Jeden bod je pmouseX, pmouseY a druhý bod je mouseX, mouseY. Na akých súradniciach má obdĺžnik začínať? Akú má mať šírku a výšku?

Riešenie
void setup()
{
  size(400, 400);
  background(0);
  stroke(255);
}

void draw()
{
  rect(pmouseX, pmouseY, mouseX - pmouseX, mouseY - pmouseY);
}

Úloha 9

Vytvorte skeč, ktorý pri stlačení myši vykreslí na pozíciu myši balón. Balón má šírku 50, výšku 100, má náhodnú farbu a má na sebe aj malý biely odlesk:

Riešenie
void setup()
{
  size(400, 400);
  background(0);
  noStroke();  
}

void mousePressed()
{
  fill(random(256), random(256), random(256));
  ellipse(mouseX, mouseY, 50, 100);
  fill(255);
  ellipse(mouseX-15, mouseY-20, 5,10);
}

void draw()
{
}

Úloha 10

Upravte svoj skeč tak, aby veľkosť balóna bola náhodná. Rozsah rozmerov si zvoľte sami, ale zabezpečte, aby bol balón vždy natiahnutý do výšky. Dajte tiež pozor, aby odlesk nevyliezol von z balóna.

Riešenie
void setup()
{
  size(400, 400);
  background(0);
  noStroke();  
}

void mousePressed()
{
  fill(random(256), random(256), random(256));
  
  float sirka = random(20,50);
  float vyska = random(sirka,100);
  
  ellipse(mouseX, mouseY, sirka, vyska);
  fill(255);
  ellipse(mouseX-sirka/4, mouseY-vyska/3, sirka/10, vyska/10);
}

void draw()
{
}

Last updated