python简易物体运动的计算(模拟真实运动轨迹)(1)

文 | Joeric@cnblog

编辑 | EarlGrey

推荐 | 编程派python简易物体运动的计算(模拟真实运动轨迹)(2)公众号(python简易物体运动的计算(模拟真实运动轨迹)(3)ID:codingpy)

前言

在某些python简易物体运动的计算(模拟真实运动轨迹)(4)app中,需要根据用户的实时位置来完成某些事件

例如跑步打卡软件(步道乐跑)、考勤打卡软件(钉钉)、某些基于实时位置的游戏(Pokemon Go、一起来捉妖)

一般解决办法是通过使用安卓模拟器,通过改变模拟器的位置属性来实现模拟位置

但是某些软件会通过比对常用设备的uuid,设备序列号等

一旦出现不匹配或者无法识别就可能会被列为怀疑对象,且安卓模拟器较难实现连续的拟人化的路径

因此,为了减少被判定作弊的可能,只能通过在常用设备上连续的改变实时位置来模拟跑步行为

硬件环境:

软件环境:

具体步骤

1.使用Xcode创建一个IOS项目

打开Xcode -> Preferences 添加Apple ID

python简易物体运动的计算(模拟真实运动轨迹)(5)

python简易物体运动的计算(模拟真实运动轨迹)(6)

在Xcode上创建新项目,打开Xcode -> create a new Xcode project

选择ios菜单 -> Single View python简易物体运动的计算(模拟真实运动轨迹)(7)App,填写项目名 推荐非中文,在事先准备好的文件夹内存放 文件夹推荐非中文

python简易物体运动的计算(模拟真实运动轨迹)(8)

python简易物体运动的计算(模拟真实运动轨迹)(9)

python简易物体运动的计算(模拟真实运动轨迹)(10)

python简易物体运动的计算(模拟真实运动轨迹)(11)

此时将iPhone连接mac 左上角显示连接设备

出现如下结果即为成功:

python简易物体运动的计算(模拟真实运动轨迹)(12)

2.使用Xcode创建一个含有gpx的文件

GPX(GPS eXchange Format,GPS交换格式)是一个XML格式,为应用软件设计的通用GPS数据格式,专门用来存储地理信息

一个GPX文件内包含一些经纬度点组成的轨迹,包含了时间、名字等信息

回到Xcode 打开Xcode -> File -> New -> File...

在IOS菜单下选择GPX File

选择一个位置并命名GPX文件 例:fake_loc.gpx

python简易物体运动的计算(模拟真实运动轨迹)(13)

python简易物体运动的计算(模拟真实运动轨迹)(14)

python简易物体运动的计算(模拟真实运动轨迹)(15)

自动生成如下gpx文件即为成功

python简易物体运动的计算(模拟真实运动轨迹)(16)

分析该gpx文件,格式类似标签语言风格

第一段注释内容大意为:

第二段注释内容大意为:

因此,可以通过输入一系列点来模拟位置,让Xcode来依次定为每一个点来模拟人的跑动行为

3.使用Python来自动生成一系列轨迹点

mac下python与sublime text3的环境配置在第一篇随笔中有记录

分析gpx文件结构可以得到目标gpx文件结构应该为:

  1. <?xml version="1.0"?>

  2. <gpx version="1.1" creator="Xcode">

  3. <wpt lat="坐标点经度1" lon="坐标点纬度1">

  4. </wpt>

  5. <wpt lat="坐标点经度2" lon="坐标点纬度2">

  6. </wpt>

  7. <wpt lat="坐标点经度3" lon="坐标点纬度3">

  8. </wpt> #......

  9. #以此类推 </gpx>

在地图经纬度查询网站可以得到指定地点的经纬度信息:python简易物体运动的计算(模拟真实运动轨迹)(17)http://python简易物体运动的计算(模拟真实运动轨迹)(18)www.gpsspgpython简易物体运动的计算(模拟真实运动轨迹)(19).com/maps.htm

我们选择西安市某211高校作为实验地点:

python简易物体运动的计算(模拟真实运动轨迹)(20)

该网站提供多个公司的定位标准下的经纬度信息

由于每一家公司的定位标准不同,经纬度就会存在偏差,这时候就要看用来模拟的python简易物体运动的计算(模拟真实运动轨迹)(21)APP使用哪家的地图了

我们以某跑步打卡python简易物体运动的计算(模拟真实运动轨迹)(22)APP 步道乐跑 作为实验对象,在该高校实现水平移动与竖直移动

经过验证该python简易物体运动的计算(模拟真实运动轨迹)(23)APP使用的是 谷歌地球标准,通过该网站首先得到一段直线的首尾经纬度点:

