Function 射线与圆的相交点(ByVal 起点X As Double, ByVal 起点Y As Double, ByVal 方向X As Double, ByVal 方向Y As Double, ByVal 圆心X As Double, ByVal 圆心Y As Double, ByVal 半径平方 As Double, 交点X As Double, 交点Y As Double) As Boolean
' _____
' _,-"~ ~"-,_
' ,+~ ~+,
' ,+" "+,
' ," ",
' + +
' / \
'丨 圆心 丨
'| *--------------+-------------=* 起点
'丨 \\_ 丨 _,-"~
' \ 直角边\ \半径 / _,-"~方向(单位向量)
' + \ \_ ,+,-"~
' ", \ \*"交点
' "+, 直角*,-"~,+"
' ~+, ,+~
' ~"-,_ _,-"~
' ~~~~~
Dim 起点到圆心X As Double, 起点到圆心Y As Double, 距离平方 As Double
起点到圆心X = 圆心X - 起点X
起点到圆心Y = 圆心Y - 起点Y
If 方向X * 起点到圆心X + 方向Y * 起点到圆心Y < 0 Then Exit Function '如果射线的方向背道而驰则退出
距离平方 = 起点到圆心X * 起点到圆心X + 起点到圆心Y * 起点到圆心Y
Dim 直角边长度平方 As Double, 方向所在直角边长度平方 As Double
方向所在直角边长度平方 = 平方(方向X * 起点到圆心X + 方向Y * 起点到圆心Y)
直角边长度平方 = 距离平方 - 方向所在直角边长度平方
If 直角边长度平方 < 0 Or 直角边长度平方 > 半径平方 Then Exit Function