正剧开始:
星历2016年02月10日 11:43:24, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究图形的面积。
[人叫板老师]这次提到的多边形主要有三个,分别是平行四边形,三角形和梯形。
为了能方便计算这些多边形的面积,阿伟做了一个小工具:
<span style="font-size:18px;">>>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 2 S=ah/2, a=?, h=?, 请按顺序输入a,h,用空格分隔: >>> 9 7.8 三角形 S=ah/2, a=9, h=7.8 ==> S=35.1 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> q def areaCalc(): tolerance = 0.0001; while (True): try: c = input('面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出:\n>>> '); if c == '1': s = input('S=ah, a=?, h=?, 请按顺序输入a,h,用空格分隔:\n>>> '); if (s.find(' ') != -1): a = s.split(' '); elif (s.find(',') != -1): a = s.split(','); result = float(a[0])*float(a[1]); if abs(int(result)-result)<tolerance: result = int(result); else: result = round(result, 3); print('平行四边形 S=ah, a={0}, h={1} ==> S={2}'.format(\ a[0], a[1], result)); print('\n>>>'); elif c == '2': s = input('S=ah/2, a=?, h=?, 请按顺序输入a,h,用空格分隔:\n>>> '); if (s.find(' ') != -1): a = s.split(' '); elif (s.find(',') != -1): a = s.split(','); result = float(a[0])*float(a[1])/2; if abs(int(result)-result)<tolerance: result = int(result); else: result = round(result, 3); print('三角形 S=ah/2, a={0}, h={1} ==> S={2}'.format(\ a[0], a[1], result)); print('\n>>>'); elif c == '3': s = input('S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔:\n>>> '); if (s.find(' ') != -1): a = s.split(' '); elif (s.find(',') != -1): a = s.split(','); result = (float(a[0])+float(a[1]))*float(a[2])/2; if abs(int(result)-result)<tolerance: result = int(result); else: result = round(result, 3); print('梯形 S=(a+b)*h/2, a={0}, b={1}, h={2} ==> S={3}'.format(\ a[0], a[1], a[2], result)); print('\n>>>'); else: break; except: pass;</span>
下面就可以来做题了:
<span style="font-size:18px;">>>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 36 120 135 梯形 S=(a+b)*h/2, a=36, b=120, h=135 ==> S=10530 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> q </span>
<span style="font-size:18px;">>>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 40 71 40 梯形 S=(a+b)*h/2, a=40, b=71, h=40 ==> S=2220 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 45 65 40 梯形 S=(a+b)*h/2, a=45, b=65, h=40 ==> S=2200</span>
<span style="font-size:18px;">#题1-2 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 2.8 1.4 1.2 梯形 S=(a+b)*h/2, a=2.8, b=1.4, h=1.2 ==> S=2.52 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 4 3 5 梯形 S=(a+b)*h/2, a=4, b=3, h=5 ==> S=17.5 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 5.9 8.2 4.8 梯形 S=(a+b)*h/2, a=5.9, b=8.2, h=4.8 ==> S=33.84 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 12 15 20 梯形 S=(a+b)*h/2, a=12, b=15, h=20 ==> S=270</span>
<span style="font-size:18px;">#题4-5 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 100 48 250 梯形 S=(a+b)*h/2, a=100, b=48, h=250 ==> S=18500 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 12 18 9 梯形 S=(a+b)*h/2, a=12, b=18, h=9 ==> S=135 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 5 2.7 3.4 梯形 S=(a+b)*h/2, a=5, b=2.7, h=3.4 ==> S=13.09 >>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 7.2 3.4 4.8 梯形 S=(a+b)*h/2, a=7.2, b=3.4, h=4.8 ==> S=25.44</span>
<span style="font-size:18px;">>>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 3 S=(a+b)*h/2, a=?, b=?, h=?, 请按顺序输入a,b,h,用空格分隔: >>> 2 6 5 梯形 S=(a+b)*h/2, a=2, b=6, h=5 ==> S=20</span>
<span style="font-size:18px;">>>> 面积计算:<1>平行四边形 <2>三角形 <3>梯形 <q>计算结束,退出: >>> 2 S=ah/2, a=?, h=?, 请按顺序输入a,h,用空格分隔: >>> 1.5 0.9 三角形 S=ah/2, a=1.5, h=0.9 ==> S=0.675</span>
小伟一向对于太过于简单的东西不感兴趣,但是,现在让小伟感兴趣的东西来了:
[人叫板老师]太有创意了,竟然让小伟估算叶子的面积,这个叶子算几边形呢?
但是这种问题也难不倒小伟,这不,很快就算出来了。
怎么算的呢?
<span style="font-size:18px;">/** * @usage 计算不规则图形面积的图示 * @author mw * @date 2016年02月10日 星期三 10:49:06 * @param * @return * */ function areaCalc() { //图片 var image = new Image(); image.src = "./1.jpg"; //只处理这100*100个象素 var width = 450; var height = 400; image.onload = function() { plot.drawImage(image); var imagedata = plot.getImageData(0, 0, width, height); var size = imagedata.data.length/4; var count = 0; for (var i = 0; i < size; i++) { if (imagedata.data[4*i+1] - imagedata.data[4*i] > 128) { count++; imagedata.data[4*i] = 255; } } var area = count / (400*450)*72; plot.save(); plot.translate(600, 0); plot.putImageData(imagedata, 0, 0); plot.drawImage(image); plot.restore(); var s = 'count: '+count.toFixed(0)+', ' +'总面积: '+area.toFixed(3); plot.fillText(s, 350, 300, 200); } } </span>
嗯,计算的部分已经标出来了,看来还是大致不差的。
不过,这种方法毕竟是有误差的,比如下面这块面积,可以计算出正确结果是24。
而下面这块就应该是33了。
做了这么多计算,小伟很高兴已经掌握了所有的面积计算方法。
本节到此结束,欲知后事如何,请看下回分解。