回答
该解决方案将需要一些试验和错误来看看哪些工作,因为它很大程度上取决于数据质量和您拥有多少数据点。
如果以高频率拍摄数据点,那么使用line-line intersection测试可能会足够好。如果由两个相邻数据点形成的线与赛道上的终点线相交,那么您可以将其视为一圈。但是,当数据点距离太远时,这会失败。如果汽车在终点线上离开赛道,也可能会失败,除非您对解决方案非常小心。
更通用的解决方案是将轨道分成两个多边形:每个代表轨道的一半。使他们的报道包括偏离轨道。然后使用point in polygon测试来确定哪些数据点位于轨道的哪一半。然后遍历点并记下汽车何时从一半移动到另一半。每第二次过渡应该表示一圈。然而,如果赛车失去控制并且在两圈之间摆动而没有绕完整圈,则这将失败。
您可以通过在转换之间执行最少数量的数据点来解决此问题。另一个想法是将赛道分成三个多边形并确保赛车始终向前移动。
假设轨道足够小以至于我们可以假设这些点位于一个平面上,例如我们可以忽略地球的曲率。在这种情况下,您可以将所有点转换为平面中的点,例如,没有z坐标的P(i)=(x(i),y(i))。
考虑以下算法:找到位于轨道中间某处的点C =(Cx,Cy),例如,所有点的质心。确切的位置并不重要。然后设想一个观察者站在C点,并始终旋转以面对车辆。您想要统计观察者在车辆行驶时转动多少次。
要做到这一点,您需要能够找到观察者随着车辆在点列表中两个相邻点P(i)和P(i + 1)之间移动而旋转的带符号角度。这与找到向量P(i)-C和P(i + 1)-C之间的符号夹角相同,这可以使用cross product来完成。这是特别容易的,因为我们有二维点。我们有
P =(X(I) - CX)*(Y(I + 1) - CY)+ (X(I + 1) - CX)*(Y(I) - CY)
如果P为正则观察者逆时针旋转,如果是负值,则观察者正在顺时针旋转。观察者旋转角度是
THETA(I,I + 1)=反正弦(P/ (长度(X(ⅰ) - C)*长度(X(I + 1) - C)) )
其中theta(i,i + 1)取决于观察者正在旋转的方向而为正或负。
在这里,我们使用的是相邻点靠近在一起,以便观察者只是在相邻点之间小于π/ 2的小角度旋转。
要查找观察者旋转的总量,只需从路径的开始到结束加总所有的theta,并确保在车辆由于某种原因向后移动时保留theta的符号。假设theta是弧度的,电路的总数就是thetas除以2 * pi的总和。
对于真正令人讨厌的,这只是使用定义来计算C周围车辆路径的winding number。
- 1. 计算GPS坐标半径
- 2. 从一组坐标和距离计算新的GPS坐标?
- 3. Rails:以新记录存储GPS坐标
- 4. 算法从KML跟踪GPS坐标
- 5. 计算从一个GPS坐标到另一个坐标的距离?
- 6. 从多个GPS坐标计算到最近岸的距离
- 7. 从GPS坐标计算PNG地图上的X和Y位置
- 8. Python从2个GPS坐标计算速度,距离,方向
- 9. 从GPS坐标计算Esri地图范围
- 10. 计算圆圈内的标记
- 11. 计算oracle游标中的记录数
- 12. 计算坐标
- 13. GoogleMaps标记的地理坐标方位和坐标计算
- 14. 使用GPS坐标标记视频帧
- 15. 从一堆Google地图标记中导出GPS坐标?
- 16. 从2D位置计算3D标记坐标(运动捕捉)
- 17. Android Gps坐标
- 18. gps坐标+米
- 19. QuickTime GPS坐标
- 20. 从GPS坐标列表中确定最大和最小GPS坐标
- 21. 伪 - 计算从记录
- 22. 使用GPS坐标进行最短距离计算
- 23. 使用GPS坐标计算道路距离
- 24. 如何计算两个地理/ GPS坐标之间的角度?
- 25. 以度为单位的GPS坐标计算距离
- 26. 以度为单位的GPS坐标来计算距离
- 27. Android计算2个GPS坐标之间的角度
- 28. 计算GPS坐标以形成给定大小的半径
- 29. 在GPS坐标数据库中查找“热点”的算法
- 30. GPS坐标偏差
这里有很多GPX解析库。我推荐名为“GPX”的Haskell库。 – 2011-01-29 17:13:05
你能描述你的数据吗?这是按时间排序的一组点吗?你如何定义一圈? – marcog 2011-01-29 17:21:08