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

Площадь фигуры Монте- Карло - C++/CLI WinForms

31.12.2017, 18:46. Просмотров 178. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Площадь фигуры Монте- Карло (C++/CLI WinForms):

Площадь фигуры методом Монте-Карло в 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; в программировании вообще не...

Площадь методом Монте-Карло
Нужно найти площадь заштрихованной области методом Монте-Карло в частности...

Метод Монте-Карло для вычисления площади фигуры
Суть такова, вычислить площадь фигуры, ограниченной кривыми x*y=a^2, x+y=5*a/2,...


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

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

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