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

时间:2017-04-26 18:22:55

标签: javascript geometry trigonometry angle

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

然而,我正在使用一个圆圈,其中0°从顶部开始,并且随着围绕圆圈顺时针移动,度数会扩大。假设if ( ! in_array( $value['name'], [ 'Administrator', 'Contributor', ] ) ) { var r = 60;我可以使用什么公式(或javascript方法)来确定X,Y值。注意:我可以假设原点为0,60,因为r = 60.谢谢。 enter image description here

2 个答案:

答案 0 :(得分:1)

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

  

x = radius * Math.sin(Math.PI * 2 * angle / 360);

     

y = radius * Math.cos(Math.PI * 2 * angle / 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)




答案 1 :(得分:1)

诀窍是将您的问题转换为您知道如何解决的问题。你可以通过从你的角度减去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);
}

产生以下结果:

对于theta = 0,

(x,y)=(3.67394039744206e-15,60)

对于theta = 30,

(x,y)=(30.000000000000007,51.96152422706631)

对于theta = 60

(x,y)=(51.96152422706632,29.999999999999996)

对于θ= 90,

(x,y)=(60,0)

对于theta = 120,

(x,y)=(51.96152422706632,-29.999999999999996)

对于theta = 150

(x,y)=(30.000000000000007,-51.96152422706631)

对于θ= 180,

(x,y)=(3.67394039744206e-15,-60)

对于theta = 210

(x,y)=( - 29.999999999999986,-51.96152422706632)

对于theta = 240,

(x,y)=( - 51.96152422706632,-29.999999999999996)

对于theta = 270,

(x,y)=( - 60,-7.34788079488412e-15)

对于theta = 300

(x,y)=( - 51.96152422706631,30.000000000000007)

对于theta = 330

(x,y)=( - 30.00000000000003,51.961524227066306)

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