Visual c++ - całkowanie metodą monte carlo

0

Witam, w szkole zaczęliśmy visual c++. Mam projekt w którym muszę zrobić jakieś pole w którym użytkownik będzie mógł narysować dowolną figurę, następnie po naciśnięciu buttona losuje punkty i sprawdzam czy jest białe tło czy jakiś kolor.

Nie mam kompletnie pojęcia jak się za to zabrać, najgorsze jest to pole do rysowania. Ma ktoś może jakiś pomysł od czego zacząć? Smile
Pozdrawiam
user image

0

Znalazłem jak zrobić "paintbox" ale tylko w visual C#... Próbowałem to jakoś przerobić ale bez skutku.
http://www.centrumxp.pl/dotNet/761,Mini-Paint-w-C.aspx - Artykuł w którym opisane jest jak zrobić mini painta
http://4programmers.net/Pastebin/2325 - Moje próby przerobienia na C++

Nie mam pojęcia jak to zrobić, projekt muszę oddać w poniedziałek. Jak bym zrobił to rysowanie figur to później już bez problemu zrobił bym obliczanie pola metodą monte carlo.
Jest ktoś w stanie mi coś podpowiedzieć? :)

0

Dzięki, widziałem już te strony. Pierwsza to jakaś masakra, a drugie spoko ale, mój form wygląda tak:
form.png
I nic nie da się zrobić, żadne "klikanie" nie działa :(

0

Samo się nie zrobi :) Co Ty byś chciał. Ten komponent służy tylko za powierzchnię do rysowania, resztę musisz sobie zaprogramować.

0

No to z moją wiedzą lepiej sobie chyba przerobić to (http://www.centrumxp.pl/dotNet/761,Mini-Paint-w-C.aspx) tylko jak? :/

0

W sumie z tego "tutoriala" którego podałem wyżej, rozumiem wszystko itd.
Największy problem mam z tym że nie wiem w którym miejscu ma być to:

private Graphics g;
private Point p = Point.Empty;
private Pen pioro; 

I jak to ma wyglądać w C++?
Próbowałem tak:

 
private: System::Drawing::Graphics g;
...

Nie mam pojęcia jak zadeklarować te zmienne...

1

Wiedzy niewiele tu potrzeba. Trzeba tylko kojarzyć fakty z dokumentacji.
Masz linijkę:

g->DrawLine(redPen, 0, 0, rect.Width, rect.Height);

No i sobie myślisz:

Aha, pierwszy argument to obiekt "długopisu", a następne 2 argumenty to pozycja x, y początku linii, a kolejne 2 argumenty do pozycja końca linii, tak więc w zdarzeniu kliknięcia muszę odkładać sobie pozycję kliknięcia by potem ją jakoś użyć w tej funkcji by narysować linię, wszystkie kliknięte punkty warto odłożyć w tablicy obiektów typu Point by móc potem narysować ładny wypełniony wielokąt. Następnie potrzebna mi będzie funkcja, która wykryje czy jest na obrazie jakiś zamknięty obszar i go wypełni kolorem w razie spełnienia tego warunku. Tą funkcję wykonam po każdym kliknięciu w kodzie tego samego eventa. Do wypełnienia kolorem użyję funkcji wbudowanej, więc poszukam jak się może nazywać, cyk, cyk, cyk, google... http://msdn.microsoft.com/en-us/library/aa327628%28v=vs.71%29.aspx Odkrywam, że jest funkcja, która narysuje mi ładny wielokąt, więc zmieniam podejście, nie rysuję linii, które wypełnię, tylko przy każdym kliknięciu zaznaczam punkt na obrazku, dużą kropką, którą usunę, gdy wielokąt zostanie zamknięty - pierwsza kropka będzie kolidowała z ostatnią. Wtedy wszystkie śmieci na płótnie usuwamy i rysujemy wielokąt, po czym liczymy całkę pixelową.

No i tyle takiego głośnego myślenia, kolizję okręgów możesz łatwo zaprogramować sam. Odległość punktów na płaszczyźnie + promień koła.

0

Dzięki wielkie, w teorii wiem jak to powinno wyglądać w praktyce jednak lipa straszna. Próbowałem coś napisać i nie wychodzi mi to zbytnio :/ Tak jak pisałem w pierwszym poście visuala dopiero zacząłem się uczyć, na lekcjach jedyne co robiliśmy to jakiś marny kalkulator i takie tam.

Zawieszam na razie próby zrobienia tego tak jak napisałeś powyżej, chociaż coś takiego by bardziej pasowało niż to z tego tutoriala.

Ponawiam moje pytanie jak ma wyglądać deklaracja tych zmiennych w C++:

C#:

private Graphics g;
private Point p = Point.Empty;
private Pen pioro; 
 

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