Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
 
Gersona2015
1 / 1 / 0
Регистрация: 24.11.2015
Сообщений: 34
1

Площадь фигуры Монте- Карло

31.12.2017, 18:46. Просмотров 187. Ответов 0
Метки нет (Все метки)

С Наступающим всех!! Написал программу процедурного стиля вычисления площади фигуры, но она не работает должным образом. Помогите пожалуйста подправить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
     static double Area(int rx1, int ry1, int rx2, int ry2)
        {
            return (rx2 - rx1) * (ry2 - ry1);
        }
        static double func(double x, int x1, int y1, int x2, int y2)
        {
            double k = (double)(y1 - y2) / (double)(x1 - x2);
            return (x - x1) * k + y1;
        }
        static double circlearea(int r)
        {
            return (Math::PI*Math::Pow(r,2));
        }
        static bool pointHigher(int x1, int y1, int x2, int y2, double x, double y)
        {
            return y >= func(x, x1, y1, x2, y2);
        }
        double triangleArea(int h, int a)
        {
            return (h * a)/2;
        }
        static bool IsInFigure(int *cd, double _xxx, double _yyy)
        {
            if (_xxx <= cd[2]) { if (!pointHigher(cd[0], cd[1], cd[2], cd[3], _xxx, _yyy) && pointHigher(cd[0], cd[1], cd[2], cd[7], _xxx, _yyy)) { return true; } }
            else if (cd[4] <= _xxx && _xxx <= cd[6]) { if (!pointHigher(cd[4], cd[5], cd[6], cd[7], _xxx, _yyy) || pointHigher(cd[4], cd[5], cd[6], cd[3], _xxx, _yyy)) { return true; } }
            else { return true; }
            return false;
        }
        static double MonteKarlo(int *cd, int n, double Spr)
        {
            Random^ rnd = gcnew Random();
            int M = 0;
            double _xxx, _yyy, S_mk;
            for (int i = 0; i < n; i++)
            {
                _xxx = cd[0] + (cd[6] - cd[0]) * rnd->NextDouble();
                _yyy = cd[7] + (cd[3] - cd[7]) * rnd->NextDouble();
                if (IsInFigure(cd, _xxx, _yyy)) { M++; }
            }
            S_mk = Spr * M / n;
            return S_mk;
        }
 
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                        int xb = 0, yb = 0, xf = 0, yf = 0, xk = 0, yk = 0, xd = 0, yd = 0;
                        
                        if(radioButton1->Checked==true){
                                 xb = 1; yb = 30; xf = 20; yf = 20; xk = 40; yk = 10; xd = 60; yd = 1;
                       int  coords[8]= { xb, yb, xb, yb, xk, yk, xd, yd };
                        int NN = 1000;
                        double Spr = Area(xf, yd, xd, xb);
                        textBox1->Text=xb.ToString();
                        textBox2->Text=yb.ToString();
                        textBox3->Text=xf.ToString();
                        textBox4->Text=yf.ToString();
                        textBox5->Text=xk.ToString();
                        textBox6->Text=yk.ToString();
                        textBox7->Text=xd.ToString();
                        textBox8->Text=yd.ToString();
                        double S_rect=Area(xb,yd,xd,yf);
                        double S = S_rect -(circlearea((xb-xf))) - triangleArea(xd - xk, yb - yd);
                        
                        int y = yb + 1;
                        int n[5]={1,2,3,4,5};
                        textBox9->Text= S.ToString()+" кв.ед"; 
                        y++;
                        for (int j = 0; j < 5; j++)
                        {
                            Stopwatch^ st = gcnew Stopwatch();
                            st->Start();
                            double result = MonteKarlo(coords, NN, S_rect);
                            y++;
                           
                            double pp = ((Math::Abs(result - S)) / S) * 100;
                            dataGridView1->Rows[j]->Cells[0]->Value=n[j];
                            dataGridView1->Rows[j]->Cells[1]->Value=NN;
                            dataGridView1->Rows[j]->Cells[2]->Value=Math::Round(result, 3);
                            dataGridView1->Rows[j]->Cells[3]->Value= st->ElapsedMilliseconds + " мс";
                            dataGridView1->Rows[j]->Cells[4]->Value= Math::Round(pp, 3) + "%";
                            NN *= 10;}
                        }
 
                        }
            private: System::Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {
 
                         dataGridView1->RowCount=5;
                    
                     
                     
                }
priv
её интерфейс и фигура:
0
Миниатюры
Площадь фигуры Монте- Карло  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2017, 18:46
Ответы с готовыми решениями:

Площадь фигуры методом Монте-Карло в Matlab
Мне нужен код для матлаба, для вычисления площади параллелограмма методом...

Определить методом Монте Карло площадь фигуры
Здравствуйте пожалуйста помогите по решение этой задачке. Определить ...

Определить площадь фигуры (методом Монте-Карло)
Здраво народ! Стоит задача: с помощью метода Монте-Карло найти площадь фигуры....

Методом Монте-Карло определить площадь заштрихованой фигуры
Нарисовать линиями в Chart for (int i=0; i&lt;=100; i++) ...

Определить площадь представленной фигуры методом Монте-Карло
Пожалуйста, помогите составить программу определения площади заданной фигуры...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2017, 18:46

Найти плозадь фигуры методом Монте-карло

Поиск площади фигуры методом Монте - Карло
Помогите пожалуйста!!! очень срочно нужно!!! Заданы две прямые вида y=± d/2...

Определение площади фигуры методом Монте Карло
&quot;определение площади фигуры методом монте карло&quot; в программировании вообще не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru