Matematyka wizualnie - wykreślamy krzywe

 

Robert Mangold, Malowidła kolumnowe, 2004

Dzisiaj luźna inspiracja pracami amerykańskiego malarza i grafika Roberta Mangolda. Nie będziemy jednak sami wybierać położenia i kierunku linii na płótnie, zrobi to za nas funkcja rysująca konkretną krzywą w oparciu o matematyczny wzór.



Ja wybrałam ciekawą wizualnie krzywą Lissajous, której szczegółowy opis oraz funkcję rysującą znalazłam w książce "Matematyka dla programistów. JavaScript" Jacka Piechoty (książka zawiera więcej przykładów krzywych wraz z propozycjami ich zaprogramowania).



Funkcja (plik JavaScript):

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var w = canvas.width;
var h = canvas.height;

var lissajous = function(A1, A2, w1, w2, fi1, fi2, points, strokeStyle){
   ctx.save();
   ctx.beginPath();
   ctx.strokeStyle = strokeStyle;
   ctx.translate(w/2, h/2);
   var x2;
   var y2;
   for(var i = 0; i < points; i++){
      var t = i * Math.PI / 360;
      x2 = A1 * Math.cos(w1 * t + fi1);
      y2 = A2 * Math.cos(w2 * t + fi2);
      ctx.lineTo(Math.floor(x2), Math.floor(y2));
   }
   ctx.stroke();
   ctx.restore();
}

W pliku HTML wywołamy funkcję lissajous() i przekażemy jej argumenty:

<body>
   <script>
      lissajous(150, 70, 3, 4, Math.PI/4,  Math.PI/2, 1000, "black")
   </script>
</body>

I gotowe!

Komentarze

Popularne posty