All right, I need to do two things:
I will need the plane's equation to be in a form where, given a new line equation, I can tell where on the plane it intersects (assuming it intersects in the first place).
The angle is relative to what line?
Function CrossProduct(ByVal b As Vector3d) As Vector3d 'cross product = (ay*bz - az*by, az*bx - ax*bz, ax*by - ay*bx) Dim cp As New Vector3d cp.x = y * b.z - z * b.y cp.y = z * b.x - x * b.z cp.z = x * b.y - y * b.x Return cp End Function Function DotProduct(ByVal OtherVector As Vector3d) As Double 'calculate dot product of two vectors Return x * OtherVector.x + y * OtherVector.y + z * OtherVector.z End Function Public Class Ray3d Public Po As New Vector3d 'point of origin Public V As New Vector3d 'vector End Class Public Class Plane3d Public N As New Vector3d 'normal Public PoP As New Vector3d 'point on plane End Class Private Function IntersectionTest(ByVal R As Ray3d, ByVal P As Plane3d, ByRef ReturnPoint As Vector3d) As Boolean Dim RayDotPlaneNormal As Double = R.V.DotProduct(P.N) If RayDotPlaneNormal = 0 for 1 sided Return False 'no intersection End If 'PLANE EQUATION PoP.N = d Dim d As Double Dim PopVector As Vector3d = P.PoP.ToVector3d d = P.N.DotProduct(PopVector) 'INTERSECTION EQUATION 't = -(Po.N+d)/(V.N) Dim PointOriginVector As Vector3d PointOriginVector = R.Po.ToVector3d Dim PointOriginDotPlaneNormal As Double PointOriginDotPlaneNormal = P.N.DotProduct(PointOriginVector) Dim t As Double t = -(PointOriginDotPlaneNormal + d) / RayDotPlaneNormal ReturnPoint.x = R.Po.x + R.V.x * t ReturnPoint.y = R.Po.y + R.V.y * t ReturnPoint.z = R.Po.z + R.V.z * t Return True End Function
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.