Zielony Smok - logo witryny

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.

Zawartość możesz zobaczyć w
przeglądarce obsługującej element <canvas>
z kontekstem "2d"

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);