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

rysowanie wykresu sinusa z '*'

Object Storage Arubacloud
0 głosów
1,243 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 (90,870 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,352 wizyt
pytanie zadane 17 maja 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 5,345 wizyt
pytanie zadane 19 grudnia 2017 w C i C++ przez supergosc44 Początkujący (270 p.)
0 głosów
1 odpowiedź 7,380 wizyt
pytanie zadane 24 lipca 2016 w C# przez PytamBoNieWiem Nowicjusz (120 p.)

92,556 zapytań

141,404 odpowiedzi

319,562 komentarzy

61,942 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...