问题标签 [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.

0 投票
0 回答
58 浏览

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/234.347826e-2如果截断为浮点精度),但实际上是1.6285819933e-02

为什么系数与预期值相差这么大?这是一个数学技巧来减轻幂级数必须在某个点(在这种情况下,在x^23)中止的事实吗?

0 投票
1 回答
3406 浏览

c# - C#找到2个给定点之间的角度

在我正在处理的程序中,我有一个三角形的对象(玩家),并且该三角形应该始终面向鼠标旋转。鉴于这两点,我尝试了我在网上找到的不同方程,但它们似乎都不起作用,或者至少预成型得足够好。

这是我发现的最有效的公式,但它仍然不够好,因为它只以特定的角度或距离面对鼠标。Cursor.X 和 .Y 是鼠标的坐标,pos.X 和 .Y 是玩家的坐标。

0 投票
1 回答
200 浏览

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。有什么建议吗?

调试输出:操纵杆向上位置

操纵杆右侧位置

操纵杆向下位置

操纵杆左侧位置

操纵杆东北位置

0 投票
1 回答
869 浏览

c++ - atan2 是否需要归一化向量?向量之间的角度使用 acos 或 atan 哪个更好?

在计算两个向量之间的角度时,我传统上使用 acos,但这需要对两个向量进行归一化。atan2 可用于完成相同的任务(特别是atan2(b.y_, b.x_) - atan2(a.y_, a.x_)),这是否需要归一化向量?

如果 atan2 不需要归一化向量,这会更好用吗,因为归一化可能成本高昂且“更”容易出错,因为它需要 sqrt 操作?

然后我读到atan2本身可能比acos更昂贵,但更准确?然后我还阅读了其他建议相反的互联网 :( 很多相互矛盾的信息,不确定使用 acos 或 atan 计算两个向量之间的角度有什么关系。

推荐哪个?每种用途的好处/问题是什么?

任何帮助将不胜感激,谢谢!

0 投票
0 回答
68 浏览

precision - 从笛卡尔坐标转换到球坐标和浮点不精确

我需要将笛卡尔坐标转换为球坐标,但我的实现存在浮点不精确。这是我到目前为止所做的事情:

例如,如果cartesian_to_sphericalRealType = floatand调用p = {.000157882227f, .000284417125f, 1 },则r_squaredis并且计算1.00000012它的平方根(这显然是错误的)。因此,计算为,而正确的值为。r1theta00.000325299694...

我们可以改进代码以使这些计算更准确吗?

(您可能需要注意此处使用std::atan2. 描述的转换。但是,如果我没有遗漏某些内容,则如果std::sin(theta)为 0(即theta0 或pi),则会产生错误的结果,并且在示例中也会计算theta0。)

0 投票
1 回答
302 浏览

python - 如何拟合组合反正切函数?

我正在尝试拟合由反正切函数组成的双断轮廓函数。我的代码似乎不起作用:

其中ab项是线性回归的斜率和零点值。这些w术语用于切换域。

我考虑了以下连续性限制(H1 y H2)并限制参数:

我得到一条线而不是断线(S 形)。
我得到的:

图像显示当前结果

0 投票
2 回答
298 浏览

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 上阅读过类似的问题,甚至有人遇到了几乎相同的问题,但我相信没有答案,并且在聊天中继续讨论,但找不到更多信息。我希望这对擅长数学的人来说会很容易。请提供完美的解决方案。提前致谢。

0 投票
1 回答
49 浏览

python - 在 Python 中对 x,y 网格执行计算

我想对 X、Y 数据执行计算以生成计算的 Z。我的代码如下:

injection_wells.csv 的示例数据集

姓名 X
MW-1 2517700 996400 5
MW-2 2517770 996420 5

我得到错误:

我知道这与我试图将函数应用于只接受一个值的数组有关。我正在尝试克服这个问题,并能够在整个网格数据集上执行此计算。对此的任何帮助将不胜感激。

我试图做的方程式如下。请注意,等式中的 theta 是从网格节点到注入井(对于每个网格节点)的距离的反正切值,这是我试图在代码中复制的。

下面代码的方程

谢谢

0 投票
1 回答
26 浏览

numpy - 反正切函数的数值计算

我很难解释反正切函数的结果。这种行为对于我遇到的所有实现都是一致的,所以我将在这里限制自己使用 NumPy 和 MATLAB。

这个想法是有一个随机放置的点圈。目标是表示它们在极坐标系中的位置,并且由于它们是均匀分布的,我希望 θ 角(使用atan2函数计算)也可以在区间 -π ... π 上随机分布。

这是MATLAB的代码:

对于 Python 和 NumPy:

在这两种情况下,我得到的结果都是这样的,可以很容易地看到 π/4 的每个倍数的“步数”。

Atan2 结果

它看起来像是某种精度误差,但奇怪的是我没想到的角度。这种行为也存在于普通atan功能中。