【发布时间】:2015-07-31 18:14:26
【问题描述】:
我正在从事一个非常酷的项目,我正在收集有关光标移动的数据,但我遇到了一个问题,我认为我可以使用一些帮助。我不断地读取有关光标 x 和 y 位置的数据(以及其他相关数据),一旦光标在 y 维度上超过某个阈值,我需要计算移动方向(角度)。让我用我画的图来说明:
往往会发生的情况是光标沿一条直线移动,但随后向移动的末端弯曲。我需要计算 theta,即蓝色矢量相对于正 x 轴的角度。我想出的想法是使用最后 2 个样本来很大程度上确定运动方向是什么,否则如果我使用太多样本,我会扭曲实际角度。举一个极端的例子,让我用另一张照片跟进:
这里每个点代表一个样本。请注意,如果我使用 BOTH 点,我想要的真实角度将是错误的(再次,我需要找到光标最后移动的方向,即在行尾绘制的矢量)。我不希望这种情况出现太多,但想知道如果出现这种情况是否有办法解决。
最后,请注意这些运动可以发生在第一象限或第二象限,如果有影响的话。
我真的很感激这里的任何帮助。我正在用 C++ 编写代码,但我想我可以翻译任何答案。谢谢。
【问题讨论】:
-
您至少需要两个点才能找到方向。除非您的采样非常精细,否则您无法避免此问题。
-
如果您使用光标的分辨率,则移动方向不能与最后两点之间的计算方向不同。但是如果您用于计算的分辨率小于光标的分辨率(光标的移动),则可能会出现第二个数字。
-
这是有道理的。你能帮我解决第一个案例吗,用两点?如果我想使用超过 2 个怎么办?我想我不会,我实际上只是感兴趣。
-
以弧度表示的角度等于
atan2(y2-y1, x2-x1)。 -
如果你想用超过 2 个点来确定方向,你就会为自己创建一个线拟合问题。解决方法很多,不简单。
标签: c++ algorithm matlab math angle