开发者

Plane equation from a line

开发者 https://www.devze.com 2022-12-17 22:29 出处:网络
All right, I need to do two things: I need to determine the equation of a line, with the angle given, from a

All right, I need to do two things:

  1. I need to determine the equation of a line, with the angle given, from a point in 3D space
  2. I need to determ开发者_如何学JAVAine the equation of a plane that is perpendicular to that line, and is a set size, with the original line in it's center.

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).


  1. So your point in 3D space will be in the form of a 3D vector from the X,Y,Z origin 0,0,0 ?

The angle is relative to what line?

  1. The cross product will give you the perpendicular 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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号