krzywe parametryczne


Projekt zawiera klasy krzywych:

  • spirala logarytmiczna (plik log.l)
  • krzywa lissajous (plik lissajous.l)
  • krzywa motylkowa (plik motylkowa.l)

Projekt ilustruje schemat podziału programu na pliki. Otwórz i uruchom program zawarty w pliku krzywe_sl.l. Program jest bardzo prosty: tworzy obiekt o wybranym typie krzywej i na podstawie parametrów tej krzywej tworzy suwaki. Przy pomocy instrukcji include program dołącza definicje krzywych znajdujące się w osobnych plikach.

Dzięki podziałowi na klasy i pliki definicje krzywych również są czytelnymi, krótkimi fragmentami kodu. Na wzór jednej z krzywych możesz stworzyć własną. Konieczne jest zachowanie konwencji:

  • nowa klasa dziedziczy z klasy krzywa: use krzywa :c
  • konstruktor ma jeden argument: kolor krzywej
  • w konstruktorze możesz zdefiniować dowolne parametry krzywej wg shematu:

    :param,"nazwa := {p0 pmin pmax krok}

    "nazwa - słowo-nazwa parametru
    p0 - początkowa wartość parametru, wartość z zakresu < pmin; pmax >
    pmin - dolna granica wartości parametru
    pmax - górna granica wartości parametru
    krok - skok wartości podczas zmiany parametru (można go pominąć, wtedy zmiana parametru będzie ciągła)
  • klasa zawiera definicję funkcji fn, która jest odpowiedzialna za narysowanie krzywej.

Każdy plik z definicją krzywej powinien dołączać plik z definicją klasy bazowej, ale tak by jednocześnie uniknąć wielokrotnego dołączania pliku:

if not defined? "krzywa [include "krzywa.l]

Klasa bazowa zawiera prototyp funkcji fn oraz całą maszynerię konieczną do odmalowania krzywej po zmianie rozmiaru czy skali okna graficznego, obsługę zmiany parametrów, itp.

Spróbuj dodać do projektu plik z klasą dla krzywej asteroida:

to asteroid :c
  use krzywa :c
  to fn
    pu setxy :s 0 pd
    for [t 0 360] [
      if :stop [stop]
      let "x :s * (cos :t)^:k
      let "y :s * (sin :t)^:k
      setxy :x :y
    ]
  end

  :param,"K := {3 1 13 2}
  :param,"S := {150 10 300 1}
end

pobierz projekt