mathe 发表于 2009-7-11 14:35:59

随机三角形的面积

KeyTo9のFans 在百度数学吧里面提出:

在以下图形的内部随机取三个点作为一个三角形的顶点,求这个三角形的面积的期望值。
在图形内部各处取点的概率是分布均匀的。

(1)边长为1的正方形
(2)边长为1的正三角形
(3)半径为1的圆

mathe 发表于 2009-7-11 14:43:08

对任意凸区域D,假设其面积为S
对于任意一个方向$theta$,区域D在其垂直方向投影长度为$T(theta)$
我们可以将所有方向为$theta$的同区域D相交的直线用参数y表示其中$0<=y<=T(theta)$,记为直线$L(theta,y)$
假设直线$L(theta,y)$同D相交部分长度为$U(theta,y)$,它将区域D分成两部分,面积分布为$S_1(theta,y)$,$S_2(theta,y)$
两部分重心到$L(theta,y)$的距离分别为$H_1(theta,y)$,$H_2(theta,y)$
那么我推导的结果是最后三角形面积的期望为
$1/{12S^3}\int_0^{pi}d\theta\int_0^{T(\theta)}(S_1(\theta,y)*H_1(\theta,y)+S_2(\theta,y)*H_2(\theta,y))*U^4(\theta,y)dy$

数学星空 发表于 2009-7-11 15:02:09

这应该属于积分几何的内容吧..

zgg___ 发表于 2009-7-13 11:06:26

这使我联想起ibm ponder this的一道题。
http://domino.research.ibm.com/Comm/wwwr_ponder.nsf/Challenges/October2006.html

无心人 发表于 2009-7-13 16:49:16

呵呵,模拟一下么
正方形的好模拟

谁有兴趣
估计1000个点能得到很好的近似了吧?

无心人 发表于 2009-7-13 17:53:17

// ra.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <math.h>
#include <time.h>
#include <stdlib.h>

struct {double x, y;} a, b, c;

double area(void)
{
        return ( (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y) )/2.0;
}

#define RAND ((double)rand() / (double)RAND_MAX)

int _tmain(int argc, _TCHAR* argv[])
{
        int i;
        double s = 0.0;

        srand((unsigned)time(NULL));

        for (i = 0; i < 10000; i ++)
        {
       a.x = RAND;
           a.y = RAND;
           b.x = RAND;
           b.y = RAND;
           c.x = RAND;
           c.y = RAND;
           s += abs(area());
        }

        printf("随机值 = %.8f", s /10000.0);

        return 0;
}

随机值 = 0.07646080

无心人 发表于 2009-7-13 17:54:19

随机值 = 0.07694249
随机值 = 0.07645819
随机值 = 0.07722303

无心人 发表于 2009-7-13 17:55:41

加大到1000000次

随机值 = 0.07644364
随机值 = 0.07643060
随机值 = 0.07645995

无心人 发表于 2009-7-13 17:58:18

半径为1的圆预期应该比边长为1的正方形大

无心人 发表于 2009-7-13 17:58:57

现在看来,有个好的随机函数库是很重要的
谁推荐个
页: [1] 2
查看完整版本: 随机三角形的面积