Параметрический Цветочек
Опубликовано 14 ноября, 2024 - 12:53 пользователем Савинцев Александр
Лекция:
Точки для построения основы цветка вычисляются в функции makeStar()
function makeStar(X, Y, scale, seed){ let tmpArr = []; for (let t = 0; t <= 2*Math.PI; t+=Math.PI/seed){ let x = scale*Math.cos(t*19)*Math.tan(t*16); let y = scale*Math.sin(t*19)*Math.tan(t*16); //const newX = x * Math.cos(Math.PI/6) - y * Math.sin(Math.PI/6); //const newY = x * Math.sin(Math.PI/6) + y * Math.cos(Math.PI/6); tmpArr.push(new Point(X+x, Y+y)); } return tmpArr; }
Стебель представлен в виде B-сплайна
function makeBSpline(array){ array.unshift(array[0]); array.unshift(array[0]); array.push(array[array.length-1]); array.push(array[array.length-1]); let tmpArr = []; for (let i = 1; i < array.length-2; i++){ let a0 = (array[i-1].x + 4*array[i].x + array[i+1].x)/6; let a1 = (-array[i-1].x + array[i+1].x)/2; let a2 = (array[i-1].x - 2*array[i].x + array[i+1].x)/2; let a3 = (-array[i-1].x + 3*array[i].x - 3*array[i+1].x + array[i+2].x)/6; let b0 = (array[i-1].y + 4*array[i].y + array[i+1].y)/6; let b1 = (-array[i-1].y + array[i+1].y)/2; let b2 = (array[i-1].y - 2*array[i].y + array[i+1].y)/2; let b3 = (-array[i-1].y + 3*array[i].y - 3*array[i+1].y + array[i+2].y)/6; for (let t = 0; t <= 1; t+=0.05) { let x = ((a3*t + a2)*t + a1)*t + a0; let y = ((b3*t + b2)*t + b1)*t + b0; tmpArr.push(new Point(x, y)); } } return tmpArr; }
seedOne и seedTwo служат для изменения основы цветка. worldColor изменяет цвет.
Направление: