问题标签 [atan]
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.
c - atan() 参考实现中的奇怪幂级数系数
glibc
(更准确地说,libm
)和许多其他 C 库包含该atan()
函数的以下软件实现(参见此处):
我正在了解该函数的工作原理,但aT[]
数组中的值除外。实际工作发生在以下几行中的参数减少之后:
atan()
如果我们在最后一行执行乘法和减法,我们得到:的幂级数x - 1/3 * x^3 + 1/5 * x^5 - 1/7 * x^7 ...
。但是,aT[]
数组中的系数与幂级数的系数不同:
第一个与预期的一样,因为它是最接近 的浮点数1/3
。下一个越来越偏离预期值,每一个都比它的前任多一个,直到最后一个,预计是1/23
(4.347826e-2
如果截断为浮点精度),但实际上是1.6285819933e-02
。
为什么系数与预期值相差这么大?这是一个数学技巧来减轻幂级数必须在某个点(在这种情况下,在x^23
)中止的事实吗?
c# - C#找到2个给定点之间的角度
在我正在处理的程序中,我有一个三角形的对象(玩家),并且该三角形应该始终面向鼠标旋转。鉴于这两点,我尝试了我在网上找到的不同方程,但它们似乎都不起作用,或者至少预成型得足够好。
这是我发现的最有效的公式,但它仍然不够好,因为它只以特定的角度或距离面对鼠标。Cursor.X 和 .Y 是鼠标的坐标,pos.X 和 .Y 是玩家的坐标。
c++ - 使用 atan2 将 - 1 到 1 的范围转换为度数
我正在尝试使用 atan2 将 - 1 到 1 的范围转换为弧度,然后从弧度转换为度数。
但是 atan2(0,1) 应该等于 90.0 时等于 0 我在这里做错了什么?
编辑:好的,这次我以正确的方式插入了值。
对于上下文,xaxisval 和 yaxisval 正在从模拟摇杆中获取一个值,其右侧的最大值为 1,左侧的最小值为 -1。因此,当我将模拟摇杆向右按下时,yaxisval 等于 0,xaxisval 等于 1。
这应该返回 90 度,就像您将模拟摇杆想象成一个完整的 360 度圆一样。向上方向是 360/0 向右是 90 向下是 180 向左是 270 等等。
我将这些值粘贴到调试器中,这就是它返回的内容。
但是我希望这个方向上升为 90 度,它似乎上升了 90 度,我测试了向下的位置,它等于 90。有什么建议吗?
调试输出:操纵杆向上位置
操纵杆右侧位置
操纵杆向下位置
操纵杆左侧位置
操纵杆东北位置
c++ - atan2 是否需要归一化向量?向量之间的角度使用 acos 或 atan 哪个更好?
在计算两个向量之间的角度时,我传统上使用 acos,但这需要对两个向量进行归一化。atan2 可用于完成相同的任务(特别是atan2(b.y_, b.x_) - atan2(a.y_, a.x_)
),这是否需要归一化向量?
如果 atan2 不需要归一化向量,这会更好用吗,因为归一化可能成本高昂且“更”容易出错,因为它需要 sqrt 操作?
然后我读到atan2本身可能比acos更昂贵,但更准确?然后我还阅读了其他建议相反的互联网 :( 很多相互矛盾的信息,不确定使用 acos 或 atan 计算两个向量之间的角度有什么关系。
推荐哪个?每种用途的好处/问题是什么?
任何帮助将不胜感激,谢谢!
precision - 从笛卡尔坐标转换到球坐标和浮点不精确
我需要将笛卡尔坐标转换为球坐标,但我的实现存在浮点不精确。这是我到目前为止所做的事情:
例如,如果cartesian_to_spherical
用RealType = float
and调用p = {.000157882227f, .000284417125f, 1 }
,则r_squared
is并且计算1.00000012
它的平方根(这显然是错误的)。因此,计算为,而正确的值为。r
1
theta
0
0.000325299694...
我们可以改进代码以使这些计算更准确吗?
(您可能需要注意此处使用std::atan2
. 描述的转换。但是,如果我没有遗漏某些内容,则如果std::sin(theta)
为 0(即theta
0 或pi
),则会产生错误的结果,并且在示例中也会计算theta
到0
。)
javafx - 在 JavaFX 中查找两个轨道中两个旋转点之间的直线角度,从一个点到另一个点,反之亦然
我是 JavaFX 的新手,在三角学和数学方面真的很弱,一直试图找到两点之间的角度(线的)。这两个点在两个不同的完美圆形轨道上围绕一个共同的中心点旋转。这些点代表地球和木星,我需要找到地球和木星之间的角度,准确地说,是从地球到木星的角度。木星在一个半径更大的轨道上运行,就像在我们的太阳系中一样。我尝试了“atan”和“atan2”,但它并没有给出所有角度的预期答案,我太笨了,无法正确使用它。经过进一步研究,我发现类似“它只计算相对于 X 轴 + ve 侧的角度”,但我明白了。通过“坡度计算器”的进一步阅读和帮助(https://www.calculator.net/slope-calculator.html) 我设法像他们一样解决了这个问题。通过在 atan / atan2 结果中添加适当的度数(例如 180,360)并获得正确和预期的(由我)最终结果。我没有完全理解这种 90/180/360 度的添加(我没有看到他们添加 90 度,或者为什么要添加 0 度)。我可怜的数学技能说它的测量角度(旧的 +ve x 轴,360/180 - 测量角度?)与 360 度的差异,或者简单地说,未测量的角度(总共 180 或 360 度)问题是,结果并不总是预期的,很少出错,差别很大,完全错误。这是由于在 atan / atan2 结果中添加了错误的度数。计算器站点使用的方法给出了正确的结果,除了 180 度线(3'O 时钟到 9'O 时钟线),它给出了 0 度。(不应该是 180 度吗?无论如何,我需要 180 度来制作这样的线)。该站点将结果添加 180 度或 360 度以获得最终结果并且是正确的,并且根据我的要求,期望 3'O 时钟 ----> 9'O 时钟线案例。9'O ---> 3'O 的角度是正确的,符合我的要求。为了弄清楚要在 atan / atan2 结果中增加多少度,我目前正在寻找线的斜率并将 0/90/180/360 度添加到 atan / atan2 结果中,即使对于 3'O 时钟也能获得预期结果----> 9 点钟线。还是有问题。O 时钟线盒。9'O ---> 3'O 的角度是正确的,符合我的要求。为了弄清楚要在 atan / atan2 结果中增加多少度,我目前正在寻找线的斜率并将 0/90/180/360 度添加到 atan / atan2 结果中,即使对于 3'O 时钟也能获得预期结果----> 9 点钟线。还是有问题。O 时钟线盒。9'O ---> 3'O 的角度是正确的,符合我的要求。为了弄清楚要在 atan / atan2 结果中增加多少度,我目前正在寻找线的斜率并将 0/90/180/360 度添加到 atan / atan2 结果中,即使对于 3'O 时钟也能获得预期结果----> 9 点钟线。还是有问题。
该应用程序在任何日期/时间连续模拟行星的位置,并不断更新图形和文本中的位置和度数。因此,找出计算是否错误是一项耗时的任务,我确实发现了,但很难找到。除此之外,要计算的度数是逆行的行星之间的角度(向后移动的光学错觉),因此很难通过比较任何东西来发现计算错误。必须将所有原始角度、位置、复古角度记录到控制台并准备好逐行查看大跳跃,或者将观看原始角度并大致计算复古角度并验证。
花了整整两天时间才找到一个几乎完全正确的工作解决方案,并且不能再拉我的头发了。在 StackOverflow 上阅读过类似的问题,甚至有人遇到了几乎相同的问题,但我相信没有答案,并且在聊天中继续讨论,但找不到更多信息。我希望这对擅长数学的人来说会很容易。请提供完美的解决方案。提前致谢。