cocos lua 获取点到直线距离

最近做一款台球游戏,需要做这种效果,所以需要求的彩色球到直线的距离,高中数学几乎快忘光了。

Google了一波,挖出了几个数学公式。


我的手中有这几个数据:

1。直线绕X轴正方向的角度,注意,这里cocos引擎和数学系的的直角坐标反过来的,所以在传参数的时候要先把角度转换成数学坐标系的角度。(rotate,这里使用的时候角度要转为度数)

2。直线上的一点,可以根据这个计算出直线的方程(whitePos)(whitePos.x,whitePos.y)

3。目标点的坐标(ballPos)(ballPos.x,ballPos.y)

4。小球的半径(这个只是我做的游戏有用)(radis)

*注意这里坐标一定要转换为一个节点下的坐标,或者全部转为世界坐标也可以,convertToWorldSpace或者convertToNodeSpace


给出我的代码:

--点到直线最短距离
function help.getShortestDistanceBetweenPointAndLine(rotate,ballPos,whitePos,radius)
    local A,B,C = help.getLineEquation(rotate / 180 * math.pi, whitePos)
    local _verticalLine = math.abs(A*ballPos.x+B*ballPos.y+C)/math.sqrt(A*A+B*B)
    return math.sqrt(4*radius*radius-_verticalLine*_verticalLine)
end

--获取射线的方程式 return y=kx+b
function help.getLineEquation(rotate, whitePos)
    local A = -math.tan(rotate)
    local B = 1
    local C = math.tan(rotate)*whitePos.x - whitePos.y
    return A,B,C
end
这里rotatesh

猜你喜欢

转载自blog.csdn.net/qq_37508511/article/details/79887783