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

find position of a point with origin, angle and radius

我在尝试制作的 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;
}

想象一张图片,因为我没有足够的声誉来 post 一张图片: 蓝色方块是地图(5000x5000),黑色方块(500x500)是玩家看到的(hud)。 Cross(400,400) 是起点,sun(4200,4200) 是终点。 红点 (?,?) 指示玩家朝哪个方向寻找太阳.. 但是太阳和十字架的位置可以相反,也可以在不同的角落或任何地方!

目前红点根本不这样做..

谢谢你的帮助。

  1. 你为什么使用ATAN2?更改为 Math.atan() - 您将在 var A
  2. 中获得角度
  3. 你要把你的红点放在哪里?在 HUD 里面?

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

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

终于找到了不用角度的解决方法

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 对我很有帮助。