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

Program do rysowania funkcji w c++ lub c#

0 głosów
1,534 wizyt
pytanie zadane 21 października 2016 w C i C++ przez maciek221 Początkujący (300 p.)
Witam :) chciałbym się dowiedzieć jak napisać program który mógłby rysować funkcje typu sinusów, cosinus itp :) Chcę to zrobić w visualu w języku c++ lub c# :)

1 odpowiedź

0 głosów
odpowiedź 22 października 2016 przez niezalogowany

Chodzi o rysowanie pictureboxie?

Załóżmy, że masz funkcję y=2*x

Po prostu zrób pętlę, która będzie co pixel rysowała linię między dwoma punktami różniącymi się współrzędną x o 1 (1 pixel). Czyli rysujemy od punktu (x, y(x)) do punktu (x+1, y(x+1)) tylko zamiast y(x) dajesz y = 2*x czyli naszą funkcję, a dla y(x+1) = 2*(x+1)

W funkcji pictureBox1_Paint(...) robisz pętlę:

for(int x = 0; (x+1)<pictureBox1->Width; x++)
      e->Graphics->DrawLine(Pens::Black,x,2*x,x+1,2*(x+1));

Powiedzmy najprostszy przykład. Nie ma osi układu ale to się da zrobić za pomocą linii (zakończonej strzałką). Zauważ, że podana funkcja wyjdzie trochę inna. W pictureboxie obowiązują współrzędne ekranowe i one zaczynają się od lewego górnego rogu ekranu. Do tego oś Y ekranowa jest odwrócona w stosunku do kartezjańskiego (dlatego nasza funkcja jest malejąca). Musiałbyś zrobić funkcję cplusplusową, która np będzie przeliczała współrzędne. Do tego współrzędne te trzeba odpowiednio skalować, bo czasami funkcja jest za mała czy za duża. Np funkcja sinus nie ma na y więcej niż 1, więc bez odpowiedniego "powiększenia" nie będzie sensu jej rysować.

Przykładowy link do przeliczania współrzędnych: http://etacar.put.poznan.pl/sylwester.przybyl/forstudents.html
np w kodzie dla krzywych Lissajous. 

 

komentarz 22 października 2016 przez maciek221 Początkujący (300 p.)
A gdybym chciał to zrobić za pomocą osi wspł ?
komentarz 22 października 2016 przez niezalogowany
Tak jak napisałem w komentarzu musisz narysować ręcznie osie za pomocą DrawLine.
komentarz 22 października 2016 przez maciek221 Początkujący (300 p.)
A mógłbyś podać przykładowy kod który bo to robił :P ?
komentarz 22 października 2016 przez niezalogowany

Przykładowy kod miałeś w linku, który dałem :P

Graphics^ grafika = e->Graphics;
Pen^ pioro1 = gcnew Pen(Color::Green);
pioro1->EndCap = Drawing2D::LineCap::ArrowAnchor;

int yk = pictureBox1->Height;
int xk = pictureBox1->Width;

grafika->DrawLine(pioro1, 0, yk/2, xk, yk/2 );  // oś x
grafika->DrawLine(pioro1, xk/2, yk, xk/2, 0);  // oś y

for(int x = 0; (x+1)<pictureBox1->Width; x++)
	 grafika->DrawLine(Pens::Black,x,2*x,x+1,2*(x+1));

Podobne pytania

0 głosów
7 odpowiedzi 6,477 wizyt
pytanie zadane 21 sierpnia 2016 w Systemy operacyjne, programy przez niezalogowany
0 głosów
1 odpowiedź 693 wizyt
0 głosów
2 odpowiedzi 1,862 wizyt
pytanie zadane 17 grudnia 2016 w C i C++ przez makkor Początkujący (310 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...