Processing Recursion#3 Triangles
Не опять, а снова.
by schrodingers
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/processing.js/1.4.15/processing.js"></script>
<canvas></canvas>
CSS
body {
overflow: hidden;
margin: 0;
padding: 0;
}
</style> <script type="text/javascript"> window.addEventListener('load', function() {
var scripts=document.body.getElementsByTagName('script');
var canvases=document.body.getElementsByTagName('canvas');
new Processing(canvases[0], scripts[0].text);
}
, false);
// Here prevent javascript in body from throwing error </script> <style>
JavaScript
/*
title: Recursion#3 (Triangles)
date: 2015-07-23
*/
float cx = width / 2;
float cy = height / 2;
PVector p1;
PVector p2;
PVector p3;
float l = 300;
float num = 7;
float x = 0;
float y = 0;
float h = 300; // side length
//float hh = (300 * sqrt(3.0) / 2.0); //tr height
void setup() {
size(600, 600);
smooth(8);
noLoop();
}
void draw() {
fill(33);
// triangle(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
// sierp(4, p1, p2, p3);
tria(100, 160, 300, 5);
}
void sierp(float lvl, PVector p1, PVector p2, PVector p3) {
p1 = new PVector(0, h);
p2 = new PVector(h / 2, 0);
p3 = new PVector(h, h);
//base case
if (lvl > 1) {
lvl = lvl - 1;
PVector q1 = dist(p1.x, p2.y);
PVector q2 = dist(p2.x, p3.y);
PVector q3 = (p1.x, p3.y);
fill(222);
triangle(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
} else {
sierp(lvl - 1, p1, q1, p6);
sierp(lvl - 1, q1, p2, q2);
sierp(lvl - 1, q3, q2, p3);
}
}
void tria() {
//base
fill(166);
triangle(x, l, l / 2, 0, l, l);
if (num > 1) {
fill(185);
//middle triangle
scale(0.5);
triangle(x + l / 2, y + l, l, 2 * l, l + l / 2, y + l);
//top
scale(0.5);
translate(l, 0);
triangle(x + l / 2, y + l, l, 2 * l, l + l / 2, y + l);
//right
translate(l, 2 * l);
triangle(x + l / 2, y + l, l, 2 * l, l + l / 2, y + l);
//left
translate(-2 * l, 0);
triangle(x + l / 2, y + l, l, 2 * l, l + l / 2, y + l);
// tria(x,y,l,num-1);
}
}