wmmail.ru – cервис почтовых рассылок на главную
написать письмо
карта сайта

С чего начать?РекламодательПравилаFAQСтатистикаБиржа статейTOP100ФоткиКонтакты
Логин:
Пароль: 
Регистрация   Забыли пароль?
WMLogin
Пользователей всего:

513809

Пользователей сегодня:

12

Пользователей online:

80

Выплачено ($): 7`607`920,62
Выплат: 8`117`186
Писем прочитано: 1`024`971`438
Новые вопросы

Задать свой вопрос


 
 
Online 0
Все ответы
 
 

Вопрос #64030

Внимание! В разделе вопрос-ответ запрещается:

  • Мат, оскорбления, флуд, реклама
  • Сообщения, не являющиеся вопросами/ответами
  • Нарушение законодательства РФ
  • Попрошайничество в любой форме

Выделите текст и нажмите для цитирования  #  
+2   [12.11.2014 17:58] #1990153

Закрытый вопрос от пользователя [C#] Метод Монте-Карло

Имеется окружность с вершиной треугольника в её центре, остальные две вершины юзверь задаёт сам. Далее нам надо рассчитать площадь где треугольник пересёкся с окружностью. Знаю, что это можно решить методом Монте-Карло. Хотя бы математически объясните решение..

P.S. Гуглеров просьба не беспокоить.
Раздел: Программирование, последний комментарий: 12.11.2014 23:25
Вопрос закрыт пользователем M88
Проголосовали: #1813388, #1828975

Ответы
Ответов всего: 1  вопрос закрыт 
Выделите текст и нажмите для цитирования  #  
+2   [12.11.2014 23:25] #1813388   Все ответы пользователя

Можно конечно все сделать аналитически и результат будет точным, но если методом монте-Карло, то я бы решал так.
Раз имеется окружность, значит известен ее центр и радиус R. Центр принимаем за начало координат O(0,0), значит окружность имеет уравнение x^2+y^2=R^2. Одна из вершин треугольника располагается в центре, те это O(0,0). Вторую и третью вершину пользователь(а не юзверь, проявим к нему немного уважения) задает сам указывая их координаты A(x_1,y_1) и B(x_2,y_2).
Сделаю несколько записей.

Добавлено спустя 06 минут 00 секунд
Теперь определяем уравнения прямых OA, OB, AB.
Уравнение прямой, проходящей через две точки на плоскости имеет вид (x-x_1)/(x_2-x_1)=(y-y_1)/(y_2-y_1).

Начнем с OA:
(x-0)/(x_1-0)=(y-0)/(y_1-0), т.е.
y_1*x-x_1*y=0;
Аналогично для OB:
(x-0)/(x_2-0)=(y-0)/(y_2-0), т.е.
y_2*x-x_2*y=0.
Для AB немного сложнее
(Ребенок проснулся скоро продолжу)

Добавлено спустя 29 минут 44 секунды
Для AB:
(x-x_1)/(x_2-x_1)=(y-y_1)/(y_2-y_1), т.е.
(y_2-y_1)*(x-x_1)-(x_2-x_1)*(y-y_1)=0.
А теперь немного теории.
Есть несколько определений вероятности, среди них статистическое и геометрическое. В теории они будут равны. Согласно геометрическому подходу вероятность попадания точки в общую область равна
P=S/S_o, где S-площадь пересечения окружности с треугольником, а S_o - площадь окружности.
Согласно статистической концепции
P=N/N_o, где N_o- количество сгенерированных точек, лежащих внутри окружности, а N- количество точек попавших в общую область.
В теории эти вероятности равны (нужно сгенерировать огромное число точек).
P=S/S_o=N/N_o, значит интересуемая площадь
S=S_o*N/N_o.

Добавлено спустя 37 минут 50 секунд
Таким образом, случайным образом генерируем пары x,y (-R

Добавлено спустя 45 минут 00 секунд
(-R=

Добавлено спустя 46 минут 38 секунд
А что за ерунда нельзя написать меньше равно, или какой лимит на количество знаков?

Добавлено спустя 50 минут 31 секунду
Ну ладно третья попытка
(x из [-R;R], y из [-R,R]). Из этих пар отбыраем лишь подходящие (лежащие внутри окружности), т.е. x^2+y^2меньшеравноR^2. Определяем количество (N_o) подходящих точек.

Добавлено спустя 52 минуты 42 секунды
Из всех подходящих (это важно, а не первоначально сгенерированных) точек определяем количество тех, которые попали внутрь треугольника, т.е. для которых выполняются 3 условия:

Добавлено спустя 56 минут 10 секунд
(y_1*x-x_1*y)*(y_1*x_2-x_1*y_2)большеравно0;
(y_2*x-x_2*y)*(y_2*x_1-x_2*y_1)большеравно0;
((y_2-y_1)*(x-x_1)-(x_2-x_1)*(y-y_1)) * ((y_2-y_1)*(0-x_1)-(x_2-x_1)*(0-y_1))большеравно0;

Добавлено спустя 1 час 02 минуты 51 секунду
Количество этих точек суть число N.
Площадь окружности ранее считалась по формуле S_o=Pi*R^2.
Имея числа N,N_o и площадь окружности определяем площадь пересечения треугольника с окружностью
S=Pi*R^2*N/N_o (должно получится быть больше 0 и меньше половины площади окружности).
Ну вот и все.
Один класс, 2-3 метода, 20 минут работы и готово.
Проголосовали: #1659540, #1990153

Видеоурок

Вопрос-ответ

НОВОСТИ
19.04.2024Технические работы с СБП
подробнее>>
03.04.2024Выплаты
подробнее>>

© 2004-2024 «WMMAIL» Пользовательское соглашение