我有一个女孩角色(在本例中)为x:500和y:200。
在我的Javascript游戏中,我需要将另一个字符路由到她左侧100像素以内。但是,女孩角色可能正站在房间的一角。在这种情况下,如果我们从站立在x:500和y:200处的女孩低20度,但距离女孩角色仍然100个像素,我需要计算下一个x和y坐标是什么。
这种类型的计算的名称是什么?
答案 0 :(得分:0)
您想要的是极坐标(半径和角度)。在x, y
和radius, 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 ]