两个坐标点转方向

最近在做一个连线游戏时,用到了计算两点之间的角度,如何计算任意两点间直线的倾斜角呢?

只需要将两点x,y坐标分别相减得到一个新的x,y轴距离(x2-x1,y2-y1).然后利用它求出角度就可以了。

1、js中Math.atan() Math.atan()接受一个参数:用法如下: angel=Math.atan(slope) angel为一个角度的弧度值,slope为直线的斜率,是一个数字,这个数字可以是负的无穷大到正无穷大之间的任何一个值即y/x. 不过,利用他进行计算比较复杂.因为它的周期性,一个数字的反正切值不止一个.例如atan(-1)的值可能是45度,也可能是225度.这样就是他的周期性,对于正切函数来说,他的周期是180度,所以两个相差180度的角具有相同的正切和斜率: tanθ=tan(θ+180) 然而,Math.atan()只能返回一个角度值,因此确定他的角度非常的复杂,而且,90度和270度的正切是无穷大,因为除数为零,我们也是比较难以处理的~!因此我放弃使用该函数.

2、Math.atan2() Math.atan2()接受两个参数x和y,方法如下: angel=Math.atan2(y,x) x 指定点的 x 坐标的数字。 y 指定点的 y 坐标的数字。 计算出来的结果angel是一个弧度值,也可以表示相对直角三角形对角的角,其中 x 是临边边长,而 y 是对边边长。 例如: x=Math.atan(1)//计算正切值为1的数字对应的弧度值0.785398163397448 x=180*x/Math.PI//转换为角度值45deg

回归到游戏中,我计算出终点与起始点的y轴间距与x轴间距,代入到公式中得到一个弧度,然后*180/Math.PI得到角度,至此大功告成!!

-- 向量转数字方向

function GameMath.GetDirectionNumber(x, y)

    return GameMath.Angle2DirNumber(math.deg(math.atan2(y, x)))

end

-- 弧度转数字方向

function GameMath.Radian2DirNumber(radian)

    return GameMath.Angle2DirNumber(math.deg(radian))

end

-- 角度转数字方向

function GameMath.Angle2DirNumber(angle)

    angle = GameMath.NormalizeAngle(angle)

    if 22.5 <= angle and angle < 67.5 then

        return GameMath.DirUpRight

    elseif 67.5 <= angle and angle < 112.5 then

        return GameMath.DirUp

    elseif 112.5 <= angle and angle < 157.5 then

        return GameMath.DirUpLeft

    elseif 157.5 <= angle and angle < 202.5 then

        return GameMath.DirLeft

    elseif 202.5 <= angle and angle < 247.5 then

        return GameMath.DirDownLeft

    elseif 247.5 <= angle and angle < 292.5 then

        return GameMath.DirDown

    elseif 292.5 <= angle and angle < 337.5 then

        return GameMath.DirDownRight

    end

    return GameMath.DirRight

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值