从 x,y 坐标检测左转或右转的算法

2023-12-13

我有一个 x,y 坐标数据集,从原点开始,每秒记录一次。我可以检测距离、速度、加速度、位移模量。有什么算法可以检测左转还是右转吗?

我目前正在每 10 秒计算一次距离和位移模数,如果位移大约等于距离,则车辆处于直线路径上,但值发生变化则涉及转弯。

是否有算法来决定是左转还是右转?我的数据看起来像这样

Time   x     y
 0     0     0
 1    -0.2  -0.1
 2    -0.7   0.9
 3    -0.8   0.9
 4    -1     0.8
 5    -1.1   0.8
 6    -1.2   0.7
 7    -1.4   0.7
 8    -1.9   1.7
 9    -2     1.7
10    -2.2   1.6
11    -2.3   1.6
12    -2.5   1.5
13    -2.6   1.5
14    -2.7   1.5
15    -2.9   1.4
16    -3.6   1.2
17    -4.1  -0.1
18    -4.7  -1.5
19    -4.7  -2.6
20    -4.3  -3.7
21    -4.3  -3.7
22    -4.7  -3.8
23    -6.2  -3.1
24    -9.9  -1.9
25   -13.7  -1.9
26   -17.9  -2
27   -21.8  -0.8
28   -25.1  -0.6
29   -28.6   1.8

看3点p0, p1 and p2,你可以看看两个向量的相对方向p1 - p0 and p2 - p1。一种简单的方法是计算两个向量之间的叉积。叉积的 x 和 y 分量均为 0,因为两个向量均位于 xy 平面中。因此只需计算叉积的 z 分量。

如果叉积的 z 分量为正,则您知道第二个向量相对于第一个向量指向左侧,因为第一个向量、第二个向量和正 z 方向上的向量都是右手向量。如果叉积为负,则第二个向量相对于第一个向量指向右侧。

我使用了我疯狂的 Python 技能(我大约每年使用一次 Python...)将其放入下面的代码中。有一点逻辑,可以在中间点打印左/右指定,即使它只能在读取下一个点后才能计算。为了实现这一点,之前的几行被保存起来,并且打印被延迟。实际的计算是在calcDir()功能。

import sys

fileName = sys.argv[1]
dataFile = open(fileName, 'r')

def calcDir(p0, p1, p2):
    v1x = float(p1[0]) - float(p0[0])
    v1y = float(p1[1]) - float(p0[1])
    v2x = float(p2[0]) - float(p1[0])
    v2y = float(p2[1]) - float(p1[1])
    if v1x * v2y - v1y * v2x > 0.0:
        return 'Left'
    else:
        return 'Right'

lineIdx = 0
for line in dataFile:
    line = line.rstrip()
    lineIdx += 1
    if lineIdx == 1:
        print line
    elif lineIdx == 2:
        line0 = line
        print line0
    elif lineIdx == 3:
        line1 = line
    else:
        line2 = line
        dir = calcDir(line0.split()[1:], line1.split()[1:], line2.split()[1:])
        print line1 + ' ' + dir
        line0 = line1
        line1 = line2

print line2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 x,y 坐标检测左转或右转的算法 的相关文章

