计算围绕枢轴点的x和y坐标

时间:2020-11-06 09:40:06

标签: javascript math geometry rotation

我有一个女孩角色(在本例中)为x:500和y:200。

enter image description here

在我的Javascript游戏中,我需要将另一个字符路由到她左侧100像素以内。但是,女孩角色可能正站在房间的一角。在这种情况下,如果我们从站立在x:500和y:200处的女孩低20度,但距离女孩角色仍然100个像素,我需要计算下一个x和y坐标是什么。

这种类型的计算的名称是什么?

1 个答案:

答案 0 :(得分:0)

您想要的是极坐标(半径和角度)。在x, yradius, angle之间进行转换是使用

r = sqrt(x^2, y^2)
a = atan(y,x)
x = cos(a)*r
y = sin(a)*r

下面的算法从女孩的位置开始,减去极坐标,然后看是否可以返回。否则,增加20度并继续。

function to_polar(x, y) {
  return [Math.sqrt(x * x + y * y), Math.atan2(y, x)]
}

function from_polar(r, a) {
  return [Math.cos(a) * r, Math.sin(a) * r]
}

function get_other(girl) {
  let r = 100

  for (let degree = 0; degree < 360; degree += 20) {
    let mod = from_polar(r, degree * 180 / Math.PI)
    let other = [girl[0] - mod[0], girl[1] - mod[1]]
    if (is_not_inside_of_wall(other)) {
      return other
    }
  }
  console.log("couldn't find any position :(")
}

let girl = [500, 200]
let other = get_other(girl)
console.log(other)

get_other在第一次迭代中正确返回[ 400, 200 ]