Другие языки программирования и технологии
как в visual basic определить методом Монте-Карло площадь треугольника?
как в visual basic определить методом Монте-Карло площадь треугольника, вершины которого имеют координаты (-1,0);(0,1);(1,0)?
Сам метод Монте-Карло знаком? За подробностями стучись в агент...
Вот так:
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
В цикле считаем попадание в половинку треугольника в первой четверти.
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
В цикле считаем попадание в половинку треугольника в первой четверти.
Нужна функция попадания точки 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).
' Соответственно 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).
Похожие вопросы
- C++ расчет площади методом монте-карло
- С++ решение интеграла методом Монте-Карло (нужно проверить что не так в коде)
- Продаю программу с исходниками на Visual Basic 2008 за 50 руб.
- Подойдет ли самоучитель по Visual Basic .NET для освоения языка Basic, человеку не понимающему в программировании?
- Visual Basic или C#
- Нужна помощь по Visual Basic
- visual basic 6
- visual basic 2008
- Программа на Microsoft Visual Basic 2008
- Visual Basic и Excel (+)