[从头学数学] 第79节 多边形的面积

在银河系厄尔斯星球的中华帝国江南行省,工程师阿伟与机器小伟一起研究如何通过一个小工具准确计算平行四边形、三角形和梯形的面积,并通过实例进行演示。小伟还尝试估算不规则图形的面积,展示了其解决问题的能力。
剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入练气期第九层功法的修炼,
这次要修炼的目标是[多边形的面积]。

正剧开始:

星历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了。










做了这么多计算,小伟很高兴已经掌握了所有的面积计算方法。

本节到此结束,欲知后事如何,请看下回分解。

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
标题中的"EthernetIP-master.zip"压缩文档涉及工业自动化领域的以太网通信协议EtherNet/IP。该协议由罗克韦尔自动化公司基于TCP/IP技术架构开发,已广泛应用于ControlLogix系列控制设备。该压缩包内可能封装了协议实现代码、技术文档或测试工具等核心组件。 根据描述信息判断,该资源主要用于验证EtherNet/IP通信功能,可能包含测试用例、参数配置模板及故障诊断方案。标签系统通过多种拼写形式强化了协议主题标识,其中"swimo6q"字段需结合具体应用场景才能准确定义其技术含义。 从文件结构分析,该压缩包采用主分支命名规范,符合开源项目管理的基本特征。解压后预期可获取以下技术资料: 1. 项目说明文档:阐述开发目标、环境配置要求及授权条款 2. 核心算法源码:采用工业级编程语言实现的通信协议栈 3. 参数配置文件:预设网络地址、通信端口等连接参数 4. 自动化测试套件:包含协议一致性验证和性能基准测试 5. 技术参考手册:详细说明API接口规范与集成方法 6. 应用示范程序:展示设备数据交换的标准流程 7. 工程构建脚本:支持跨平台编译和部署流程 8. 法律声明文件:明确知识产权归属及使用限制 该测试平台可用于构建协议仿真环境,验证工业控制器与现场设备间的数据交互可靠性。在正式部署前开展此类测试,能够有效识别系统兼容性问题,提升工程实施质量。建议用户在解压文件后优先查阅许可协议,严格遵循技术文档的操作指引,同时需具备EtherNet/IP协议栈的基础知识以深入理解通信机制。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值