AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Matrix 90 Grad um Z-Achse drehen

Ein Thema von Bjoerk · begonnen am 14. Jan 2016 · letzter Beitrag vom 18. Jan 2016
Antwort Antwort
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

Matrix 90 Grad um Z-Achse drehen

  Alt 14. Jan 2016, 11:45
Ich hab eine Matrix, die sieht so aus. Diese Matrix ist bezüglich dieses KOO definiert.
Code:
 Z
 |     Y
 |   .
 | .
-|------ X
Delphi-Quellcode:
function TZzBeamTools.BeamSmLc(const E, G, Iy, It, x1, y1, x2, y2: double): TZzFloatMat1212;
var
  I, J: integer;
  S, SS, SSS, EIy, GIt : double;
begin
  GIt := G * It;
  EIy := E * Iy;

  S := Sqrt(Sqr(x2 - x1) + Sqr(y2 - y1)); // z1 = z2 = 0;
  SS := S * S;
  SSS := SS * S;

  for I := 1 to 12 do
    for J := 1 to 12 do
      Result[I, J] := 0;

  // Result[I, J] = Schnittkraft Si infolge Vj;
  // Si: Q = Querkraft, M = Moment;
  // Vj: V = Verschiebung, Phi = Verdrehung;

  Result[3, 3] := 12 * EIy / SSS; // S3(= Q.Z.L) infolge V3(= V.Z.L) = 1;
  Result[3, 5] := -6 * EIy / SS; // S3(= Q.Z.L) infolge V5(= Phi.Y.L) = 1;
  Result[3, 9] := -12 * EIy / SSS; // S3(= Q.Z.L) infolge V9(= V.Z.R) = 1;
  Result[3, 11] := -6 * EIy / SS; // S3(= Q.Z.L) infolge V11(= Phi.Y.R) = 1;

  Result[4, 4] := GIt / S; // S4(= M.X.L) infolge V4(= Phi.X.L) = 1;
  Result[4, 10] := -GIt / S; // S4(= M.X.L) infolge V10(= Phi.X.R) = 1;

  Result[5, 5] := 4 * EIy / S; // S5(= M.Y.L) infolge V5(= Phi.Y.L) = 1;
  Result[5, 9] := 6 * EIy / SS; // S5(= M.Y.L) infolge V9(= V.Z.R) = 1;
  Result[5, 11] := 2 * EIy / S; // S5(= M.Y.L) infolge V11(= Phi.Y.R) = 1;

  Result[9, 9] := 12 * EIy / SSS; // S9(= Q.Z.R) infolge V9(= V.Z.R) = 1;
  Result[9, 11] := 6 * EIy / SS; // S9(= Q.Z.R) infolge V11(= Phi.Y.R) = 1;

  Result[10, 10] := GIt / S; // S10(= M.X.R) infolge V10(= Phi.X.R) = 1;

  Result[11, 11] := 4 * EIy / S; // S11(= M.Y.R) infolge V11(= Phi.Y.R) = 1;

  for I := 1 to 11 do
    for J := I + 1 to 12 do
      Result[J, I] := Result[I, J]; // Symmetrisch ergänzen;
end;
Damit ich diese Matrix weiterverarbeiten kann, brauche ich sie bezüglich dieses KOO-Systems.
Code:
       Z
       |     X
       |   .
       | .
Y -----|-
Nun wollte ich die Matrix 90 Grad um die Z-Achse drehen. Weiß jemand wie das geht?
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#2

AW: Matrix 90 Grad um Z-Achse drehen

  Alt 14. Jan 2016, 12:44
Ewig her, deswegen bekomm ich nicht mehr alles auf die Kette. Aber für meinen SoftwareRenderer habe ich mir seinerzeit ne Unit mit entsprechenden Klassen geschrieben.
https://github.com/Memnarch/Software...ter/Math3D.pas

Dort kannst du eine Matrix als Rotationsmatrix initialisieren (X, Y oder Z). Diese ließe sich dann mit deiner Matrix multiplizieren.

Vielleicht kann es dir (etwas helfen). Meine Z-Achse müsste ebenfalls UP-Orientiert gewesen sein.

MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Matrix 90 Grad um Z-Achse drehen

  Alt 14. Jan 2016, 12:46
Nun wollte ich die Matrix 90 Grad um die Z-Achse drehen. Weiß jemand wie das geht?
Drehmatrix?

Bin etwas verwirrt von deiner Frage. Die Skizze von deinem Koordinatensystem hat drei Dimensionen, aber die Matrix in deinem Code ist offenbar 12-dimensional. Bei mehr als drei Dimensionen kann man nicht um eine "Achse" rotieren, sondern muss in einer Ebene rotieren. Wie das geht, steht aber auch in dem Wikipedia-Artikel im Abschnitt Drehmatrizen des Raumes R^n.
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#4

AW: Matrix 90 Grad um Z-Achse drehen

  Alt 14. Jan 2016, 13:01
[...] aber die Matrix in deinem Code ist offenbar 12-dimensional[...]
Da war ich mal wieder nicht aufmerksam. Wie passt den dass mit dem 3D-Bild o.O
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#5

AW: Matrix 90 Grad um Z-Achse drehen

  Alt 14. Jan 2016, 13:07
Ist seine Matrix nicht 2-dimensional, mit je 12 Einheiten pro Achse?

Aber zum Glück weiß ja keiner wie TZzFloatMat1212 definiert ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Matrix 90 Grad um Z-Achse drehen

  Alt 14. Jan 2016, 13:16
Sieht für mich eher nach 12x12 aus .. wobei da unten wird irgendwie noch symmetrisch ergänzt
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (14. Jan 2016 um 13:18 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Matrix 90 Grad um Z-Achse drehen

  Alt 14. Jan 2016, 13:34
Ist 3-dimenional und ein array 12 x 12. Zz ist meine persönliche Abkürzung für Zienkiewicz. Die 12 kommen aus drei Verschiebungen und drei Verdrehungen links und rechts am Element.

Code:
v.x.left
v.y.left
v.z.left
p.x.left
p.y.left
p.z.left
v.x.right
v.y.right
v.z.right
p.x.right
p.y.right
p.z.right
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz