草庐IT

根据温度、气压计算海拔高度

轻风博客 2023-03-28 原文

基本概念

标准大气压:表示气压的单位,习惯上常用水银柱高度。例如,一个标准大气压等于760毫米高的水银柱的重量,它相当于一平方厘米面积上承受1.0336公斤重的大气压力。由于各国所用的重量和长度单位不同,因而气压单位也不统一,这不便于对全球的气压进行比较分析。因此,国际上统一规定用"百帕"作为气压单位。
经过换算:一个标准大气压=1.013×105帕。
1个标准大气压=760mm水银(汞柱)柱高。

海拔(Elevation),是指地面某个地点高出海平面的垂直距离。是某地与海平面的高度差,通常以平均海平面做标准来计算。海拔的起点叫海拔零点或水准零点,是某一滨海地点的平均海水面。它是根据当地测潮站的多年记录,把海水面的位置加以平均而得出的。

大气压与海拔高度的关系是:高度增加,大气压减小;在3000M范围内,每升高12M,大气压减小1mmHg,大约133Pa。
大气对浸在它里面的物体产生的压强叫大气压强,简称大气压或气压。 1654年格里克在德国马德堡作了著名的马德堡半球实验,有力地证明了大气压强的存在,这让人们对大气压有了深刻的认识。然而早在1643年,意大利科学家托里拆利就在一根1米长的细玻璃管中注满水银(汞)倒置在盛有水银的水槽中,发现玻璃管中的水银大约下降到760毫米高度后就不再下降了。这760毫米刻度之上的空间无空气进入,是真空。托里拆利据此推断大气的压强就等于水银柱产生的压强,这就是著名的托里拆利实验。标准大气压为:1.013×10^5Pa(帕斯卡),等于760mmhg(毫米汞(水银)柱)


 

显而易见的是可以通过大气压推算海拔高度,有趣的是,这个简单的内容居然在国内的网站上很难搜索。有英文资料,链接在此。闲话不说,请看公式

1. hypsometr ic 公式

 

        /// <summary>
        /// Hypsometric算法计算海拔高度
        /// </summary>
        /// <param name="CurrentPressure">当前大气压</param>
        /// <param name="CurrentTemperature">当前温度</param>
        /// <returns></returns>
        public decimal Hypsometric(decimal CurrentPressure,decimal CurrentTemperature)
        {
            return (decimal)(Math.Pow(Convert.ToDouble(101.325M / CurrentPressure), Convert.ToDouble(1 / 5.257M)) - 1) * (CurrentTemperature + 273.15M) / 0.0065M;
        }

 

 


2. barometric 公式

        /// <summary>
        /// Barometric 算法计算海拔高度
        /// </summary>
        /// <param name="CurrentPressure">当前大气压</param>
        /// <returns></returns>
        public decimal Barometric(decimal CurrentPressure)
        {
            return 44330 * (1 - (decimal)Math.Pow(Convert.ToDouble(CurrentPressure / 101.325M), Convert.ToDouble(1 / 5.255M)));
        }

 


3. 测试

使用MS5611读取数据,大约1分钟,数据绘图如下:

 

 

两者大约相差15米,两者走势几乎重合。经过计算,蓝色线(不使用温度)的方差为 0.6437,橙色线(使用温度)的方差为 0.6828。

 

参考资料:

https://physics.stackexchange.com/questions/333475/how-to-calculate-altitude-from-current-temperature-and-pressure

https://keisan.casio.com/exec/system/1224585971

— 完 —

有关根据温度、气压计算海拔高度的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  2. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  3. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  4. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  5. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  6. ruby - 如何根据长度将路径数组转换为嵌套数组或散列 - 2

    我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa

  7. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

  8. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  9. ruby - 尝试比较两个文本文件,并根据信息创建第三个 - 2

    我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende

  10. ruby - 根据值然后键对ruby中的哈希进行排序 - 2

    如何在ruby​​中先根据值然后根据键对散列进行排序?例如h={4=>5,2=>5,7=>1}将排序为[[7,1],[2,5],[4,5]]我可以根据值进行排序h.sort{|x,y|x[1]y[1]}但我不知道如何根据值进行排序,然后在值相同时键入 最佳答案 h.sort_by{|k,v|[v,k]}这使用了Array的事实混入Comparable并定义逐元素。注意上面等价于h.sort_by{|el|el.reverse}相当于h.sort_by(&:reverse)这可能会或可能不会更具可读性。如果你知道Hashes一般都是先

随机推荐