better readability
yeah, for the personal historical reasons, i will leave these Ukrainian code comments untranslated :)
This commit is contained in:
parent
5005331732
commit
b9c22554dc
21
tree.js
21
tree.js
@ -1,33 +1,34 @@
|
|||||||
const balance_angle = angle => angle * (Math.PI / 180)
|
const angle2rad = angle => angle * (Math.PI / 180)
|
||||||
|
|
||||||
const stem = (ctx, x1, y1, length, angle) => {
|
const stem = (ctx, x1, y1, length, angle) => {
|
||||||
// Визначити координати кіня стовбура знаючи почткову точку стовбура, його довжину та кут нахилу. Так, це тригонометрія в дії :)
|
// Визначити координати кіня стовбура знаючи почткову точку стовбура, його довжину та кут нахилу
|
||||||
const balanced_angle = balance_angle(angle)
|
// Так, це тригонометрія в дії :)
|
||||||
let x2 = x1 + length * Math.sin(balanced_angle);
|
const alpha = angle2rad(angle)
|
||||||
let y2 = y1 - length * Math.cos(balanced_angle);
|
let x2 = x1 + length * Math.sin(alpha);
|
||||||
|
let y2 = y1 - length * Math.cos(alpha);
|
||||||
|
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.moveTo(x1, y1);
|
ctx.moveTo(x1, y1);
|
||||||
ctx.lineTo(x2, y2);
|
ctx.lineTo(x2, y2);
|
||||||
ctx.lineWidth=length/10; // товщина стовбура залежить від його довжини
|
ctx.lineWidth=length / 10; // Товщина стовбура залежить від його довжини
|
||||||
ctx.stroke();
|
ctx.stroke();
|
||||||
ctx.closePath();
|
ctx.closePath();
|
||||||
|
|
||||||
// Закоментуй цей IF. Що змінилось в картинці дерева? Чому стало гірше?
|
// Закоментуй цей IF. Що змінилось в картинці дерева? Чому стало гірше?
|
||||||
if (length > 20) {
|
if (length > 20) {
|
||||||
x2 = x1 + (length * 0.95) * Math.sin(balanced_angle);
|
x2 = x1 + (length * 0.95) * Math.sin(alpha);
|
||||||
y2 = y1 - (length * 0.95) * Math.cos(balanced_angle);
|
y2 = y1 - (length * 0.95) * Math.cos(alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length > 1) {
|
if (length > 1) {
|
||||||
const rnd1 = Math.random() *20 -10; // [-10.0 .. +10.0]
|
const rnd1 = Math.random() *20 -10; // [-10.0 .. +10.0]
|
||||||
const rnd2 = Math.random() *0.2 +0.6; // [ 0.6 .. 0.8]
|
const rnd2 = Math.random() *0.2 +0.6; // [ 0.6 .. 0.8]
|
||||||
|
|
||||||
// Малюємо розгалудження стовбура. За початок нового стовбура використовується кінець поточного стовбура
|
// Рекурсивно малюємо розгалудження стовбура
|
||||||
|
// В якості початку нового стовбура використовується кінець поточного стовбура
|
||||||
stem(ctx, x2, y2, length * rnd2, angle + 35 +rnd1);
|
stem(ctx, x2, y2, length * rnd2, angle + 35 +rnd1);
|
||||||
stem(ctx, x2, y2, length * rnd2, angle - 25 +rnd1);
|
stem(ctx, x2, y2, length * rnd2, angle - 25 +rnd1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const tree = (ctx, x, y, height) => stem(ctx, x, y, height, 0);
|
const tree = (ctx, x, y, height) => stem(ctx, x, y, height, 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user