找到原点,角度和半径的点的位置

时间:2015-09-17 04:27:01

标签: javascript game-physics trigonometry

我试图制作一个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),黑色方块(500x500)玩家看到的(hud)。 Cross(400,400)是目的地的起源和太阳(4200,4200)。 红点(?,?)向玩家指示找到太阳的方向。 但是太阳和十字架的位置可以相反或在不同的角落或任何地方!

目前红点根本没有这样做..

请求帮助。

2 个答案:

答案 0 :(得分:0)

  1. 你为什么使用ATAN2?更改为Math.atan() - 您将获得var A中的角度
  2. 你必须放置红点?在里面怎么样?
  3. 更正后的代码 https://jsfiddle.net/ka9xr07j/embedded/result/

    <?php dynamic_sidebar( '404' ); ?>

答案 1 :(得分: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);
三轮车,使用jsfiddle真的帮助我。