2017-04-26 35 views
0

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

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

回答

1

作为完整的圆具有2个辐射点,所以你可以计算为您的圆与下式的点坐标:

X =半径* Math.sin(Math.PI * 2 *角/ 360); y =半径* 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

技巧是你的问题转换成你知道如何解决这个问题。您可以通过从您的角度减去90度并取消y,即x = r cos(θ-90)和y = -r sin(θ-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, (x,y)=(51.96152422706632,29.999999999999996)for theta = 30

(x,y)=(51.96152422706632,29.999999999999996)for theta = 60

(X,Y)=(60,0)为THETA = 90

(X,Y)=(51.96152422706632,-29.999999999999996)为THETA = 120

(X,Y)=( 30.000000000000007,-51.96152422706631)为THETA = 150

(X,Y)=(3.67394039744206e-15,-60),用于THETA = 180

(X,Y)=(-29.999999999999986,-51.96152422706632),用于theta = 210

(x,y) =(-51.96152422706632,-29.999999999999996)为THETA = 240

(X,Y)=( - 60,-7.34788079488412e-15)为THETA = 270

(X,Y)=(-51.96152422706631, 30.000000000000007)for theta = 300

(x,y)=( - 30.00000000000003,51。(x,y)=(-1.1021821192326178e-14,60)for theta = 360