algorytm obliczania wartości sinus

0

Znalazłem w necie algorytm, który rysuje funkcję sinus. Wszystko pięknie działa, ale usiłuję ten algorytm zrozumieć i za chiny nie mogę.

PointF[] points = new PointF[450];
for (int i = 0; i<points.Length; i++)
            {
                
                //to rozumiem
                points[i].X = i;
                
                //tego nie rozumiem - tzn. już doszedłem dlaczego "1-...", ale nie rozumiem dlaczego 2/(1-...) - po co to głupie dzielenie?
                // i nie rozumiem dlaczego jest "i*2*..."
                points[i].Y =100 / 2 * (1 - (float)Math.Sin(i * 2 * Math.PI / 200));

                
            }
 
1

Tam nie masz 2/(1-..., tylko 50 * (1 - ... - wygląda na to, że chodzi o skalowanie po prostu.

3

To nie jest algorytm tylko skalowanie.
Liczba 50 (100/2) odpowiada za wysokość wykresu.
Część "1-" odpowiada za odwrócenie względem osi Y i przesunięcie ofsetowe na osi Y.
Część "* 2 * PI / 200" odpowiada za szerokość wykresu względem okresu funkcji. Im większy mnożnik tym impulsy będą częstsze.

0

A o co chodzi z tym skalowaniem?

edit:
Sory, za szybko zapytałem. Przeanalizuję i się zobaczy.

0

Okej, a skąd ??? tzn. dlaczego jest "2*pi/200" ? Tak się zastanawiam...chyba matma się kłania, ale serio...nie pamiętam tego po prostu i nie wiem z czego to wynika.

vpiotr napisał(a):

To nie jest algorytm tylko skalowanie.
Liczba 50 (100/2) odpowiada za wysokość wykresu.
Część "1-" odpowiada za odwrócenie względem osi Y i przesunięcie ofsetowe na osi Y.
Część "* 2 * PI / 200" odpowiada za szerokość wykresu względem okresu funkcji. Im większy mnożnik tym impulsy będą częstsze.

0
finito napisał(a):

Okej, a skąd ??? tzn. dlaczego jest "2*pi/200" ? Tak się zastanawiam...chyba matma się kłania, ale serio...nie pamiętam tego po prostu i nie wiem z czego to wynika.

Ta liczba może być dowolna - w zależności od tego jak chcesz żeby wyglądał wykres.
Akurat tu masz to ładnie podane czyli okres (= 2 * PI) jest rozrzedzony 200 razy. Czyli to co powinno być w punkcie x = PI, pojawi się w punkcie x = PI*200.
Narysuj wykres i poeksperymentuj z tymi wartościami.

0

A o co chodzi z tym skalowaniem?

O to że sinus przyjmuje wartości rzeczywiste od -1 do +1, a okresem funkcji jest liczba niewymierna, co się nijak ma do skończonej i dyskretnej rozdzielczości monitora.

0

A to w takim razie jeszcze jedno:
Czy to: 2pi/200 oznacza to samo co to (2pi)/200 ??? bo wydawało mi się, że nie...

1

To Ci się źle wydawało. Ale 200/2pi, to coś zupełnie innego niż 200/(2pi).

1 użytkowników online, w tym zalogowanych: 0, gości: 1