int byo = 0; void setup() { size(600, 600); frameRate(0.5); } void draw(){ background(255); dragon(200, 140, 450, 500, byo); byo ++; if(byo > 18){ byo = 0; } } void dragon(float x1, float y1, float x2, float y2, int n) { if (n > 0) { float ang = angle(x1, y1, x2, y2); float d = dist(x1, y1, x2, y2); float mx = (x1 + x2) / 2.0 + d / 2 * cos(ang + PI/2); float my = (y1 + y2) / 2.0 + d / 2 * sin(ang + PI/2); if (n == 1) { line(x1, y1, mx, my); line(x2, y2, mx, my); } else { dragon(x1, y1, mx, my, n-1); dragon(x2, y2, mx, my, n-1); } }else{ line(x1, y1, x2, y2); } } float angle(float x1, float y1, float x2, float y2) { float angle = 0.0; if (x1 == x2) { if (y1 < y2) return PI/2.0; if (y1 > y2) return -PI/2.0; if (y1 == y2) return 0.0; } angle = atan((y2-y1)/(x2-x1)); if (x1 > x2) angle -= PI; if (angle < 0.0) angle += PI*2.0; if (angle > PI*2.0) angle -= PI*2.0; return angle; }