Was ist ein Rotationsalgorithmus

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Du hast einen Vektor mit X, Y, Z und W Koordinaten und eine Einheitsmatrix der Größe 4x4.
    Jetzt musst du mit jeweils einer Matrix die Rotation für X, Y und Z darstellen.
    Was du in die Matrix eintragen musst steht auf Wikipedia unter "Drehmatrizen des Raumes R³.
    Danach multiplizierst du die drei Matrizen miteinander -> siehe hier.
    Du erhältst die fertige Drehmatrix, die du nun mit dem Vektor multiplizieren musst.
    Raus kommt der gedrehte Punkt im Raum.

    zum Code:
    Die Matrix kannst du als zweidimensionales Array darstellen.
    Multiplizieren tust du das etwa so:

    VB.NET-Quellcode

    1. If m1.columnCount = m2.rowCount Then
    2. Dim M As New Matrix(m2.columnCount, m1.rowCount)
    3. For x As Integer = 0 To M.columnCount - 1
    4. For y As Integer = 0 To M.rowCount - 1
    5. Dim ValueXY As Double = 0
    6. For i As Integer = 0 To m1.columnCount - 1
    7. ValueXY += m1.value(i, y) * m2.value(x, i)
    8. Next
    9. M.value(x, y) = ValueXY
    10. Next
    11. Next
    12. Else
    13. Throw New ArgumentException("Die Matrizen sind nicht miteinander multiplizierbar.")
    14. End If

    wobei "columCount" die Breite und "rowCount" die Höhe der jeweiligen Matrix sind und "value" der Wert an der jeweiligen Position.
    Und beim Vektor so:

    VB.NET-Quellcode

    1. Dim NewV As New Vector4
    2. NewV.X = m.value(0, 0) * v.X + m.value(1, 0) * v.Y + m.value(2, 0) * v.Z + m.value(3, 0) * v.W
    3. NewV.Y = m.value(0, 1) * v.X + m.value(1, 1) * v.Y + m.value(2, 1) * v.Z + m.value(3, 1) * v.W
    4. NewV.Z = m.value(0, 2) * v.X + m.value(1, 2) * v.Y + m.value(2, 2) * v.Z + m.value(3, 2) * v.W
    5. NewV.W = m.value(0, 3) * v.X + m.value(1, 3) * v.Y + m.value(2, 3) * v.Z + m.value(3, 3) * v.W

    wobei m die MAtrix, v der alte Vektor und newV der neue Vektor sind.