Rozety Grandiego
Rozety Grandiego są określone równaniem parametrycznym
x = a*cos(k*t)*cos(t)
y = a*cos(k*t)*sin(t)
Jeśli k jest liczbą całkowitą, to krzywa jest zamknięta i ma k płatków jeśli k jest nieparzyste albo 2k płatków jeśli k jest parzyste.
Gdy k jest liczbą wymierną, to można ją zapisać w postaci ułamka
Gdy d = 2 krzywa będzie miała 4*k = 4*n/d płatków
Gdy n jest mniejsze od d
Gdy k jest liczbą niewymierną, krzywa wypełnia całą przestrzeń
i należy starannie dobrać liczbę rysowanych punktów.
Listing
var rozeta_grandiego = function(a, k, liczbaPunktow, strokeStyle) { ctx.save(); ctx.beginPath(); ctx.strokeStyle = strokeStyle; ctx.translate(w / 2, h / 2); var x1; var y1; var x2; var y2; for ( var i = 0; i < liczbaPunktow; i++) { var t = i * Math.PI / 360; x2 = a * Math.cos(k*t) * Math.cos(t); y2 = a * Math.cos(k*t) * Math.sin(t); ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); x1 = x2; y1 = y2; } ctx.stroke(); ctx.restore(); }; var cv = document.getElementById("canvas"); var ctx = cv.getContext("2d"); var w = cv.width; var h = cv.height; //rozeta_grandiego(100, Math.sqrt(2), 10450, "green"); //ctx.fillText("k=Math.sqrt(2)", w/2, 20); var n = 7; var d = 9; rozeta_grandiego(100, n/d, 3400,"green"); ctx.fillText("n= "+n+", d = "+d, w/2 ,20);