Побудови по колу

Побудови по колу передбачають використання рівняння кола:

x=r cos f
y=r sin f

де f змінюється по всій довжині кола (від 0 до 2π), яку треба розбити на певну (n) кількість частин (сторін); після проходження сторони відбувається поворот на певну кількість градусів.

360°= 2π

180°= π

90°= π/2




size(500,500);

int n=36;  //кількість поворотів, або сторін

float f=0 ; //початковий кут

float df= 2*PI/n  ; //кут повороту такий, щоб за n кроків пройти 2π

int r=200; // радіус

strokeWeight(6); 

for (int promin=0; promin<n; promin++)  //для кожного з n променів

{

    int x= 250+round(50*cos(f)); //обчислюємо координату х за рівнянням кола

    int y= 250+round(50*sin(f)); //обчислюємо координату у за рівнянням кола

    point (x, y); //малюємо точку х,у

    f += df; //змінюємо кут f на значення повороту

}

  



Намалюємо сніжинку з ліній, що з'єднують центр полотна з точками на колі:

size(500,500);

int n=16;  //кількість поворотів, або сторін

float f=0 ; //початковий кут

float df= 2*PI/n  ; //кут повороту такий, щоб за n кроків пройти 

int r=50; //радіус, довжина променя сніжинки

for (int promin=0; promin<n; promin++)  //для кожного з n променів

{

    int x= 250+round(r*cos(f)); //обчислюємо координату х за рівнянням кола

    int y= 250+round(r*sin(f)); //обчислюємо координату у за рівнянням кола

    line (250, 250, x, y); //малюємо лінію з точки 250,250 до точки х,у

    f += df; //змінюємо кут f на значення повороту

}

  


Побудова кола за рівнянням кола

Зміст побудови кола за рівнянням кола зводиться до того, що лінії потрібно малювати не від центру до окремих точок кола, а від попередньої точки до поточної. При цьому кількість сторін (поворотів) має бути досить великою, щоб окремі з багатьох коротких ліній утворилась лінія кола.

size(500,500);

int x1= 250+round(r*cos(f)); // перша точка кола

int y1= 250+round(r*sin(f)); // перша точка кола

for (int promin=0; promin<=n; promin++)  //для кожної лінії

{

    int x2= 250+round(r*cos(f)); //обчислюємо координату х за рівнянням кола

    int y2= 250+round(r*sin(f)); //обчислюємо координату у за рівнянням кола

    line (x1, y1,x2,y2); //малюємо лінію з точки x1, y1 до точки х2, у2

    f += df; //змінюємо кут f на значення повороту

    x1=x2; //друга точка стає початковою для наступної лінії

    y1=y2; //друга точка стає початковою для наступної лінії

}

 


Команди побудови кола можна занести у функцію kolo, і побудувати 30 кіл різного розміру та кольору:

for  (int i=0; i<30; i++) {

  int red=int(random(255));

  int green=int(random(255));

  int blue=int(random(255));

  color c=color(red,green,blue);

  stroke (c);

  int x=int(random(450)+25);

  int y=int(random(450)+25);

  int r=int(random(50));

  kolo (x,y,r,c);

}

   

Анімація - рух по синусоїді

Для анімації використаємо функцію draw, в якій  відбувається обчислення координат побудови кола: х збільшується прямолінійно, а у - відповідно до рівняння кола. 


void draw() 

{   

  x = x+5;  

  y = 120 + sin(f) * r;   

  ellipse( x, y, 40, 40);   

  f += df; 

}


Такий механізм часто використовується для моделювання анімації руху об'єктів. Зокрема, використовується формула: 
f(t)=A sin(ωt+φ), де t - час, А - амплітуда, ω - частота, φ - фаза






Остання зміна: понеділок 4 червня 2018 9:46