好的,我需要做两件事:
我将需要平面方程式,在给定新线方程的情况下,我可以知道它在平面上的哪个位置相交(假设它在第一个位置相交)。
答案 0 :(得分:0)
角度是相对于什么线?
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