0

2 つのことを行う必要があります。

  1. 3D 空間内の点から、与えられた角度で直線の方程式を決定する必要があります
  2. その線に垂直で、設定されたサイズで、元の線が中心にある平面の方程式を決定する必要があります。

平面の方程式は、新しい直線の方程式が与えられたときに、平面上のどこで交差するかがわかるようにする必要があります (最初に交差すると仮定します)。

4

1 に答える 1

0
  1. したがって、3D 空間のポイントは、X、Y、Z 原点 0,0,0 からの 3D ベクトルの形式になりますか?

角度はどの線に対して相対的ですか?

  1. 外積は垂線になります。
    関数 CrossProduct(ByVal b As Vector3d) As Vector3d
        'クロス積 = (ay*bz - az*by, az*bx - ax*bz, ax*by - ay*bx)
        Dim cp を新しい Vector3d として
        cp.x = y * bz - z * by
        cp.y = z * bx - x * bz
        cp.z = x * by - y * bx
        リターンcp
    終了機能

    Function DotProduct(ByVal OtherVector As Vector3d) As Double
        '2 つのベクトルの内積を計算します
        x * OtherVector.x + y * OtherVector.y + z * OtherVector.z を返します。
    終了機能

    公開クラス Ray3d
        Public Po As New Vector3d '起点
        パブリック V を新しい Vector3d 'vector として
    クラス終了

    パブリック クラス Plane3d
        Public N As New Vector3d 'normal
        新しい Vector3d 'point on plane としてのパブリック PoP
    クラス終了


    Private Function IntersectionTest (ByVal R As Ray3d、ByVal P As Plane3d、ByRef ReturnPoint As Vector3d) をブール値として

        Dim RayDotPlaneNormal As Double = RVDotProduct(PN)

        RayDotPlaneNormal = 0 で片面の場合
            Return False '交差点なし
        終了条件

        '平面方程式 PoP.N = d

        Dim d As Double
        薄暗い PopVector を Vector3d = P.PoP.ToVector3d として
        d = PNDotProduct(ポップベクトル)


        '交差方程式
        't = -(Po.N+d)/(VN)

        Dim PointOriginVector を Vector3d として
        PointOriginVector = R.Po.ToVector3d

        Dim PointOriginDotPlaneNormal As Double
        PointOriginDotPlaneNormal = PNDotProduct(PointOriginVector)

        Dim t As Double
        t = -(PointOriginDotPlaneNormal + d) / RayDotPlaneNormal

        ReturnPoint.x = R.Po.x + RVx * t
        ReturnPoint.y = R.Po.y + RVy * t
        ReturnPoint.z = R.Po.z + RVz * t

        True を返す

    終了機能

于 2010-01-21T21:15:54.600 に答える