Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++/CLI Windows Forms

Войти
Регистрация
Восстановить пароль
 
Gersona2015
0 / 0 / 0
Регистрация: 24.11.2015
Сообщений: 6
#1

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

31.12.2017, 18:46. Просмотров 141. Ответов 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):

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

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

Определение площади заштрихованной фигуры методом Монте-Карло - C++
Составить программу для определения методом Монте-Карло пло- щади заштрихованой фигуры. Вычислить фактическую площадь и сравнить ее с...

Составить программу для определения методом Монте-Карло площади заштрихованой фигуры - C++
Всем привет! Помогите,пожалуйста , решить задачу .Нужно найти площадь фигуры методом Монте Карла.Я про этот метод впервые слышу ,поэтому...

Монте-карло - C++
Преподаватель попросил разобрать метод монте-карло, и реализовать его в c++, помогите реализовать метод в с++

Метод монте Карло - C++
Здравствуйте! Посмотрите, пожалуйста, почему программа неправильно считает определенный интеграл методом Монте Карло. Считаю интеграл от -3...

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

метод Монте-Карло - C++
Трехмерное тело образовано объединением нескольких сфер произвольного размера и взаимного расположения. Найти объем этого тела, используя...

Метод Монте-Карло - C++
как мне перевести этот код на с++..... помогите пожалуста(( program MonteKarlo; uses crt; Label l1,l2; var ...

Метод Монте-Карло - C++
Помогите написать программу для вычисления определенного интеграла методом Монте-Карло.

Метод Монте-Карло - C++
С помощью метода Монте-Карло найдите оценку объема шара, центр которой совпадает с началом координат. Результат сравните с теоретически...


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

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

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