Плоское уравнение из прямой - PullRequest
0 голосов
/ 21 января 2010

Хорошо, мне нужно сделать две вещи:

  1. Мне нужно определить уравнение линия с заданным углом от точка в трехмерном пространстве
  2. Мне нужно определить уравнение плоскость, которая перпендикулярна эта строка, и это установленный размер, с оригинальная линия в его центре.

Мне нужно, чтобы уравнение плоскости было в форме, в которой по новому уравнению линии я могу сказать, где на плоскости он пересекается (при условии, что он пересекается в первую очередь).

1 Ответ

0 голосов
/ 22 января 2010
  1. Таким образом, ваша точка в трехмерном пространстве будет иметь вид трехмерного вектора из X, Y, Z начала координат 0,0,0?

Угол относительно какой линии?

  1. Перекрестное произведение даст вам перпендикулярную линию.
    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

...