最近做一款檯球遊戲,需要做這種效果,所以需要求的彩色球到直線的距離,高中數學幾乎快忘光了。
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