我试图在圆圈上找到X,Y点,其中0度从圆顶开始并顺时针移动。通常,要找到具有已知半径和角度的圆上的x,y坐标,您可以简单地使用公式x = r(cos(度°)),y = r(sin(度°))。圆圈看起来像这样,度数将从0°逆时针方向扩展。
然而,我正在使用一个圆圈,其中0°从顶部开始,并且随着围绕圆圈顺时针移动,度数会扩大。假设if ( ! in_array( $value['name'], [ 'Administrator', 'Contributor', ] ) ) {
和var r = 60;
我可以使用什么公式(或javascript方法)来确定X,Y值。注意:我可以假设原点为0,60,因为r = 60.谢谢。
答案 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