aboutsummaryrefslogtreecommitdiff
path: root/utils/fractal_tree/script.js
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-11-03 13:36:36 +0100
committerCharles Cabergs <me@cacharle.xyz>2020-11-03 13:36:36 +0100
commit383fe7e3f29f366b504b6a3d4a52fd81cb0869b2 (patch)
tree42431018048c8d9670e84ec1063ace3a811c443a /utils/fractal_tree/script.js
parent0bf460197e9d5a477f8ec5072e482203530bcba9 (diff)
downloadcacharle.xyz-383fe7e3f29f366b504b6a3d4a52fd81cb0869b2.tar.gz
cacharle.xyz-383fe7e3f29f366b504b6a3d4a52fd81cb0869b2.tar.bz2
cacharle.xyz-383fe7e3f29f366b504b6a3d4a52fd81cb0869b2.zip
Added fractal tree
Diffstat (limited to 'utils/fractal_tree/script.js')
-rw-r--r--utils/fractal_tree/script.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/utils/fractal_tree/script.js b/utils/fractal_tree/script.js
new file mode 100644
index 0000000..3c658f5
--- /dev/null
+++ b/utils/fractal_tree/script.js
@@ -0,0 +1,55 @@
+const canvas = document.getElementById("tree-canvas")
+const context = canvas.getContext("2d")
+
+let angle = undefined
+
+function tree(length, n) {
+ if (n === 0)
+ return
+ context.beginPath()
+ context.moveTo(0, 0)
+ context.lineTo(0, -length)
+ context.stroke()
+
+ context.save()
+ context.translate(0, -length)
+
+ context.save()
+ context.rotate(angle)
+ tree(length / 2, n - 1)
+ context.restore()
+
+ context.save()
+ context.rotate(-angle)
+ tree(length / 2, n - 1)
+ context.restore()
+
+ context.restore()
+}
+
+const depth_input = document.getElementById("depth")
+const angle_input = document.getElementById("angle")
+
+function draw() {
+ context.clearRect(0, 0, canvas.width, canvas.height)
+ context.save()
+ context.translate(canvas.width / 2, canvas.height)
+ angle = 2 * Math.PI * (parseInt(angle_input.value) / 360)
+ tree(canvas.height / 2, parseInt(depth_input.value))
+ context.restore()
+}
+
+depth_input.addEventListener("input", draw)
+angle_input.addEventListener("input", draw)
+
+function updateCanvas() {
+ const canvas_size = Math.min(window.innerWidth, window.innerHeight - 250)
+ canvas.width = canvas_size
+ canvas.height = canvas_size
+ context.strokeStyle = "#DDDDDD"
+ context.lineWidth = 0.7
+ draw()
+}
+
+window.addEventListener("resize", updateCanvas)
+updateCanvas()