2015-09-17 83 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真的帮我。

相关问题