2013-08-16 64 views
1

所以在我的畫布上我有一個大的橢圓,當用戶點擊畫布時,應該在大橢圓的邊緣上創建一個小橢圓, 。這些角度是關閉的,我對計算不是很有信心,再加上我認爲這個座標系在下降時增加的事實正在讓它變得更糟。任何人都可以幫助我獲得理想的結果嗎?計算從一個點到另一個的角度

HTML

<html> 
<head> 
    <script src='processing-1.4.1.min.js'></script> 
    <script src='jquery-1.9.1.min.js'></script> 
</head> 

<body> 
    <canvas id="gamecanvas" data-processing-sources="canvas.pde"></canvas> 
</body> 

<script> 
var gamecanvas = document.getElementById("gamecanvas"); 
var projectiles = []; 

$("#gamecanvas").click(function(e) { 
    var x = e.clientX - gamecanvas.offsetLeft; 
    var y = e.clientY - gamecanvas.offsetTop; 
    var pindex = projectiles.length; 
    projectiles[pindex] = []; 
    projectiles[pindex]['angle'] = Math.atan2(y - 200, x - 300) * 180/Math.PI; 
    projectiles[pindex]['x'] = 300 + 10 * Math.cos(projectiles[pindex]['angle']); 
    projectiles[pindex]['y'] = 200 + 10 * Math.sin(projectiles[pindex]['angle']); 
}); 
</script> 
</html> 

Processing.js帆布素描(Reference

void draw() { 
    size(600,400); 
    background(255,255,255); 
    fill(#FF0000); 
    ellipse(300,200,15,15); 
    for(i = 0;i < projectiles.length;i++) { 
     ellipse(projectiles[i]['x'],projectiles[i]['y'],2,2); 
    } 
} 

回答

2

您可以混合弧度和度。與角涉及JavaScript的數學函數需要弧度值:

MDN

的ATAN2方法返回-pi和pi 之間的數值表示的角度theta(X,Y )點。這是逆時針角度的 ,以弧度測量的,在正的X軸和點(x,y)之間。

而對於Math.cosMath.sin和:

單元弧度的給定的數字。

所以你可以嘗試用這個代替:

/// keep radians, don't convert to degrees 
projectiles[pindex]['angle'] = Math.atan2(y - 200, x - 300); // * 180/Math.PI; 

projectiles[pindex]['x'] = 300 + 10 * Math.cos(projectiles[pindex]['angle']); 
projectiles[pindex]['y'] = 200 + 10 * Math.sin(projectiles[pindex]['angle']); 

除非你想保留這情況下,你需要做的這個度:

projectiles[pindex]['angle'] = Math.atan2(y - 200, x - 300) * 180/Math.PI; 

/// convert degrees back to radians 
projectiles[pindex]['x'] = 
      300 + 10 * Math.cos(projectiles[pindex]['angle'] * Math.PI/180); 
projectiles[pindex]['y'] = 
      200 + 10 * Math.sin(projectiles[pindex]['angle'] * Math.PI/180); 
相關問題