- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在解决以下问题:我有一个对象,我知道它现在的位置和 300 毫秒前的位置。我假设物体在移动。我有一个要点,我希望对象到达。
我需要的是以我知道是左转还是右转的格式获取从当前对象到目标点的角度。
这个想法是假设当前位置与最后已知位置和当前位置之间的角度。
我试图在 MATLAB 中解决这个问题。我已经尝试使用 atan2
的多种变体,但要么在某些情况下我得到了错误的角度(比如当我的对象在绕圈时),要么我在所有情况下都得到了错误的角度。
搞砸的代码示例:
a = new - old;
b = dest - new;
alpha = atan2(a(2) - b(2), a(1) - b(1);
其中 new
是当前位置(例如 x = 40; y = 60; new = [x y];
),old
是 300 毫秒的旧位置,dest
是目标点。
这是一张图片,用几个例子来说明这个问题:
在上图中,绘制并注释了一些点。黑线表示我们估计的物体当前朝向。
如果目标点是 dest1
,我希望角度大约为 88°。
如果目标点是 dest2
,我希望角度大约为 110°。
如果目标点是 dest3
,我希望角度约为 -80°。
最佳答案
首先,您需要注意上面显示的示例图上的比例。 x 轴刻度以 1 为步长移动,y 轴刻度以 20 为步长移动。两个轴适当缩放的图片(如使用命令 axis equal
)会比你的窄很多,所以您期望获得的角度不正确。预期角度将接近直角,与 90 度相差几度。
方程 Nathan derives对列向量输入有效 a
和 b
:
theta = acos(a'*b/(sqrt(a'*a) * sqrt(b'*b)));
如果您想更改此方程以使用行向量,则必须在点积和范数的计算中切换转置运算符,如下所示:
theta = acos(a*b'/(sqrt(a*a') * sqrt(b*b')));
theta = acos(dot(a,b)/(norm(a)*norm(b)));
最后,您必须考虑方向,即角度应该为正(顺时针旋转)还是负(逆时针旋转)。您可以通过计算 cross product 的 z 分量的符号来做到这一点。的 b
和 a
.如果它是正的,角度应该是正的。如果为负,则角度应为负。使用函数 SIGN ,我们的新方程变为:
theta = sign(b(1)*a(2)-b(2)*a(1)) * acos(dot(a,b)/(norm(a)*norm(b)));
对于您的示例,上述等式给出的三个点的角度分别为 88.85、92.15 和 -88.57 dest1
, dest2
, 和 dest3
.
注意:您需要注意的一种特殊情况是,如果您的对象直接移动远离目标点,即如果 a
之间的角度和 b
是180度。在这种情况下,您将不得不选择一个任意的转弯方向(左或右)和转弯的度数(180 度是理想的 ;))。这是您可以使用函数 EPS 来解释这种情况的一种方法。 :
theta = acos(dot(a,b)/(norm(a)*norm(b))); %# Compute theta
if abs(theta-pi) < eps %# Check if theta is within some tolerance of pi
%# Pick your own turn direction and amount here
else
theta = sign(b(1)*a(2)-b(2)*a(1))*theta; %# Find turn direction
end
关于matlab - 如何正确计算移动物体的方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209360/
大家好,本文实现了相机碰撞检测,使相机不穿墙壁、物体,并给出了思路和代码,感谢大家~ 关键词:数字孪生、three.js、Web3D、WebGL、相机碰撞、游戏相机 我正在承接Web3D数字孪生项
我有一个大小为 12*30 的字符串的图像。我想创建一个动画,让它给人一种拉伸(stretch)字符串的感觉。我通过缩放图像来做到这一点,但我面临的问题是缩放图像没有发生碰撞。它仅出现在原始图像大小的
我的对象列表是如此初始化: $( function() { var $container = $('div.hikashop_products'); $container.isotop
我听说 swing 默认情况下是双缓冲的。我不想让 Swing 双缓冲。我正在使用双缓冲,我想添加一些 Swing 对象(现在只是添加到 JPanel 中的 JButton,然后再添加到 JFrame
几天来我一直在思考最好的解决方案,但似乎无法找到正确的想法。 我有一 block (物体),我想将它们放入尽可能小的空间中。我最终寻找的是这样的东西 http://i.stack.imgur.com/
我的纹理不仅仅是一个盒子或圆形,我的 body 需要与这个形状相同,所以我想结合多个 body 来达到我想要的形状,这甚至可能吗?或者有更好的方法吗?我正在使用带有 libgdx 框架的 java。
我遇到的情况是,我有很多计算机并且需要有唯一的 ID。 他们会通过 API 请求发送其 uniqueId。该对象看起来像 class ID { long timestamp; int id; }
我正在尝试检测一张卡片,但问题是有时图像不好并且有多个背景,如下所示: 没有很好地定义边缘 ![没有很好地定义边缘][1] 示例背景 ![示例背景][2] 我这样做了: gray = cv2.cvtC
我正在尝试从仅包含一辆车和简单背景的图像中分割汽车,如 但是我从我的实现中得到的是这个 和 分别 但它非常容易处理几乎已经分割的图像,例如。 给出类似 的结果 我使用的代码是 import cv2 i
我正在开发一个项目,在该项目中我从另一个对象/函数中引用一个变量。然而我总是返回 false。我不确定我是否正确调用它。 这是验证函数: app.validation = function(){
数组只是伪装的对象吗?为什么/为什么不呢?他们以什么方式(这样/不是)? 我一直认为 JS 中的数组和对象本质上是相同的,主要是因为访问它们是相同的。 var obj = {'I': 'me'}; v
我正在使用 PlayN 构建一个涉及石头的游戏,用户必须在物理世界中移动(通过重力等)。我希望用户能够使用触摸板直接操纵石头,并通过以下方式给它们一个速度拖拽并扔掷它们。 现在我有一个实现,其中每个石
http://jsfiddle.net/goldrunt/jGL84/42/这是来自这个 JS fiddle 的第 84 行。通过取消注释第 141-146 行,可以对球应用 3 种不同的效果。 'b
我学习Linux平台下的OpenGL。最近,我尝试使用 glutBitmapCharacter() 创建的文本作为 glu 或 glut 提供的一些二次对象的纹理。但是,glutBitmapChara
我正在使用 AndEngine 创建一个带有 box2d 扩展名的游戏。我想实现一个条件,当两个物体碰撞时,它们应该被移除或重生。最初我尝试使用 if(sprite1.collidesWith(spr
我制作了一个小型 3d 引擎。 但我在旋转功能方面遇到了一些问题。它们使物体不时拉伸(stretch)。这是数学: this.rotateX = function(angle) { var c
我在 Canvas 上制作了一个矩形 mask ,我需要 mask 外的任何东西都具有 0.8 的不透明度,因此 mask 外的所有对象都被视为不透明请看一下 fiddle 。 http://jsfi
我是 Direct3D 的新手,我在一个项目中从网络摄像头拍照并在它前面绘制一些 3D 对象。 我能够使用正交投影将网络摄像头图像渲染为背景。 //init matrix D3DXMatri
我是一名优秀的程序员,十分优秀!