/ 分享百科

足不出户刷长跑教程:使用夜神模拟器和阳光体育服务平台app轻松完成长跑任务

发布时间:2025-01-10 17:03:01

正面写上:这个。 。应该是技术帖吧。

需要准备的东西:夜神模拟器(@夜神请准备好广告费,我过两天让海绵宝宝来收)

阳光体育服务平台app(这个**软件真是对得起它的评价):链接(也可以从公众号下载):(密码:D2Rb)

也。 。请给我点个赞,安慰我在这个蹩脚的软件上浪费时间。 ?

进入正题——足不出户长跑

既然是学习,那就先说一下原理吧。要完成长跑,需要做到以下几点:

跑完5个规定点,以规定范围内(男生2m/s~4m/s)的速度跑完规定距离(男生2km),超过最高规定速度或低于最低规定速度,视为无效。

以上三点是硬性条件。如果不满足这些条件,你将无法完成长跑。因此,一些有root权限的位置模拟应用程序,以及一些不需要root手机的虚拟定位应用程序,都可以满足这个要求,而且它们的操纵杆使用起来比在模拟器上使用鼠标(安静地)舒服得多。

但这样做会有一个问题,就是完成长跑后,你会发现2公里的步数是10步。 。 (飞行???)

是的,这个蹩脚的应用程序仍然计算步数。虽然不是硬性要求,但结果总是显得有点不舒服。

计步APP原理

(以下关于计步原理主要来自这篇文章)

电子计步器通常内置加速度传感器()和计算单元(MCU)。加速度传感器感知用户的加速度变化,然后MCU估计所走的步数。电子计步器通常采用三轴加速度传感器,可以在三个维度感知用户的运动,并内置更复杂的计步算法。

目前,智能手机和一些非智能手机都内置了加速度计。只需添加相应的软件即可实现计步,无需增加硬件成本。智能手表和智能手环还内置加速度传感器和计步算法,方便用户监测自己的运动情况。

以放置在手腕上(与手环、手机相同)的加速度传感器为例。在用户水平行走运动过程中,手腕处的加速度会受到重力加速度和手抛加速度的双重影响。如下图所示,红色箭头代表重力加速度,绿色箭头代表手部加速度。

行走时,重力加速度始终垂直于地面,而晃动动作引起的加速度呈周期性变化。反映在图表中可以看出,在行走运动中,垂直向前产生的加速度大致是随时间变化的周期性信号。

通过检测计算轨迹的峰值并确定加速度阈值,可以实时计算出用户所走的步数,并据此进一步估算出用户的步行距离。

计步算法:

计步算法可以分为四类,一是峰值检测算法,二是变换域算法,三是滤波算法,四是模式识别算法。根据所设计的计步器放置在人体上的位置,如手腕、腰部、脚底等,可以选择不同的计步算法。

峰值检测算法原理简单,易于实现,应用广泛。这里简单介绍一下峰值检测算法。当用户锻炼时,他们可能会将设备放在口袋或包中,或者将其握在手中。因此设备放置的方向是不确定的。所以首先,我们可以通过计算三个加速度的矢量长度来获得行走运动的正弦轨迹。

第二步是峰值检测。我们记录最后的向量长度和运动方向。通过矢量长度的变化,我们可以确定当前的加速度方向,并与上次保存的加速度方向进行比较。如果相反,即刚刚过了峰值状态,则进入计步逻辑进行计步,否则丢弃本段。通过累加峰值时间,我们可以计算出用户走了多少步。

最后是去除噪声(干扰)。手机或智能手表等手持设备都会出现一些低幅度、快速抽动的状态,这就是俗称的手抖,或者用户想通过短时间快速重复摇动设备来模拟行走。如果这些干扰数据不去除,将会影响步记录的准确值。对于这种干扰,我们可以通过在检测中添加阈值和节奏判断来过滤它。目前人类最快的跑步频率为5HZ(当然也不排除人类借助其他设备跑步频率可以超过这个频率),这意味着相邻两步之间的时间间隔至少大于0.2秒。如图所示,如果计两步,如果计步时间间隔小于0.2秒,则不计步。这样我们就过滤掉了高频噪声,即步频过快的情况。同时,我们将其与上次的加速度进行比较,并设置一定的阈值来判断运动是否有效(图中的绿线)。只能记录有效的动作。

如果知道步行和跑步的步数,那么通过身体的身高、体重和性别就可以大致知道人的步长。改进后可以变成距离和速度计。通过三轴加速度传感器,我们可以了解用户的运动状态。除了计步之外,加速度传感器还可以与陀螺仪和磁传感器融合来计算行走轨迹。

所以从原理出发——计步来自于晃动手机,但是用手晃动太累了,所以我用夜神模拟器记录“晃动”操作,然后加速重复操作(虽然有些是被过滤掉的)出来了,但至少看起来数据不再那么假了)。

进入正题——开始操作

