如何在MatLab中计算两个二维向量之间的方向角?
我正在尝试实施一个脚本来分析我的一些数据.我有三个点的位置信息(P1,P2,P3).我想从矢量p1p2中找到点P3的角位移,如此图: p3a,p3b,p3c,p3d显示了P3的可能相对位置.如图所示,我希望输出角度的符号描述其与向量P1P2的相对位置. 我使用的代码如下(适用于图表): v1 = p2 - p1; x1 = v1(1); y1 = v1(2); v2 = p1 - p3; x2 = v2(1); y2 = v2(2); angle = atan2d(x1*y2-y1*2,x1*x2+y1*y2); P3处于P3A时,这可以根据需要起作用,给出正确大小的负角(-77度).但是,当P3处于P3D时,它会输出一个大的正角(+150度),而不是所需的大负角度. 解决方案 首先,一种更简单的方法来思考具有坐标的两个2D向量之间的角度的方法是将轴与坐标向量对齐,并考虑两个向量之间的关系.使用下面的图形,我们可以看到可以通过从另一个角度减去一个角来找到相
8 2024-02-20
编程技术问答社区
atan2-查找两点之间的角度(360度)。
我有一个游戏,那里有Player和一些enemies.这些敌人,就像玩家本身一样,可以拍摄bullets.但是子弹的angle不会像预定的那样改变.新创建的子弹应该可以找到自身与玩家之间的角度,然后朝那个方向前进 - 必须在360°中完成. 我遵循这个答案,但我相信我做了不正确的事情. 因为这是发生的事情: 这就是应该的方式: 目前只能这样: 这是负责子弹X&Y的代码的一部分: angle = Math.atan2(Game.getPlayerY(), Game.getPlayerX()) - Math.atan2(getY(), getX()); if (angle
2 2024-02-20
编程技术问答社区
绘制一个直观的角的图形
我正在尝试绘制对象的标题.我有四个点 - 让我们称它们为 mdex mdey(aka x1,y1), thpx thpy(aka x2,y2). 我发现y的变化,以及x(dy和dx)的变化,然后将其输入到atan2d函数中.然后,我浏览结果并将其绘制到图表上. 图表上的比例从-180到180.然后它"弹出"到图的另一侧(即181实际上是-179). 这是有问题的,因为它看起来像是在没有真正的角度的角度上的大幅变化 - 它只是"翻转".此外,这拧紧了我的角速度计算,这些计算基于点之间的变化.最初,我只是尝试将图表转换为0-360刻度,通过将180个添加到所有低于0的值的值中. 这是图形,因此您可能会更好地理解问题(该图是在我尝试了0-360转换之后). 我的问题 我想知道是否可以使用不同的功能来计算我的角度,从而使我有一个不断增加的值,一种修改数据以使其绘制得很好的方法,或者是一种修改图形的方法看起来直觉吗? 预先感谢! 解决方案
0 2024-02-20
编程技术问答社区
如何将atan2()与其他弧度角系统结合使用
我在JavaScript中为此而苦苦挣扎,但是此问题也适用于许多其他语言/环境. 我想让一个对象向另一个对象的位置旋转,然后使用: atan2(obj1.dy, obj1.dx) - obj2.getRotation() 检查第二个对象是否应在给定时间顺时针或逆时针旋转. 在Kineticjs中,我正在使用的JS/HTML5/Canvas编程环境中,该角度在从0到2 pi的弧度中指定,从正y轴开始,然后顺时针旋转.在许多其他编程环境中也可以看到这种行为. 然而,当用 Math.atan2(y,x)函数计算第二个对象的运动角度时,该角度是从-pi到PI的,从正极x轴开始,逆时针. 澄清: 问题: 如何从atan2()函数的结果中计算正常弧度的角度? 解决方案 如果您希望角度从y轴上的0顺时针增加,请计算为atan2(x,y)的角度.但是,这给出了x 其他解决方案 在两种情况下,值都是相同的,Modulo 2*PI,并对不同的符号和
0 2024-02-20
编程技术问答社区
如何从R中的U和V风成分计算风向
我有U和V风组分数据,我想在r. 中从这些值中计算风向 我想以0-360度的尺度获得风向数据,0°或360°表示北部的风向吹,90°指示向东吹风,180°表示为180°向南吹风,向西吹270°. 以下是一些示例数据: wind
0 2024-02-20
编程技术问答社区
用math.atan2计算线段之间的角度(Python)
我正在处理空间分析问题,并且该工作流程的一部分是计算连接线段之间的角度. 每个线段仅由两个点组成,每个点都有一对xy坐标(笛卡尔).这是Geogebra的图像. 我总是有兴趣在0到180范围内获得正角.但是,根据输入线段中顶点的顺序,我得到了各种角度. 我使用的输入数据作为坐标的元素提供.根据顶点创建顺序,每个行段的最后一个/终点可能不同.以下是Python代码中的一些情况.我得到的线段的顺序是随机的,但是在元组中,第一个元素是起点,第二个元素是终点.例如,DE线段将具有((1,1.5),(2,2)),并且(1,1.5)是起点,因为它在坐标元组中的第一个位置. 我需要确保我将在DE,DF和ED,DF之间获得相同的角度. vertexType = "same start point; order 1" #X, Y X Y coords lineA = ((1,1.5),(2,2)) #DE lineB = ((1,1.5),(2.5,0
0 2024-02-20
编程技术问答社区
计算接触点的角度并在安卓系统中旋转它
数学再次击败了我.这是一项简单的任务,但我无法设法完成. 方案:我在表面视图上绘制圆形图像.用户触摸图像边框上的一个点并开始拖动它.我需要根据用户运动旋转圆形图像. 我有两个重要的信息,图像中心x,y坐标和接触点坐标. 您可以在图像中看到,用户触摸了一个点,根据我的抽奖,接触的点角应大约40个.我无法正确计算它. 我尝试使用此公式: angle = Math.atan2(touchedY - centerY, touchedX - centerX) * 180 / Math.PI 我无法理解我应该如何计算角度,因为现在它不正常,值不好.例如,在图像的情况下,角度计算为-50. 谢谢您的时间,很乐意获取任何信息. le:实际上我犯了一个错误,如下所述.圈子应该像: 解决方案 让我们重新制定问题:您想找到两个向量之间的角度.第一个矢量是从中心点( u )向上升级的upvector,第二个向量是从中心点到接触点的向量( v ) . 现在我
4 2024-02-03
编程技术问答社区
使用ARM NEON汇编对atan2进行SIMD矢量处理
我想使用霓虹灯说明和臂组件来计算4点的幅度和角度.在我的情况下,大多数语言中都有一个内置库,C ++可以计算角度(AtAN2),但只有一对浮点变量(x和y).我想利用处理Q寄存器的SIMD指令,以计算4个值的向量. . 需要准确性不高,速度更重要. 我已经有一些装配说明,这些说明计算了4个浮点寄存器的幅度,并且可以接受我的应用程序. Q1包含4" X"值(X1,X2,X3,X4). Q2包含4" Y"值(Y1,Y2,Y3,Y4). Q7包含4个结果的大小(x1^2 + y1^2,x2^2 + y2^2,x3^2 + y3^2,x4^2 + y4^2). vmul.f32 q7, q1, q1 vmla.f32 q7, q2, q2 vrecpe.f32 q7, q7 vrsqrte.f32 q7, q7 使用SIMD指令计算两个向量的近似atan2的最快方法是什么? 解决方案 请参阅数学-Neon 用于现有的单个有价值的浮点实现.由于它没
40 2023-11-17
编程技术问答社区
在R中对图像进行极坐标转换
我试图将R中的图像(表示为矩阵)转换为极坐标空间,其原点为0,0(左上角).给定215x215矩阵x,看起来像: x0 = as.vector(col(x)) y0 = as.vector(row(x)) r = sqrt( (x0^2) + (y0^2) )#x a = atan(y0/x0)#y m = as.matrix(data.frame(y=a, x=r)) m = round(m) m[m>215] = NA m[m==0] = NA xn = x[m] xn = matrix(xn, 215, 215) 但是,xn看起来像: 当我期望这一点时: 知道我做错了什么? 解决方案 角度存在问题:atan返回弧度的角度. 如果您绕过它,没有太多信息... 尝试: a = atan(y0/x0) * 215 / (pi/2) 不是您期望的图像,显​​然是反变形的, 中心位于图像中间. # Load the image li
4 2023-10-25
编程技术问答社区
scipy.integration的Odeint函数给出错误的结果
i使用odeint函数求解耦合的微分方程系统,并在求解系统后绘制一个变量(theta_i)之一.我的变量(theta_i)来自等式: theta_i = np.arctan2(g1,g2) 其中G1 ANG G2是在同一函数中计算的变量.结果必须在-pi和pi之间,它们应该看起来像这样(MATLAB模拟的图): 但是,当我尝试在Odeint完成后绘制theta_i时,我会得到这个(从我的python代码中绘制): 这真的很奇怪.当我在theta_i的弯曲后(仍在功能内)打印值时,它们看起来正确(在-0.2和0.5之间),因此结果必须与结果的存储和我的odeint实现有关.来自Odeint解决方案的所有其他变量都是正确的.我搜索了类似的帖子,但是没有人遇到同样的问题.这里可能有什么问题?我是Python的新手,我使用Python 2.7.12.先感谢您. import numpy as np from scipy.integrate import odeint i
12 2023-08-22
编程技术问答社区
帮助正确计算atan2
我需要计算线之间的角度.我需要计算Atan.所以我正在使用这样的代码 static inline CGFloat angleBetweenLinesInRadians2(CGPoint line1Start, CGPoint line1End) { CGFloat dx = 0, dy = 0; dx = line1End.x - line1Start.x; dy = line1End.y - line1Start.y; NSLog(@"\ndx = %f\ndy = %f", dx, dy); CGFloat rads = fabs(atan2(dy, dx)); return rads; } 但我无法获得180度以上((179摄氏度之后178..160..150等等. 我需要在360度上旋转.我该怎么做?怎么了? maby这有帮助: //Tells the receiver when one or m
38 2023-05-05
编程技术问答社区
JavaScript atan2()函数没有给出预期结果
通常,极性坐标从0到π到2π(在2 π之前,因为它再次等于0).但是,当使用JavaScript atan2()函数时,我得到了一个不同的,怪异的范围: Cartesian X | Cartesian Y | Theta (θ) =========================================================== 1 | 0 | 0 (0 × π) 1 | 1 | 0.7853981633974483 (0.25 × π) 0 | 1 | 1.5707963267948966 (0.5 × π) -1 | 1 | 2.356194490192345 (0.75 × π) -1 | 0 | 3.141592653589793 (1 × π) -1
26 2023-03-31
编程技术问答社区
GLSL上强大的atan(y,x)用于将XY坐标转换为角度。
在GLSL中(特别是我使用的3.00),有两个版本的 atan():atan(y_over_x)只能在-pi/2,pi/2之间返回角度,而atan(y/x)可以考虑所有4个象限C ++. 我想使用第二个atan将XY坐标转换为角度. 但是,atan()在GLSL中,除了在x = 0时无法处理的情况下,atan()不是很稳定.尤其是在x接近零的情况下,划分可以溢出产生相反的角度(您将接近-pi/2的东西接近-pi/2,您可能会得到大约pi/2). 什么是一个好的,简单的实现,我们可以在GLSL atan(y,x)顶部构建以使其更强大? 解决方案 我要回答自己的问题以分享我的知识.我们首先注意到,当x接近零时,这种不稳定性发生.但是,我们还可以将其翻译成abs(x) |y|,如下所示: 我们知道atan(x,y)在绿色区域中更加稳定 -
716 2023-03-31
编程技术问答社区
不用std函数或C99计算atan2
我正在计算3轴加速度计的角度,但我的编译器没有ATAN或ATAN2函数.它具有保留的内存插槽,但它调用了我在任何文件中找不到的函数. 我的编译器是Keil µVision 4运行ARMCC编译器. 编译具有文件数学. extern _ARMABI double atan2(double /*y*/, double /*x*/); 是否可以包含一个LIB或功能,该功能已实现Arctan的功能? 还是有替代功能可以从加速度计计算角度?我需要对角度的完整3轴校准. 编辑:我希望避免一个充满预计值的表. 解决方案 实现自己的arctan2并不难.将arctan2转换为arctan使用 infinite系列来计算arctan.如果您将这个无限序列的足够数量的术语汇总在一起,您将非常接近库函数arctan2的功能. 这是一个类似的实现exp() 您可以用作参考. 其他解决方案 以下代码使用 normalized_atan(x)〜(b x + x^2)/
62 2023-03-20
编程技术问答社区
不用std函数或C99计算atan2
我正在计算3轴加速度计的角度,但我的编译器没有ATAN或ATAN2函数.它具有保留的内存插槽,但它调用了我在任何文件中找不到的函数. 我的编译器是Keil µVision 4运行ARMCC编译器. 编译具有文件数学. extern _ARMABI double atan2(double /*y*/, double /*x*/); 是否可以包含一个LIB或功能,该功能已实现Arctan的功能? 还是有替代功能可以从加速度计计算角度?我需要对角度的完整3轴校准. 编辑:我希望避免一个充满预计值的表. 解决方案 实现自己的arctan2并不难.将arctan2转换为arctan使用 infinite系列来计算arctan.如果您将这个无限序列的足够数量的术语汇总在一起,您将非常接近库函数arctan2的功能. 这是一个类似的实现exp() 您可以用作参考. 其他解决方案 以下代码使用 normalized_atan(x)〜(b x + x^2)/
14 2023-03-20
编程技术问答社区
如何将atan2()映射到0-360度
atan2(y, x)在180°下的不连续性切换到-180°.. 0°顺时针方向. 如何将值的范围映射到0°..360°? 这是我的代码: CGSize deltaPoint = CGSizeMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y); float swipeBearing = atan2f(deltaPoint.height, deltaPoint.width); 我正在计算startPoint和endPoint,两个xy点结构的刷触摸事件的方向.该代码适用于iPhone,但任何支持atan2f()的语言都会做. 解决方案 (x > 0 ? x : (2*PI + x)) * 360 / (2*PI) 其他解决方案 使用Modulo 解决方案 一个简单的解决方案,可捕获所有情况. degrees = (degrees + 360) % 360; // +360 fo
36 2023-03-19
编程技术问答社区
Math.Atan2或C#中的类实例问题
这是我的问题(C#): double Y = 0.0; double X = -21.0; double q1_Test = Math.Atan2(0.0, -21.0); // gives Math.Pi double q1_Test2 = Math.Atan2(( double)Y, (double)X); // gives Math.Pi double w1 = .getW1(); // This is a class which updates a variable double w2 = .getW2(); // This is a class which updates a variable double q1 = Math.Atan2(w2, w1); // ** gives -Mat
26 2023-02-21
编程技术问答社区
在计算粒子爆炸的方向时遇到困难
我正在尝试制作一个粒子爆炸系统,每个粒子 直接远离中心点.但是我得到了一些非常时髦的行为. 我正在使用Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;来计算到中心点的方向,然后通过从角度减去180度来逆转方向. 这是我的其余代码处理粒子: for ( var i = 0; i
14 2023-01-29
编程技术问答社区
Math.Atan2或C#中的类实例问题
这是我的问题(C#): double Y = 0.0; double X = -21.0; double q1_Test = Math.Atan2(0.0, -21.0); // gives Math.Pi double q1_Test2 = Math.Atan2(( double)Y, (double)X); // gives Math.Pi double w1 = .getW1(); // This is a class which updates a variable double w2 = .getW2(); // This is a class which updates a variable double q1 = Math.Atan2(w2, w1); // ** gives -Mat
24 2022-09-14
编程技术问答社区
两条直线在同一点上的夹角
假设我是 2d 平面上的任意两个点 (p1(x1,y1), p2(x2,y1)),并且这两个点与中心 (c(c1,c2)) 形成一条线.因此我是两条线在同一点结束.我想知道如何计算这两条线之间的角度.我希望能够显示 0-2pi 的角度范围.还有 0-(-2pi) ,它让 p1 和 c 形成的线成为第 1 行和其他第 2 行.我确实对使用 atan2() 有一些想法,但没有像我想要的那样工作.谢谢 解决方案 将点转换为向量(从每个端点减去中心点)并使用 点积 来计算角度.
386 2022-07-19
编程技术问答社区