如何使用 javascript 方法在翻转的圆上找到 x 和 y 坐标

How to find x and y coordinates on a flipped circle using javascript methods

提问人:gwydion93 提问时间:4/27/2017 更新时间:2/17/2022 访问量:36245

问:

我试图在圆上找到 X、Y 点,其中 0 度从圆的顶部开始并顺时针移动。通常,要在具有已知半径和角度的圆上找到 x、y 坐标,您可以简单地使用公式 x = r(cos(degrees°)), y = r(sin(degrees°))。圆将如下所示,度数将从 0° 逆时针扩展。enter image description here

但是,我使用的是一个圆圈,其中 0° 从顶部开始,度数随着绕圆圈顺时针移动而扩大。假设我可以使用什么公式(或 javascript 方法)来确定 X、Y 值。注意:我可以假设原点为 0, 60,因为 r = 60。谢谢。var r = 60;var degrees = 130;enter image description here

JavaScript的 几何学 三角法 角度

评论


答:

20赞 MaxZoom 4/27/2017 #1

由于全圆有 2 个辐射点,因此您可以使用以下公式计算圆的点坐标:

x = 半径 * Math.sin(Math.PI * 2 * 角度 / 360);

y = 半径 * Math.cos(Math.PI * 2 * 角度 / 360);

var radius = 60;
var angle  = 140;
var x = radius * Math.sin(Math.PI * 2 * angle / 360);
var y = radius * Math.cos(Math.PI * 2 * angle / 360);
console.log('Points coors are  x='+ 
   Math.round(x * 100) / 100 +', y=' +
   Math.round(y * 100) / 100)

评论

0赞 Isaac 8/4/2023
不知道为什么这有最多的赞成票,但你的公式是错误的。Cos 用于 x 坐标计算,sin 用于 y 坐标计算。你把它们翻转了
11赞 cjg 4/27/2017 #2

诀窍是将你的问题转化为你知道如何解决的问题。您可以通过从角度中减去 90 度并否定 y 来做到这一点,即 x=r cos(theta-90) 和 y = -r sin(theta-90)。在 JavaScript 中:

function circleXY(r, theta) {
  // Convert angle to radians
  theta = (theta-90) * Math.PI/180;

  return {x: r*Math.cos(theta),
          y: -r*Math.sin(theta)}
}

for (var theta=0; theta<=360; theta += 30) {
  var answer = circleXY(60, theta);
  console.log('(x, y) = ' + '(' + answer.x + ', ' + answer.y + ') for theta=' + theta);
}

产生以下结果:

(x, y) = (3.67394039744206e-15, 60) 表示 theta=0

(x, y) = (30.00000000000000007, 51.96152422706631) 对于 theta=30

(x, y) = (51.96152422706632, 29.999999999999996) 对于 theta=60

(x, y) = (60, 0) 表示 theta=90

(x, y) = (51.96152422706632, -29.9999999999999996) 对于 theta=120

(x, y) = (30.00000000000000007, -51.96152422706631) 对于 theta=150

(x, y) = (3.67394039744206e-15, -60) 表示 theta=180

(x, y) = (-29.9999999999999986, -51.96152422706632) 对于 theta=210

(x, y) = (-51.96152422706632, -29.9999999999999996) 对于 theta=240

(x, y) = (-60, -7.34788079488412e-15) 表示 theta=270

(x, y) = (-51.96152422706631, 30.00000000000000007) 对于 theta=300

(x, y) = (-30.0000000000000003, 51.961524227066306) 对于 theta=330

(x, y) = (-1.1021821192326178e-14, 60) 表示 theta=360

0赞 PythonFanatic999 2/17/2022 #3

应该是

x = Math.cos(Math.PI * 2 * 角度/360); 和 y = Math.sin(Math.PI * 2 * angle/360);