传说中的小学数学题--求阴影面积 进入全屏
line

一、题目

shadow.pic副本.jpg

二、解答

这是小学题?我简直不相信。。。不过我对这种东西还是蛮感兴趣的,可惜。。。什么三角函数之类的,现在全都忘了,只能问度娘!在网上看到一个类似的,我来照着这个辅助图推理一下

1、作辅助线如上

shadow.jpg

2、分解计算

  • S阴影 = 阴影面积计算推理
S阴影 = ( S长方形 - 2 * S圆 ) / 2 - S左下角白色小三角
     = ( S长方形 - 2 * S圆 ) / 2 - ( ( S长方形 - S圆 ) / 8 - S阴影ABC )
     = ( S长方形 - 2 * S圆 ) / 2 - ( S长方形 - S圆 ) / 8 + S阴影ABC
     = 3 * ( S长方形 - 2 * S圆 ) / 8 + S阴影ABC
     = 3 * ( S长方形 - 2 * S圆 ) / 8 + ( S三角形ABC - S红色小块 )
     = 3 * ( S长方形 - 2 * S圆 ) / 8 + ( S三角形ABC - ( S扇形BOC - S三角形OBC ) )
     = 3 * ( S长方形 - 2 * S圆 ) / 8 + ( S三角形ABC - ( S扇形BOC - S三角形OBC ) )
  • S长方形 = 长方形面积计算推理
S长方形 = W长方形 * H长方形 = 20 * 10 = 200 (cm²)
  • S圆 = 圆形面积计算推理
S圆 = π * r圆半径² = π * 5² 
    = 25π 
    = 78.53981633974483 (cm²)
  • S三角形ABC = 三角形ABC面积计算推理
∵ tan∠BAC = 对边  / 临边 = BC / AC 
∵ tan∠BAC = 对边  / 临边 = 2 * OB / AB = 2 * 5 / 5 = 2
∴ BC / AC = 2
∴ BC = 2 * AC
∵ AB² =  BC² + AC² = ( 2 * AC )² + AC² = 5 * AC² 
∴ AC =  AB / √5 = 5 / √5  = √5 

S三角形ABC = AC * BC / 2 = AC * 2 * AC / 2 = AC² = 5
  • S三角形OBC = 三角形OBC面积计算推理
∵ △BOC是等腰三角形
∵ AB = OB
∴ 三角形ABC 和 三角形OBC的一半儿 是全等三角形

S三角形OBC = 2 * S三角形ABC = 2 * 5 = 10 (cm²)
  • S扇形BOC = 扇形OBC面积计算推理
∵ tanα = tan∠ABC = 对边 / 临边 = AC / BC = 0.5
∴ α = arctan(0.5) 

S扇形BOC = 2 * α / ( 2 * π ) * S圆 
        = α / π * S圆
        = arctan(0.5) / π * 25π
        = 25 * arctan(0.5)
        = 25 * Math.atan(0.5)
        = 25 * 0.46364760900080615
        = 11.591190225020153 (cm²)

3、结果汇总

S阴影 = 3 * ( S长方形 - 2 * S圆 ) / 8 + ( S三角形ABC - ( S扇形BOC - S三角形OBC ) )
     = 3 * ( 200 - 2 * 78.53981633974483 ) / 8 + ( 5 - ( 11.591190225020153 - 10 ) )
    = 19.503947520171224 (cm²)

其实我也不知道这结果到底算不算对!

三、代码实现

比我还无聊的 @张四哥 用代码暴力验证一下我的结果。。。跪了! 用到的算法是「1946年的蒙特卡洛方法」:

[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method.]

...

1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropolis共同发明,被称为蒙特卡洛方法。

它的具体定义是:

在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算列?蒙特卡洛(Monte Carlo)方法告诉我们,均匀的向该正方形内撒N(N 是一个很大的自然数)个黄豆,随后数数有多少个黄豆在这个不规则几何形状内部,比如说有M个,那么,这个奇怪形状的面积便近似于M/N,N越大,算出来的值便越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。

...

蒙特卡洛方法可用于近似计算圆周率:让计算机每次随机生成两个0到1之间的数,看这两个实数是否在单位圆内。生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为PI:1,PI为圆周率),当随机点取得越多(但即使取10的9次方个随机点时,其结果也仅在前4位与圆周率吻合)时,其结果越接近于圆周率。

Js版本代码:

/**
 * 给图形画一个坐标,检测(x,y)点是否落入阴影区域部分
 * @param {float} x 横坐标
 * @param {float} y 纵坐标
 * @returns {boolean} 落入阴影:true,否则:false
 */
var detectFallIn = function (x, y) {

    return (x / y < 2 || x < 5) ? false :
        (Math.sqrt(Math.pow(x - 5, 2) + Math.pow(y - 5, 2)) >= 5 &&
        Math.sqrt(Math.pow(x - 15, 2) + Math.pow(y - 5, 2)) >= 5);
};