本来打算写很多字的,但是当我开始写的时候,却发现没什么可写的。我们先看视频,记下视频中的一些操作。视频是拼接的。第一次录的时候,我的手差点抽筋。录完帮助室友跑步的视频后,我发现了一个更舒服的操作,我打算在视频结束后谈谈。 (原本打算录一次讲解,但是宿舍比较吵,所以就加了字幕。小黑的歌和他的颜值一样好=w=)

笔记:

记录摇动操作时,不必要地不要花费太多时间。不要先跑完5分再完成距离,因为距离一到2km系统就会自动结束,你就没有时间“抖”了。 (以后可以直接快速定位到需要的点,俗称:飞上来)一旦定位到的两点距离太远,瞬时速度就会超过6.5m/s,即瞬时速度会变成红色,系统会认为你在飞行,你的距离不会计入总距离(我试过瞬时速度40.5m/s==)。刷距离的时候,先尝试提高你的速度(除了更快的手速,下面我会讲一个优化方法),这样可以给你更多的时间来获取步数。记步时要注意匀速。如果你下降到最低速度,你的结果将无效。

看完视频,感觉计步的问题已经解决得很好了,在镜湖长跑确实很好玩,但是到处跑太累了。而且有时候距离也控制不好。

然后我发现这个模拟器的虚拟定位可以记住位置! ! !

于是我打算找两个距离差不多的点,然后在这两个点之间来回切换(稍后会放视频),这立刻就省了我不少力气。

我试了一下,根据我电脑的延迟,当两点在11.4023米处汇聚时,我的速度可以达到6.5m/s,就可以记录为距离了。 【甜蜜的微笑】

那么问题来了:我地图上只有经纬度坐标,如何计算距离呢?

解开:

假设A、B两点的经度和纬度分别为(jA,wA)(jB,wB),则半径为R的球面上两点之间的最短距离(大弧)为:

弧AB=R*[sin(wA)sin(wB) cos(wA)cos(wB)*cos(jA-jB)]

地球是一个近乎标准的椭球体,赤道半径为6378.140公里,极地半径为6356.755公里,平均半径为6371.004公里。如果假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经度为基准,那么地球表面任意两点之间的表面距离可以为根据两点的经度和纬度来计算(这里忽略了地球表面地形带来的误差,只是理论估计)。假设第一个点A的经度和纬度是(LonA,LatA),第二个点B的经度和纬度是(LonB,LatB)。根据0度经度基准,东经取经度正值(),西经取经度负值(-),北纬取90纬度值(90-),南纬取90 纬度值(90 ),则经过上述处理后的两点分别计为(MLonA,MLatA)和(MLonB,MLatB)。然后根据三角求导,可以得到如下计算两点之间距离的公式:

  C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) cos(MLatA)*cos(MLatB)   Distance = R*Arccos(C)*Pi/180

这里,R和单位相同。如果以6371.004公里为半径,则单位为公里。

如果只把经度当作正负,不把纬度当作90-(假设都在北半球,只有南半球的澳大利亚有应用意义),那么公式就是:

  C = sin(LatA)*sin(LatB) cos(LatA)*cos(LatB)*cos(MLonA-MLonB)   Distance = R*Arccos(C)*Pi/180

上式可以通过简单的三角变换推导出来。

如果三角函数的输入和输出都是弧度,则公式还可以写为:

  C = sin(LatA*Pi/180)*sin(LatB*Pi/180) cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)   Distance = R*Arccos(C)*Pi/180

附:源码

/** * google maps的脚本里代码 */ private const double EARTH_RADIUS = 6378.137; private static double rad(double d) { return d * Math.PI / 180.0; } /** * 根据两点间经纬度坐标(double值),计算两点间距离,单位为米 */ public static double GetDistance(double lat1, double lng1, double lat2, double lng2) { double radLat1 = rad(lat1); double radLat2 = rad(lat2); double a = radLat1 - radLat2; double b = rad(lng1) - rad(lng2); double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2))); s = s * EARTH_RADIUS; s = Math.Round(s * 10000) / 10000; return s; }

你可以自己选择点并计算距离~~~~~~

那么我在檀香旁边给出两点:

A(32.,118.64402) B(32.,118.64392)

距离=0.km =11.4023 m

播放视频:

欺骗一时的感觉很好,欺骗一直的感觉也很好。 (这根本不是苏联的。)

尝试了这些之后,我终于觉得跑一圈会舒服一些。 (并不是大家不喜欢运动,只是不喜欢这种形式。)

我不否认大家在阳光下长跑! ! ! !

仅用于学习和交流。由于使用本工具而造成的一切不良后果均由使用者负责,与作者无关(¬︿̫̿¬)

为了我的持续经营,请继续一如既往地支持阳光跑。 。

其实有时候如果网络环境好的话,飞行时系统也会记录下来。

而且,有些手机的传感器对于步数确实没有那么敏感,所以严格来说,不能以步数作为衡量标准。 ← ←。你知道我的意思。

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

如有疑问请发送邮件至:bangqikeconnect@gmail.com