diff options
| author | julian laplace <julescarbon@gmail.com> | 2025-07-13 16:40:29 +0200 |
|---|---|---|
| committer | julian laplace <julescarbon@gmail.com> | 2025-07-13 16:40:29 +0200 |
| commit | edaae6d07fa1abb1e3a9ae8e113bddd663c89c5b (patch) | |
| tree | b1be07cc75587726926038d48777a58617c7f109 /client | |
| parent | fa85c6c0dfdb074fe7638566bd0cd71d7aaa37c6 (diff) | |
add hyperbolic scale mode
Diffstat (limited to 'client')
| -rw-r--r-- | client/index.js | 28 | ||||
| -rw-r--r-- | client/lib/scales.js | 7 |
2 files changed, 29 insertions, 6 deletions
diff --git a/client/index.js b/client/index.js index 24026fc..a7bdd9e 100644 --- a/client/index.js +++ b/client/index.js @@ -156,6 +156,7 @@ function add(i, j) { Math.round(base_x), Math.round(base_y), ); + const isEqualTemperament = scale.name === "equal"; const div = document.createElement("div"); @@ -187,9 +188,20 @@ function add(i, j) { } let a_inv = a * denominator; let b_inv = b * numerator; - let ba_gcd = gcd(a_inv, b_inv); - let a_disp = a_inv / ba_gcd; - let b_disp = b_inv / ba_gcd; + let a_disp, b_disp; + if (scale.name === "hyperbolic") { + a_inv *= Math.round(base_y) + 1; + b_inv *= Math.round(base_y) + 1; + let ba_gcd = gcd(Math.round(a_inv), Math.round(b_inv)); + a_disp = Math.round(a_inv / ba_gcd); + b_disp = Math.round(b_inv / ba_gcd); + // a_disp = Math.round(a_inv); + // b_disp = Math.round(b_inv); + } else { + let ba_gcd = gcd(a_inv, b_inv); + a_disp = a_inv / ba_gcd; + b_disp = b_inv / ba_gcd; + } frac = Math.log2(isEqualTemperament ? interval : aa / bb) % 1; @@ -322,9 +334,13 @@ function bind() { .addEventListener("click", () => document.querySelector("#help").classList.toggle("visible"), ); - document.querySelector("#pythagorean").addEventListener("click", () => { - scaleMode = scales.findIndex((scale) => scale.name === "pythagorean"); - rebuild(); + Array.from(document.querySelectorAll(".mode")).forEach((el) => { + console.log(el.getAttribute("name")); + el.addEventListener("click", (event) => { + const name = el.getAttribute("name"); + scaleMode = scales.findIndex((scale) => scale.name === name); + rebuild(); + }); }); // Wheel to scroll diff --git a/client/lib/scales.js b/client/lib/scales.js index f122ba0..5e28ea7 100644 --- a/client/lib/scales.js +++ b/client/lib/scales.js @@ -43,6 +43,13 @@ export const scales = [ }, get: (ii, jj, i, j) => [a[i], b[j]], }, + { + name: "hyperbolic", + get: (ii, jj, i, j, x, y) => [ + 1 + (i * (x + 1)) / (y + 1), + 1 + (j * (x + 1)) / (y + 1), + ], + }, // { // name: "triangle", // reset: (x, y, w, h) => { |
