Другие языки программирования и технологии

как в visual basic определить методом Монте-Карло площадь треугольника?

как в visual basic определить методом Монте-Карло площадь треугольника, вершины которого имеют координаты (-1,0);(0,1);(1,0)?
Сам метод Монте-Карло знаком? За подробностями стучись в агент...
Александр Белов
Александр Белов
616
Лучший ответ
Вот так:
Steps = 1000000
S = 0
for N = 1 to Steps
X = Rnd
Y = Rnd
if X + Y <= 1 then S = S + 1
next
S = 2*S/Steps
В цикле считаем попадание в половинку треугольника в первой четверти.
Олег Малышев
Олег Малышев
88 731
Нужна функция попадания точки P(x,y) в треугольник ABC (точки задавать против часовой стрелки) :
' Соответственно A (1,0) B (0,1) C (-1,0)

Точка будет в треугольнике, если выполняются все три условия:
(P.x-A.x)*(A.y-B.y) - (P.y-A.y)*(A.x-B.x) >= 0
(P.x-B.x)*(B.y-C.y) - (P.y-B.y)*(B.x-C.x) >= 0
(P.x-C.x)*(C.y-A.y) - (P.y-C.y)*(C.x-A.x) >= 0

Собственно, дальше генератором случайных чисел генеришь много-много случайных точек в прямоугольнике, который описывается вокруг искомого треугольника АВС. По условию данной задачи, описывающий прямоугольник будет иметь координаты (-1;0) (-1;1) (1;1) (1;0) (в общем случае, его стороны характеризуются разницей между максимальной и минимальной координатой х -- ширина, и максимальной и минимальной координатой y - высота) . Соответственно, считаешь площадь S описывающего прямоугольника -- как ширина * высота, в нашем случае S = ( 1 - (-1)) * ( 1 - 0 ) = 2

Для каждой точки определяешь, попадает ли она в искомый треугольник АВС. Считаешь общее количество сгенерированных точек (T) и точек, попавших в треугольник (Q). Поскольку площадь прямоугольника известна и составляет S, то статистически, площадь нужного треугольника будет примерно равна отношению Q/T * S или, если подставить площадь 2Q/T.

Собственно, чем больше сгенерируешь точек, тем точнее будет результат (в данном случае площадь треугольника точно равна 1).