[C++] Pole okręgu wpisanego w kwadrat

shreder221
Użytkownik
Użytkownik
Posty: 181
Rejestracja: 5 cze 2015, o 21:45
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 50 razy
Pomógł: 2 razy

[C++] Pole okręgu wpisanego w kwadrat

Post autor: shreder221 »

Dzień Dobry
Miałem zrobić następujące zadanie
Napisz program pi liczący pole koła wpisanego w kwadrat o boku \(\displaystyle{ 2}\) zgodnie z nastepujacym przepisem:
1 program losuje n punktów o współrzędnych w przedziale \(\displaystyle{ [-1,1]}\)
2 dla każdego punktu sprawdza czy punkt leży wewnątrz koła o promieniu \(\displaystyle{ 1}\) i środku \(\displaystyle{ (0,0)}\) i zlicza punkty lezące wewnątrz koła
oblicza stosunek liczby punktów lezących wewnątrz koła do całkowitej liczby punktów i wylicza pole koła.
Zrobiłem je następująco
Ukryta treść:    

W rezultacie otrzymałem funkcję przybliżającą do 0,2 gdzie prawidłowy wynik to przybliżenie \(\displaystyle{ \pi}\)

gdzie popełniłem błąd?
Ostatnio zmieniony 8 kwie 2017, o 17:28 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
skjeleton
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 lis 2015, o 01:03
Płeć: Mężczyzna
Lokalizacja: Ksawerów
Podziękował: 3 razy

[C++] Pole okręgu wpisanego w kwadrat

Post autor: skjeleton »

1. Wylosowane wartości w zmiennych x i y są w przedziale <0;2>, czyli zamiast szukać wspólnych punktów z całym kołem (<-1;1>), szukamy wspólnych punktów z ćwiartką koła znajdującą się w <0;1>.

->

2.
\(\displaystyle{ \hbox{Pole kwadratu:}\quad 2 \cdot 2=4}\)

\(\displaystyle{ \hbox{Pole koła:}\quad \pi \cdot r^2 = \pi \cdot 1^2 = \pi}\)

\(\displaystyle{ \hbox{Stosunek pól:}\quad \frac{\pi}{4}}\)

Co oznacza, że otrzymane prawdopodobieństwo jest tak naprawdę tylko \(\displaystyle{ \frac{1}{4} \pi}\).


Czyli po odjęciu \(\displaystyle{ 1}\) od otrzymanych, losowych współrzędnych i pomnożeniu proporcji przez \(\displaystyle{ 4}\) dopiero otrzymamy liczbę \(\displaystyle{ \pi}\).

PS.
To, co robisz, nazywa się Metodą Monte Carlo. W Internecie znajdziesz już gotowce, gdybyś nadal miał problem
Ostatnio zmieniony 9 kwie 2017, o 13:09 przez Afish, łącznie zmieniany 1 raz.
Powód: Symbol mnożenia to \cdot. Poprawa wiadomości.
pasman
Użytkownik
Użytkownik
Posty: 171
Rejestracja: 26 lut 2016, o 17:32
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 1 raz
Pomógł: 14 razy

[C++] Pole okręgu wpisanego w kwadrat

Post autor: pasman »

shreder221 pisze:

Kod: Zaznacz cały

double losuj(double a,double b){
	
	double	l = (a + (b - a) * rand())/RAND_MAX;
return l;}
powinno być
shreder221 pisze:

Kod: Zaznacz cały

double losuj(double a,double b){
	
	double	l = a + (b - a) * rand()/RAND_MAX;
return l;}
Ostatnio zmieniony 9 kwie 2017, o 13:10 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
ODPOWIEDZ