python简易物体运动的计算(模拟真实运动轨迹)(24)

python简易物体运动的计算(模拟真实运动轨迹)(25)

python简易物体运动的计算(模拟真实运动轨迹)(26)

开始点:

lat:34.3752989239 lon:108.9080291565

中间点:

lat:34.3740193255 lon:108.9085977848

结束点:

lat:34.3733728774 lon:108.9064091023

在该网站可以通过经纬度获得距离信息:python简易物体运动的计算(模拟真实运动轨迹)(27)http://python简易物体运动的计算(模拟真实运动轨迹)(28)www.hhlinkpython简易物体运动的计算(模拟真实运动轨迹)(29).com/经纬度/

计算得到距离约为78米

后续可根据需求,通过测距来得到相应距离 从而计算得到水平与竖直移动速度

python简易物体运动的计算(模拟真实运动轨迹)(30)

可以得出结论:

在符合跑步打卡python简易物体运动的计算(模拟真实运动轨迹)(31)APP步道乐跑的配速要求:3~9 min/km,例如从北到南生成100个点

经度依次减少 纬度依次增加,并使得这100个点散布在路径上

每个点之间减少或者增加的距离可以通过乘以指定范围内的随机数,使得点之间呈现左右略为摇摆的路径

在点数量较多的情况下近似为人的跑动轨迹

根据该高校的位置情况编写相应的python程序:

  1. import random #初始点信息

  2. a1 = 34.3752989239;

  3. b1 = 108.9080291565; #中间点信息

  4. a2 = 34.3740193255;

  5. b2 = 108.9085977848; for i in range( 1,1000 ): while( a1 >= a2 ): # 循环条件 经度未到达中间点时执行

  6. xa = round( random.uniform(0.2, 7) ) # 随机数,用于模拟人跑动

  7. xb = round( random.uniform(12, 15) ) # 竖直移动

  8. a1 = round( a1 - 0.0000072 * xa , 10 )

  9. b1 = round( b1 0.0000008 * xb , 10 ) # 输出信息

  10. print( '<wpt lat="' str( a1 ) '"' ' ' 'lon="' str( b1 ) '">' ) print( '</wpt>' ) for i in range( 1,1000 ):

  11. xa = round( random.uniform(2, 8) )

  12. xb = round( random.uniform(1, 3) ) # 水平移动

  13. a2 = round( a2 - 0.000003 * xa, 10 )

  14. b2 = round( b2 - 0.000025 * xb, 10 ) print( '<wpt lat="' str( a2 ) '"' ' ' 'lon="' str( b2 ) '">' ) print( '</wpt>' )

得到输出(节选):

python简易物体运动的计算(模拟真实运动轨迹)(32)

将该输出复制并粘贴在gpx文件里

并 command s 保存

可以在xcode项目目录内找到并打开该文件:

python简易物体运动的计算(模拟真实运动轨迹)(33)

4.开始位置模拟

确保手机连接上电脑,并解锁保持屏幕常亮

点击Xcode右上角开始图标:

python简易物体运动的计算(模拟真实运动轨迹)(34)

第一次会提示iPhone未信任开发者

在设置 -> 通用 -> 设备管理 点击该开发者并选择信任

再次在Xcode上点击右上角图标

一分钟左右手机上会多出一个灰色的python简易物体运动的计算(模拟真实运动轨迹)(35)app图标

点击后按home键退出,进入步道乐跑

在Xcode下方多出一栏功能,点击位置图标并选择你的fake_loc

python简易物体运动的计算(模拟真实运动轨迹)(36)

此时python简易物体运动的计算(模拟真实运动轨迹)(37)APP就已经按照gpx文件内的路径开始移动了

python简易物体运动的计算(模拟真实运动轨迹)(38)

总结

在模拟时没有考虑速度的因素,按照默认的Xcode对gpx的点的更新速度来实现的

在控制整体的移动速度时完全是按照点的密集程度,即点的位置变化程度来实现的

后期可以根据时间标签

根据步道乐跑后台数据,检测作弊主要依靠平均配速、每公里的步数、设备uuid、设备序列号来检测的

文章的方法可以解决平均配速、uudi、序列号等问题(因为就是使用真机来实现的)

但是对于步数只能依靠在模拟时通过摇晃手机来实现

原文:https://wwwpython简易物体运动的计算(模拟真实运动轨迹)(39).cnblogspython简易物体运动的计算(模拟真实运动轨迹)(40).com/Joeric07/p/11173651.html

python简易物体运动的计算(模拟真实运动轨迹)(41)

题图:pexels,CC0 授权。

,