/**
 * 利用「蒙特卡洛方法」计算阴影(不规则图形)部分的面积
 * @param {int} soyaNums 黄豆的数量
 */
var calShadowArea = function (soyaNums) {
    var x, y, fallIn = 0;
    for (var i = 0; i <= soyaNums; i++) {
        // 将黄豆随机洒落到长方形中
        x = Math.random() * 20;
        y = Math.random() * 10;

        // 判断黄豆是否落入阴影区域
        if (detectFallIn(x, y)) {
            fallIn++;
        }
    }

    // 阴影面积
    var shadow = 20 * 10 * (fallIn / soyaNums);
    console.log('shadow area = ', shadow);
};

算法表示,种子越多,结果越精确,所以,尝试用一千万颗黄豆来做这个实验:

// 假设用1kw颗黄豆做实验
calShadowArea(10000000);

得到结果(每次执行都会得到一个近似值,毕竟是随机数来计算的):

屏幕快照 2016-08-04 下午3.37.52.png

四、总结

这两天脑子转的慢,做做「小学」数学题,开开脑洞,保持清醒!

阿里巴巴-钉钉-开放平台,能力开放&开发者运营岗位招聘中, 期待你的加入!
钉钉开放,让应用开发更简单
充分开放,是钉钉的重要方向!除致力于为开发者打造丰富的开放API, 更易接入的场景化能力包, 完备的应用开发工具之外, 还需要持续构建开放能力的布道、开发者生态运营体系,包括培训、沙龙、大会、社区合作等等。业务在快速发展,我们也还需要更多优秀的小伙伴加入!

评论区域

line
  • Xiaoxi679 2018-08-06 11:07:06 回复
    其实,如果真的是小学题的话,左下角应该是阴影部分,真的搞不懂这所谓的「小学」数学题,是拿来干嘛的。
  • 威尔斯特拉斯 2017-08-04 19:15:24 回复
    可以不知道怎么上图。这个题是出错了左下角斜线下那一小块应该是阴影部分,不然交给交学生,也太为难他们了。加上之后的面积就是一个正方形减掉一个圆,其他网友的评论感觉很不仔细啊,这个细节都没发现。。。附一个简单的微积分解法,没法上图,只有打字了,先用100-25PI,也就是正方形减掉圆。然后再减一个左下角的小面积。以左下角为原点,直角坐标系。直线方程y=x/2,曲线方程y=5-[25-(x-1)^2]^0.5。两者交点(2,1)。面积为三角形面积1+去边三角形面积下上限2到5定积分{5-[25-(x-1)^2]^0.5}dx。解之得左下角面积为10-12.5arcsin0.6。综上,阴影部分面积为90-25PI+12.5arcsin0.6。约等于19.5039475201712。
  • 西瓜妹子 2017-03-21 16:45:44 回复
    阴影面积 = 长方形的面积的一半 - 圆的面积
    我觉得你想要显摆高智商解题思路~
    对于我这种数学很渣的孩子来说,我是投机取巧啦~ 
    哈哈哈哈哈哈哈哈哈~
  • alksd 2016-12-08 14:36:55 回复
    回复 不疯魔不成佛 :  算出来,约等于这个值21.46018366025517
    不疯魔不成佛 said:
    。。。真的是小学的题!没那么麻烦
    根据矩形的长宽你能知道两个圆的半径,可以算出俩圆的面积
    (矩形面积-原型面积*2)/2=图中黑色部分。。。。真的是小学题
  • 小学生 2016-11-10 17:57:23 回复
    我不会做,真的不会做
  • 疯非烦 2016-09-03 21:17:33 回复
    回复 不疯魔不成佛 : 看仔细,除以二怎么能得出黑色部分?左下角的是啥?
    不疯魔不成佛 said:
    。。。真的是小学的题!没那么麻烦
    根据矩形的长宽你能知道两个圆的半径,可以算出俩圆的面积
    (矩形面积-原型面积*2)/2=图中黑色部分。。。。真的是小学题
  • 不疯魔不成佛 2016-08-19 16:25:03 回复
    。。。真的是小学的题!没那么麻烦
    根据矩形的长宽你能知道两个圆的半径,可以算出俩圆的面积
    (矩形面积-原型面积*2)/2=图中黑色部分。。。。真的是小学题
  • Alien 2016-08-16 15:12:56 回复
    回复 xgqfrms : 哈哈哈,就喜欢你这么直接的鄙视。
    xgqfrms said:
    其实,是你想多了!
    这根本就是一道几何问题,划几条辅助线,把三角形,扇形,挖挖补补就可以了!
  • xgqfrms 2016-08-11 19:13:24 回复
    其实,是你想多了!
    这根本就是一道几何问题,划几条辅助线,把三角形,扇形,挖挖补补就可以了!