• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

rysowanie wykresu sinusa z '*'

Cloud VPS
0 głosów
1,506 wizyt
pytanie zadane 15 listopada 2017 w C i C++ przez michalnt Użytkownik (520 p.)

Witam, mam za zadanie narysować wykres sinusa z gwiazdek do 2 PI, od -1 do 1, co 30° począwszy od 0. Wiem, że trzeba zrobić jakby 2 trójkąty jeden z 4 poziomów, od poziomu podstawy zacząć stawiać znak od lewej potem idąc poziom w górę dodając zawsze 1 spacje więcej potem stawiając gwiazdkę analogicznie do drugiej strony, a 2 trójkąt odwrócić. Zrobiłem na razie tyle, ale nie mam pojęcia jak zacząć rysować to.

#include <stdio.h>
#include <math.h>

#define M_PI       3.14159265358979323846
int main()
{
float x;
int h=3;
float tabw[13];
for(int i=0;i<=360;i=i+30)
{
	x= i*(M_PI/180);
	//printf("%f\n",sin(x));
	int j=0;
	
	tabw[j]=sin(x);
	j++;
x=0;
}
printf("%f",tabw[0]);

return 0;	
}

 

1 odpowiedź

0 głosów
odpowiedź 15 listopada 2017 przez Benek Szeryf (93,190 p.)

Na początku musisz stworzyć płótno, na którym narysujesz wykres. Wiemy, że x mieści się w zakresie ~6.3 (= 2*pi), natomiast y zmienia się od -1 do 1, czyli w zakresie 2. 

/|\
 |
 |  dy = 2
 |
 |- - - - - - - - - - - - - - - - - - - >
                 dx = 6.3

Ponadto rozdzielczość pozioma punków ma wynosić pi/6 (= 30 stopni), co odpowiada 0.52, zaokrąglając w górę 0.55. Powinieneś więc stworzyć tablicę tablic, której poziomy rozmiar wynosi minimum 6.3/0.55 ~ 12. Pionowy rozmiar policzymy z proporcji 2/6.3*12 ~ 4. Ale czy aby na pewno to wystarczy? Niekoniecznie z pomocą 4 "kratek" dostrzeżemy zmiany, by skojarzyć je z sinusem.

Trzeba to zrobić bardziej ogólnie. Załóżmy, że poziomy rozmiar to N (N > 11), więc pionowy to będzie M = int(2/6.3*N). Dalej musimy policzyć krok dx = int(0.55/6.3*N). Potem dla każdej wielokrotności pi/6 liczysz wartość y i odpowiednio skalujesz, znając M:

/|\ i =
 |  0
 |  1
 |  2
 | ...
 | M-2
 | M-1 
 - - - - - - - - - - - - ->
j = 0  1  2  3 ... N-2 N-1

To się da zrobić, kilka lat temu rysowałem w ten sposób okręgi i elipsy, wykorzystując ich równania. Zmieniałem ich parametry (rozmiar, mimośród) i działało. Jeśli okno konsoli jest za małe, by wyświetlić funkcję, to przekieruj output do pliku i podejrzyj jego zawartość.

Podobne pytania

0 głosów
1 odpowiedź 2,637 wizyt
pytanie zadane 17 maja 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 6,139 wizyt
pytanie zadane 19 grudnia 2017 w C i C++ przez supergosc44 Początkujący (270 p.)
0 głosów
1 odpowiedź 7,827 wizyt
pytanie zadane 24 lipca 2016 w C# przez PytamBoNieWiem Nowicjusz (120 p.)

93,485 zapytań

142,417 odpowiedzi

322,764 komentarzy

62,896 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...