2015-09-17 139 views
-1

即時通訊在一個JavaScript遊戲即時通訊嘗試使三角學問題卡住了。 (xa,ya)半徑和目標點(ya,yb)我需要找到一個新點的位置。找到一個點的原點,角度和半徑的位置

//calculate a angle in degree 
function angle(xa, ya, xb, yb) 
{ 
    var a= Math.atan2(yb - ya, xb - xa); 
    a*= 180/Math.PI; 

    return a; 
} 


function FindNewPointPosition() 
{ 
    //radius origine(xa,xb) destination(ya,yb) 
    var radius=30; 
    var a = angle(xa, xb, ya, yb); 

    newpoint.x = xa + radius * Math.cos(a); 
    newpoint.y = ya + radius * Math.sin(a); 

    return newpoint; 
} 

試想一個形象,因爲我沒有足夠的聲譽發佈一個: 藍色正方形是地圖(5000x5000),黑色正方形(500×500)什麼玩家看到(HUD)。 十字(400,400)是起點和太陽(4200,4200)的目的地。 紅點(?,?)向玩家指示朝向哪個方向去尋找太陽。 但是太陽和十字位置可以顛倒或在不同的角落或任何地方!

目前的紅點不這樣做,所有..

韓國社交協會的幫助。

回答

0
  1. 爲什麼使用ATAN2?更改爲Math.atan() - 您將在var A中獲取角度
  2. 要在哪裏放置紅點?在hud裏面?

更正代碼 https://jsfiddle.net/ka9xr07j/embedded/result/

var obj = FindNewPointPosition(400,4200,400,4200); - new position 417. 425 
+0

1.我不知道我數學非常糟糕,在這個網站找到的例子..與阿坦似乎是更好..但不是所有人2.交叉停留在中間的hud,因爲它移動和紅點是周圍。 – softindev

+0

試試這個代碼https://jsfiddle.net/ka9xr07j/ - 看看瀏覽器控制檯。 new.x和new.y計算正確 – Trike

+0

我做索姆修改https://jsfiddle.net/softindev/1qcbth3x/8/但它顯示430,400爲什麼? – softindev

0

最後,我發現不使用角度的溶液。

function newpointposition(origin, destination) 
{ 
    // radius distance between cross and red dot 
    var r=30; 

    // calculate a vector 
    var xDistance = destination.x - origin.x; 
    var yDistance = destination.y - origin.y; 

    // normalize vector 
    var length = Math.sqrt(xDistance * xDistance + yDistance * yDistance); 
    xDistance /= length; 
    yDistance /= length; 

    // add the radius 
    xDistance = xDistance * r; 
    yDistance = yDistance * r; 

    var newpoint = { x: 0, y: 0 }; 

    newpoint.x = origin.x + xDistance; 
    newpoint.y = origin.y + yDistance; 

    return newpoint; 

} 

var radar = newpointposition({ 
    x: 500, 
    y: 800 
}, { 
    x: 3600, 
    y: 2850 
}); 

alert(radar.x + ' ' + radar.y); 

ty Trike,使用jsfiddle真的幫我。

相關問題