【问题标题】:How to convert cartesian coordinates to polar coordinates in JS?如何在JS中将笛卡尔坐标转换为极坐标?
【发布时间】:2015-08-26 06:02:33
【问题描述】:

我需要知道使用笛卡尔坐标中的 X 和 Y 在极坐标中的旋转角度。

在没有大量 IF 语句的情况下,如何在 JS 中做到这一点?我知道我可以使用 来做到这一点,

但我认为这对性能不利,因为它处于动画循环中。

【问题讨论】:

  • 这对于任何人来说都是一个公平的努力来集思广益,直到你有一些东西可以展示,就像你开始做某事一样。因此,作为一个初创公司,只需拿一张纸,回忆一下你需要的一切,然后创建一个没有任何编程逻辑的伪代码/算法,然后尝试将其塑造成 JS 代码。一开始可能很脏,但以后可以改进。如果可能,您可以在此处转储相关的代码部分以获得更好的响应。 :)
  • @Rohit416 要是我能做到就好了。我说我知道如何只使用 if 结构来做到这一点。我认为这很明显,我不在这里写这个算法。我询问如何解决这个问题的任何其他想法,也许是 JS 中的数学库或类似的东西。
  • 是的,Math 对象及其方法肯定会有所帮助。 Have you look at this ?
  • @Rohit416 非常感谢! atan2() 绝对是我想要的。
  • 优化 if 语句没有意义,因为atan 的成本会更高

标签: javascript math polar-coordinates cartesian-coordinates


【解决方案1】:

Javascript 带有一个内置函数,可以执行图像中表示的操作:Math.atan2()

Math.atan2()y, x 作为参数并以弧度返回角度。

例如:

x = 3
y = 4    
Math.atan2(y, x) //Notice that y is first!

//returns 0.92729521... radians, which is 53.1301... degrees

我编写了这个函数来将笛卡尔坐标转换为极坐标,返回距离和角度(以弧度为单位):

function cartesian2Polar(x, y){
    distance = Math.sqrt(x*x + y*y)
    radians = Math.atan2(y,x) //This takes y first
    polarCoor = { distance:distance, radians:radians }
    return polarCoor
}

你可以像这样使用它来获得弧度的角度:

cartesian2Polar(5,5).radians

最后,如果你需要度数,你可以像这样将弧度转换成度数

degrees = radians * (180/Math.PI)

【讨论】:

  • 这是我的同一函数的 1 行版本: const c2p = pt => [Math.sqrt(pt[0] ** 2 + pt[1] ** 2), Math.atan2 (点[1],点[0])];但是,它也将参数作为数组 [x,y] 并返回数组 [distance,radian]。相反,这也是我从极坐标到笛卡尔的 1 行函数: const p2c = pt => [pt[0] * Math.cos(pt[1]), pt[0] * Math.sin(pt[1]) ];
  • 斜边函数hypot(x, y)可以代替sqrt(x*x+y*y)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
相关资源
最近更新 更多