问题标签 [atan2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 用于 C/Objective-C/Swift 的 atan2() 的快速粗略版本?
我正在研究一些可以实时绘制平滑连续曲线的图形代码。我想添加对羽毛笔刷的支持。为此,我需要能够计算“法线”或垂直于构成我曲线的线段的线。
纯粹的数学方法是使用 arctan 找到线段的角度,旋转 90 度,然后使用正弦和余弦来找到我的法线的 x 和 y 偏移量。一旦我有了我的角度,使用查找表来替换正弦和余弦就很容易了,但是编写一个高性能、低精度的版本atan2()
似乎很棘手。
我的法线(垂直线)的长度和角度不需要精确。如果它减少了十分之一,那将无关紧要。
你们中有人为这种图形工作开发了高速、粗略的 atan2() 版本吗?为性能优化这类事情既繁琐又耗时。
我在 Swift 3 中工作,但我是“多语言”的。我也可以集成用 C/Objective-C 编写的代码。(或者可能将其转换为 Swift。)
编辑:
更多细节:
该项目涉及徒手绘图,如果用户快速拖动手指,它会提供一系列有时相距相当远的点,并使用Catmull-Rom 样条添加中间点以创建一系列足够小的线段,使其看起来像一条平滑的曲线。
(Catmull-Rom 样条曲线是类似于著名的 Bezier 曲线的曲线,但曲线的所有控制点都位于曲线上,因此可以直接平滑用户使用输入顶点“徒手”输入的曲线进行平滑处理。)
(从现在开始,我将提到“曲线”,但我真正的意思是由线段组成的折线,这些线段非常短,看起来像是平滑的曲线)
我已经分解了我的代码,因此我只为曲线中发生变化的部分生成样条曲线。它现在速度非常快,并且可以尽可能快地绘制出精美平滑的曲线。主观上,我似乎在画一条曲线,逐点跟随你的手指轨迹,点之间没有跳跃。
下一个目标是能够使用软边画笔进行绘制。为此,我想在用户手指轨迹的左侧和右侧找到与曲线平行的曲线。然后,我将使用 OpenGL 创建定义左右线之间的粗曲线的三角形条带,并使用多边形着色将曲线从沿着用户手指轨迹曲线的不透明变为沿着左右平行曲线的透明。
假设我想绘制一条 6 点厚的软边曲线。在左侧和右侧跟随用户手指轨迹的曲线都需要从用户曲线延伸 3 个点。
我打算通过找到垂直于用户手指轨迹线段的线段来找到左右曲线的端点的顶点,这些线段穿过手指轨迹的顶点,并延伸 1/ 2 在用户手指轨迹的左侧和右侧的所需线条粗细。
下面是当前版本程序绘制的曲线的屏幕截图,输入顶点绘制为蓝色菱形,我添加的平滑点绘制为空心正方形。(我减少了添加平滑点的数量,以便您更好地了解发生了什么。)
想象一下,通过每个顶点绘制一系列“哈希标记”,每个 6 个点长,以其中一个顶点为中心,并垂直于在该顶点结束的平滑曲线的第一条线段。
正如 Peter O. 在他的回答中指出的那样,找到垂直于任何特定线段的线段很容易 - 你只需反转斜率即可。但是,我想要特定长度的线段。(在我的示例中,顶点两侧各有 6 个点和 3 个点。)我正在寻找快速做到这一点的方法。我可以使用三角或平方根来计算法线的端点,这两种方法都非常慢。
python-2.7 - 反正切函数是不连续的
由于从 arctan 函数返回的角度上升到正值,我在尝试解决我的 omega 与时间图时遇到了很多问题。我尝试添加 2*pi 使其返回到第一象限,但无济于事(从答案到使用 arctan / arctan2 绘制从 0 到 2π 的 a)。然后我尝试将数组中的所有项目设为负数以便它继续,但我不确定问题是什么: arctan plot 返回不连续跳跃的值 我也尝试使用 arctan2、math.atan、math.atan2
由于在尝试查找数组的反正切时遇到错误,我不得不定义一个函数,然后将 iy 向量化
这部分代码对你们中的一些人来说可能看起来很痛苦。我尝试使用很多不同的方法来解决问题
c# - Math.Atan2 在转换为度数时给出不正确的值
我正在尝试测量两点之间相对于 X 轴的角度,以度为单位。
通过查看有关堆栈溢出的其他帖子,我一直在使用以下代码:
问题是,这似乎适用于某些值,但不适用于其他值。例如,传入 (0, 0, 1, 1) 会正确返回值 45。但是,传入 (0, 0, 2, 1) 会返回 26.565051177078,而我预计是 22.5。
我究竟做错了什么?
matlab - matlab中的tan inverse没有给出正确的值
作为较长代码的一部分,我得到一个量 phi1 和 phi2(大小为 128x128 的矩阵),它们是复数的参数。现在我在 MATLAB 中定义以下数量:
现在,K 应该等于 alpha。因此,矩阵 B 定义为:
应该是零。但结果却是不同的。尽管 B 的几个元素为零,但其中很多元素的值为 6.2832(即 2pi)。为什么会发生这种情况?
canvas - Math.atan2 和 cos 正弦角不与画布相交
我需要圆圈始终与线相交。我是数学函数的新手,并试图牢牢掌握它们。我认为这与 sin 和 cos 有关,但我可能是错的。为什么它的行为不符合预期?
代码笔: http ://codepen.io/philipbell/pen/PmwybL
python - calculate anti clockwise angle between 2 points
I have a robot with red led and green led mounted at the front and back respectively. I want to calculate the head direction of the robot as in which direction is the greenLEd - redLed vector pointed to.
How can I code it such that the points marked 1 and 2 in the image below have the same angle i.e. 45degree anti-clockwise whereas point 3 should be at 225degrees.
I used the following script but it giving me wrong results:
How should I proceed? Thanks for the help.
python - 如何用键和鼠标一起移动角色?
我正在尝试移动一个角色,以便在我移动它时它们面向鼠标;我理解这个概念,但完全不知道如何编码。目前,我了解如何单独旋转角色以及如何单独移动角色。我是否可以将两者合并,以便我可以用键和鼠标移动和旋转我的角色?
这些是我定义的变量:
这是允许图像沿鼠标方向旋转的部分:
这是用按键控制我的角色的部分:
任何帮助是极大的赞赏!
sympy - sympy 的 atan2 不是完整的数值评估
我正在使用 sympy 的 atan2,对于某些值,它没有给我完整的数值评估,而是给了我一个 (value + pi)
给出以下输出:
-0.0659755361339305 + 圆周率
我希望代码给出没有“+ pi”的数字值,在本例中为 3.07402446387
mpmath 的 mpf 函数解决了这个问题,但在我的代码的其他部分给出了错误消息。还有另一种方法吗?
c++ - atan2f() 不起作用
我尝试使用 atan2f 更改对象朝向中心的方向,但它给了我错误的值。我在某个地方错了吗?
matlab - 在 fft matlab 中计算相位角
我正在尝试计算我在 Matlab 工作区中构建的合成信号的傅里叶频谱的第二分量的频域中的相位角(在计算 fft 之后)。我确信相位等于 0(正如您在代码中看到的那样),但我得到的结果是 pi/2。代码如下:
我看不出错误在哪里。