Was looking through old projects and found this function and thought it might be of use to someone. It's based on a C++ algorithm that I've lost the link for.
Public Function IsPointInCylinder(ByVal vPoint As TV_3DVECTOR, ByVal vStartPoint As TV_3DVECTOR, ByVal vEndPoint As TV_3DVECTOR, ByVal fRadius As Single) As Boolean
' Normalize start & end points.
Dim vStartNormal As TV_3DVECTOR = TVMaths.VNormalize(TVMaths.VSubtract(vStartPoint, vEndPoint))
Dim vEndNormal As TV_3DVECTOR = TVMaths.VNormalize(New TV_3DVECTOR(-vStartNormal.x, -vStartNormal.y, -vStartNormal.z))
' Check if the given point is within the cylinder.
Dim fDistanceToPlane As Single = TVMaths.VDotProduct(TVMaths.VSubtract(vPoint, vStartPoint), vStartNormal)
If (fDistanceToPlane > 0) Then
If TVMaths.VDotProduct(TVMaths.VSubtract(vPoint, vEndPoint), vEndNormal) > 0 Then
vPoint = TVMaths.VSubtract(vPoint, TVMaths.VMultiply(vStartNormal, fDistanceToPlane))
If TVMaths.GetDistance3D(vPoint.x, vPoint.y, vPoint.z, vStartPoint.x, vStartPoint.y, vStartPoint.z) < fRadius Then
' Point IS inside the cylinder.
Return True
Else
' Point ISN'T inside the cylinder.
Return False
End If
End If
End If
End Function