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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章