Что такое треугольник Серпинского?
Треугольник Серпинского — это фрактальный и привлекательный фиксированный набор, имеющий общую форму равностороннего треугольника. Он рекурсивно делится на меньшие треугольники.
Каков его рекурсивный подход?
Возьмем все три координаты равностороннего треугольника P1(x1, y1), P2(x2, y2) и P3(x3, y3). Возьмем любую точку X1(x4, y4) внутри треугольника. Теперь случайным образом выберите любую из точек формы P1, P2, P3 и нарисуйте другую точку X2, которая является средней точкой от X1.
function setup() { // Sets the screen to be 720 pixels wide and 400 pixels high createCanvas(710, 400, WEBGL); } //seirpinski triangle function draw(){ normalMaterial(); orbitControl(); background(250); translate(140, 0); // Making equilateral triangle //first triangle f_x = [0, 250, 125] f_y= [0, 0, 216.5] f_z = [0,0, 0] //Second triangle s_x = [ 250, 125, 125] s_y= [0, 216.5, 0] s_z = [0, 0, 216.5] //Third triangle t_x = [0, 125, 125] t_y= [0, 216.5, 0] t_z = [0, 0, 216.5] //Fourth triangle fr_x = [0, 250, 125] fr_y= [0, 0, 0] fr_z = [0,0, 216.5] //Rangdom Point for first Traingle let f__x = [10] let f__y = [10] let f__z = [0] //Rangdom Point for Second Traingle let s__x = [187.5] let s__y = [108.25] let s__z = [0] //Rangdom Point for third Traingle let t__x = [125] let t__y = [0] let t__z = [0] //Rangdom Point for fourth Traingle let fr__x = [62.5] let fr__y = [108.25] let fr__z = [0] //console.log(f_x) //console.log(f_y) //console.log(f_z) counter =0 a = 0 b = 2 translate(-200, -150, 0); for(i =0; i< 3000; i++){ //rendomly selecting any of three point first = Math.floor(Math.random()*(b-a+1))+a; console.log(first) //finding Mid Point mid_x = ((f_x[first] + f__x[counter])/2) mid_y = (f_y[first] + f__y[counter])/2 mid_z = (f_z[first] + f__z[counter])/2 translate( mid_x, mid_y, mid_z); sphere(2); translate( -mid_x, -mid_y, -mid_z); f__x[counter] = mid_x f__y[counter] = mid_y f__z[counter] = mid_z mid_x = ((s_x[first] + s__x[counter])/2) mid_y = (s_y[first] + s__y[counter])/2 mid_z = (s_z[first] + s__z[counter])/2 translate( mid_x, mid_y, mid_z); sphere(2); translate( -mid_x, -mid_y, -mid_z); s__x[counter] = mid_x s__y[counter] = mid_y s__z[counter] = mid_z mid_x = ((t_x[first] + t__x[counter])/2) mid_y = (t_y[first] + t__y[counter])/2 mid_z = (t_z[first] + t__z[counter])/2 translate( mid_x, mid_y, mid_z); sphere(2); translate( -mid_x, -mid_y, -mid_z); t__x[counter] = mid_x t__y[counter] = mid_y t__z[counter] = mid_z mid_x = ((fr_x[first] + fr__x[counter])/2) mid_y = (fr_y[first] + fr__y[counter])/2 mid_z = (fr_z[first] + fr__z[counter])/2 translate( mid_x, mid_y, mid_z); sphere(2); translate( -mid_x, -mid_y, -mid_z); fr__x[counter] = mid_x fr__y[counter] = mid_y fr__z[counter] = mid_z } }
координата Xn = средняя точка (Xn-1) и любая (P1, P2, P3). Повторите этот процесс не менее 3000 раз.