Hipocykloida
Jest to krzywa kreślona przez punkt M okręgu toczącego się bez poślizgu po wewnętrznej stronie okręgu nieruchomego koła.
Hipocykloida wyrażona jest takim samym równaniem parametrycznym jak epicykloida, ale parametr a jest zamieniony na – a, a symbole są takie same jak przy epicykloidzie.
Kształt krzywej zależy od stosunku
Gdy:
- m=2 krzywa degeneruje do średnicy stałego koła
- m=3 hipocykloida ma 3 ostrza
- m=4 otrzymujemy hipocykloidę o 4 ostrzach nazywaną asteroidą.
Hipotrochoida
Do równania hipocykloidy, w drugim członie każdego równania można wprowadzić dodatkowy parametr λ
Jeżeli:
- λ=1 jak w powyższych wzorach otrzymujemy hipocykloidę
- λ > 0 to otrzymujemy tzw. hipocykloidę wydłużoną
- λ < 0 to otrzymujemy tzw. hipocykloidę skróconą.
Wszystkie trzy hipocykloidy noszą ogólną nazwę hipotrochoida.
W hipotrochoidach gdy krzywa staje się elipsą, gdy A=2a otrzymujemy konchoidę nazywaną też ślimakiem Pascala.
m=3 (A=60, a=20), λ=1
Listing
var hipocykloida = function(AA, aa, lambda, liczbaPunktow, strokeStyle) { ctx.save(); ctx.beginPath(); ctx.strokeStyle = strokeStyle; ctx.translate(w / 2, h / 2); var x1 = AA + (lambda - 1) * aa; var y1 = 0; var x2; var y2; aa = -aa; for (var i = 0; i < liczbaPunktow; i++) { var t = i * Math.PI / 360; x2 = (AA + aa) * Math.cos(t) - lambda * aa * Math.cos((AA + aa) * t / aa); y2 = (AA + aa) * Math.sin(t) - lambda * aa * Math.sin((AA + aa) * t / aa); ctx.moveTo(Math.floor(x1), Math.floor(y1)); ctx.lineTo(Math.floor(x2), Math.floor(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; hipocykloida(60, 20, 1, 2000, "green");
Spróbuj też wywołać krzywe z następującymi
parametrami
m=4 (A=60, a=15), λ=1
hipocykloida(60, 15, 1, 2000, "green");
m=5 (A=60, a=12), λ=1
hipocykloida(60, 12, 1, 2000, "green");
m=4 (A=100, a=25), λ=0.5
hipocykloida(100, 25, 0.5, 2000, "green");
m=4 (A=100, a=25), λ=1.5
hipocykloida(100, 25, 1.5, 2000, "green");
m=4 (A=100, a=-25), λ=0.5
hipocykloida(100, -25, 0.5, 2000, "green");
m=2 (A=100, a=50), λ=1.5
hipocykloida(100, 50, 1.5, 2000, "green");