随机推荐

  • PermissionError: [Errno 13] 权限被拒绝: '/code/manage.py'

    我试图在 docker 容器上运行 django 应用程序 按照以下提到的步骤操作https docs docker com compose django 但运行命令后docker compose run web django admin
  • 为什么这个 for 循环不处理完整的数据集?

    背景 我有一个活动门票分配的电子表格 电子表格的每一行都有一个名称和分配的票数 我需要更改电子表格 以便每个票证的每个名称在不同的行上重复一次 如下所示 我有一个宏可以做到这一点 但它表现出奇怪的行为 问题 该宏不会循环遍历整个数据集 单步
  • 强制 React-Router 加载页面,即使我们已经在该页面上

    有没有办法强制React Router从路径加载页面 即使当前位置已经是该页面 我似乎在反应路由器文档中找不到任何提及这一点的信息 我们在 申请 路线上有一个页面 该页面加载带有英雄图像 一些解释性文本等的登陆页面 以及一个 申请此计划 按
  • 自定义复选框首选项

    我无法自定义我的复选框 尽管我已经在 xml 首选项文件中定义了背景 但它不会提取该文件 1 我试图显示复选框的自定义图像 并将选择器 xml 定义为 android button xml 如下所示
  • JavaScript setInterval 和 this 解决方案

    我需要访问this从我的setInterval handler prefs null startup function init prefs this retrieve rate this intervalID setInterval th
  • pymysql callproc() 似乎影响后续选择

    我正在尝试将代码库从使用 MySQLdb 转换为 pymysql 我遇到了以下问题 想知道是否有人见过类似的问题 简而言之 如果我通过 pymysql 游标 callproc 方法调用存储过程 则使用相同或不同游标通过execute 方法进
  • 无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型

    我有一堂这样的课 public class MyStok public int STId get set public int SM get set public string CA get set public string Br get
  • Flutter Widgets 绑定观察者

    在 Flutter 中 我想返回到我离开应用程序的页面 但当我尝试返回时 它总是导航到登录页面 例如 我有 3 个页面 登录页面 锻炼页面 进度页面 登录页面是我的启动器 当我进入 ProgressPage 时 我离开了应用程序 但是当我恢
  • R:用 sub 替换多个正则表达式

    我有一个包含以下值的字符向量 1 tBodyAcc mean X tBodyAcc mean Y tBodyAcc mean Z tBodyAcc std X 5 tBodyAcc std Y tBodyAcc std Z tGravity
  • 在 WooCommerce 中隐藏特定运输类别的运输方式

    本质上我正在尝试使统一费率方法 Idflat rate 7 disabled当购物车商品的运输类别为 Roller ID92 这是我尝试过的代码 add filter woocommerce package rates wf hide sh
  • 如何创建可点击的列表视图并转到新页面

    我是一名新的安卓程序员 我想创建一个可点击的列表视图 我的意思是 当用户单击一个项目时 它会转到一个新页面并开始一项新活动 请帮我 提前致谢 这是我在 mainactivity java 中的代码 package first app imp
  • 错误:获取非对象的属性[重复]

    这个问题在这里已经有答案了 可能的重复 调用非对象的成员函数 我收到此错误 尝试获取非对象的属性 来自模型 当我尝试通过输入一个字符串从数据库检索 id 时 在本例中是 某物 这是我的模型 function getRoleId role n
  • 如何继承NilClass或者如何模拟类似的功能

    我只想使用空对象设计模式 但我发现我可以从 NilClass 继承 我可以写一个方法 nil 并返回 false 但如果用户在下面编写代码怎么办 if null object puts shouldn t be here end 为了澄清我
  • 如何禁用仅在一张特定图像上右键单击保存

    我正在运营一个亚洲电子商务网站 用户可以在其中发布其产品的图片 有没有办法禁用页面上仅 1 个特定图像的右键单击 例如 查看产品时 会看到一个大图像 然后是一些产品的缩略图 当尝试右键单击大图像时 我想禁用右键单击 但如果他们尝试右键单击缩
  • 使用 OpenCSV 解析 CSV,并在带引号的字段内添加双引号

    我正在尝试使用 OpenCSV 解析 CSV 文件 其中一列以 YAML 序列化格式存储数据 并用引号引起来 因为其中可以包含逗号 它里面也有引号 所以通过加两个引号来转义 我可以在 Ruby 中轻松解析该文件 但使用 OpenCSV 我无
  • 创建具有额外功能的自定义命名元组类型

    我想创建我自己类型的内置命名元组 它具有一些额外的功能 假设我们创建一个类 from collections import namedtuple MyClass namedtuple MyClass field1 field2 它是不可变的
  • Android 应用程序的安装时间?

    有没有办法以编程方式确定 Android 应用程序的安装时间 我在 PackageInfo 等中没有看到任何内容 编辑 澄清一下 应用程序 A 是在时间 X 安装的 在稍后的某个时间 时间 Y 安装了应用程序 B App B 有什么办法可以
  • 如何在 Google Apps 脚本上仅选中一个框而不是两个框?

    function onEdit var ss SpreadsheetApp getActiveSpreadsheet var sheet ss getSheets 1 if sheet getActiveCell E11 sheet get
  • 解析带有大数字的 JSON javascript

    我得到了一个JSON对象包括一个long输入 API 响应中的值 由于javascript无法处理64位数字 因此执行时JSON parse在响应中 它将数字四舍五入到 JavaScript 可以处理的最大值 API响应 subject s
  • 从 x,y 坐标检测左转或右转的算法

    我有一个 x y 坐标数据集 从原点开始 每秒记录一次 我可以检测距离 速度 加速度 位移模量 有什么算法可以检测左转还是右转吗 我目前正在每 10 秒计算一次距离和位移模数 如果位移大约等于距离 则车辆处于直线路径上 但值发生变化则涉及转