Уравнение плоскости из прямой

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

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

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


person user2301457    schedule 21.01.2010    source источник
comment
Итак, у вас есть точка и угол — к чему относится угол?   -  person jball    schedule 21.01.2010


Ответы (1)


  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

person acheo    schedule 21.01.2010
comment
Ну... Я не могу назвать 3D-векторы в том виде, в котором они есть сейчас, я не использую 3D-движок. Фактически, это должно помочь мне построить 3D-систему. Поэтому я должен делать все, используя только математику, но все же таким образом, чтобы Javascript мог вычислить... вот почему это сложно. Угол — это линия, которая на самом деле является лучом, исходящим из исходной точки, определяемой координатами x, y, z. Плоскость рисуется перпендикулярно на определенном расстоянии вдоль этого луча, отсчитываемом от исходной точки. - person user2301457; 22.01.2010
comment
Это код VB.NET, который можно легко портировать на JavaScript. - person acheo; 22.01.2010
comment
Хе-хе-хе, если это правда, мне также нужно знать, как это портировать. Я предполагаю, что мне нужно найти плоскость, используя ее вектор нормали, зная точку (координат x y z) на нормали, которая также существует на плоскости. - person user2301457; 23.01.2010