Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //клас для точки
- class point
- {
- float x, y;
- point()
- {
- x = 0; y = 0;
- }
- point(float px, float py)
- {
- x = px; y = py;
- }
- }
- // створюємо точки для початкового відрізку
- point s1 = new point(width / 2, 680), s2 = new point(width / 2, 580);
- void setup() {
- size(800, 800);
- frame.setResizable(true);
- }
- void draw() {
- //ставимо відрізок на центр вікна по горизонталі
- point s1 = new point(width / 2, 680), s2 = new point(width / 2, 580);
- background(0);
- line(s1.x, s1.y, s2.x, s2.y); //малюєм відрізок
- branch(s1, s2, 4); //рекурсивна функція для фрактала
- }
- void branch(point p1, point p2, int n)
- {
- if (n!=0){
- point p3 = new point(), p4 = new point(), p5 = new point(), p6 = new point();
- float coef = 0.75; //коефіцієнт для зміни довжини відрізка
- //задаємо відрізки для генератора за допомогою формул повороту однієї точки відносно іншої
- p3.x = (p2.x-p1.x)*cos(radians(90))*coef - (p2.y-p1.y)*sin(radians(90))*coef + p2.x;
- p3.y = (p2.x-p1.x)*sin(radians(90))*coef + (p2.y-p1.y)*cos(radians(90))*coef + p2.y;
- p4.x = (p2.x-p1.x)*sin(radians(90))*coef + (p2.y-p1.y)*sin(radians(90))*coef + p2.x;
- p4.y = -(p2.x-p1.x)*cos(radians(90))*coef + (p2.y-p1.y)*cos(radians(90))*coef + p2.y;
- float s = 90;
- p5.x = (p4.x-p2.x)*cos(radians(s)) - (p4.y-p2.y)*sin(radians(s)) + p4.x;
- p5.y = (p4.x-p2.x)*sin(radians(s)) + (p4.y-p2.y)*cos(radians(s)) + p4.y;
- s = -0;
- p6.x = (p3.x-p2.x)*sin(radians(s)) + (p3.y-p2.y)*sin(radians(s)) + p3.x;
- p6.y = -(p3.x-p2.x)*cos(radians(s)) + (p3.y-p2.y)*cos(radians(s)) + p3.y;
- stroke(255);
- //малюємо ці лінії
- line(p2.x, p2.y, p3.x,p3.y);
- line(p2.x, p2.y, p4.x,p4.y);
- line(p4.x, p4.y, p5.x,p5.y);
- line(p3.x, p3.y, p6.x,p6.y);
- //викликаємо функцію для кінців генератора
- branch(p4, p5, n-1);
- branch(p3, p6, n-1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement