Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Transformationsmatrix

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Transformationsmatrix (3663 mal gelesen)
FGR_DIZZY
Mitglied
Admin


Sehen Sie sich das Profil von FGR_DIZZY an!   Senden Sie eine Private Message an FGR_DIZZY  Schreiben Sie einen Gästebucheintrag für FGR_DIZZY

Beiträge: 13
Registriert: 26.05.2004

erstellt am: 24. Okt. 2004 15:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

ich kämpfe nun schon seit geraumer Zeit mit dem Problem die Berechnung der Rotation eines Bauteiles in einer IAM nachvollziehen zu können. Bis zur Transformationsmatrix bin ich schon gekommen ... die Translation auszulesen ist auch soweit kein Problem ... aber die Drehwinkel im X, Y und Z... da komme ich einfach nicht ran.

Ich will einfach nur an die Angaben (X-Winkel Y-Winkel, Z-Winkel) ran, welche mir der Inventor in der Registerkarte "Exemplar" des Eigenschaftsdialoges eines Teiles in einer IAM anzeigt.

In diversen Artikeln über Rotationsmatritzen bin ich inzwischen soweit gekommen dass ich die Rotation um eine Achse sauber bekommen. Ist das Teil aber zusätzlich noch um eine weiter Achse oder gar alle 3 gedreht hörts bei mir auf.

Kann mir da jemans helfen? Hat jemand schon mal was ähnliches programmiert?

MfG
FGR

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Charly Setter
Ehrenmitglied V.I.P. h.c.




Sehen Sie sich das Profil von Charly Setter an!   Senden Sie eine Private Message an Charly Setter  Schreiben Sie einen Gästebucheintrag für Charly Setter

Beiträge: 11977
Registriert: 28.05.2002

Trau keiner Diva unter SP2....

erstellt am: 24. Okt. 2004 18:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für FGR_DIZZY 10 Unities + Antwort hilfreich

Schau mal in der Suche, hier oder im "großen" Forum. Das Thema hatten wir schon mal. Ich hatte damals auch passende Literatur gepostet.

Fakt ist, das Du die Winkel nicht direkt aus der Transformationsmatrix lesen kannst, sondern nur Sin- bzw. Cosinüsse 

Ich hoffe diese Nüsse schmecken Dir dann auch 


lg Mathias

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

FGR_DIZZY
Mitglied
Admin


Sehen Sie sich das Profil von FGR_DIZZY an!   Senden Sie eine Private Message an FGR_DIZZY  Schreiben Sie einen Gästebucheintrag für FGR_DIZZY

Beiträge: 13
Registriert: 26.05.2004

erstellt am: 25. Okt. 2004 15:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

das mit den Nüssen ist mir schon klar, unklar ist mir nur wie ich auf die drei einzelnen Winkel komme. Alle verfügbare Literatur zeigt immer nur die Drehung um eine Achse - da ist ja naoch easy - aber leider sind die Teile nun mal frei im Raum verdreht ..

MfG
FGR

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

daywa1k3r
Moderator
Softwareentwickler




Sehen Sie sich das Profil von daywa1k3r an!   Senden Sie eine Private Message an daywa1k3r  Schreiben Sie einen Gästebucheintrag für daywa1k3r

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 25. Okt. 2004 16:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für FGR_DIZZY 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von FGR_DIZZY:
das mit den Nüssen ist mir schon klar, unklar ist mir nur wie ich auf die drei einzelnen Winkel komme. Alle verfügbare Literatur zeigt immer nur die Drehung um eine Achse - da ist ja naoch easy - aber leider sind die Teile nun mal frei im Raum verdreht ..

MfG
FGR


Nicht dass ich Zeit hätte, aber was willst du eigentlich machen ? Um die Position eines Teiles eindeutig zu definieren braucht man 1 Ursprungs-Punkt und 3 Vektoren. Hast du dir schon mal den Matrix Array geholt ( GetMatrixData ) ? Ist ein 15-stelliger Array, und da sind die Werte drin für den Ursprung und die Vektoren:


  1. Vektor X - Wert X
  2. Vektor Y - Wert X
  3. Vektor Z - Wert X
  4. Ursprung - Wert X
  5. Vektor X - Wert Y
  6. Vektor Y - Wert Y
  7. Vektor Z - Wert Y
  8. Ursprung - Wert Y
  9. Vektor X - Wert Z
  10. Vektor Y - Wert Z
  11. Vektor Z - Wert Z
  12. Ursprung - Wert Z
  13. Leer
  14. Leer
  15. Leer

Mit ein bisschen Mathe dürftest du deine Winkel berechnen können.

Teil um 3 Achsen drehen, dürfte zB. mit:

Code:

SetToAlignCoordinateSystems(

FromOrigin As Point,

FromXAxis As Vector,

FromYAxis As Vector,

FromZAxis As Vector,

ToOrigin As Point,

ToXAxis As Vector,

ToYAxis As Vector,

ToZAxis As Vector)

FromOrigin Input Point object that defines the origin to map the coordinate system from.

FromXAxis Input Vector object that defines the X-axis to map the coordinate system from.

FromYAxis Input Vector object that defines the Y-axis to map the coordinate system from.

FromZAxis Input Vector object that defines the Z-axis to map the coordinate system from.

ToOrigin Input Point object that defines the origin to map the coordinate system to.

ToXAxis Input Vector object that defines the X-axis to map the coordinate system to.

ToYAxis Input Vector object that defines the Y-axis to map the coordinate system to.

ToZAxis Input Vector object that defines the Z-axis to map the coordinate system to.


funktionieren. Oder 3x einzeln mit:

Code:

SetToRotation(

Angle As Double,

Axis As Vector,

Center As Point)

Angle Input Double that specifies the angle of rotation.

Axis Input Vector object.

Center Input Point object that specifies the origin.


usw.

------------------
Grüße daywa1k3r

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

FGR_DIZZY
Mitglied
Admin


Sehen Sie sich das Profil von FGR_DIZZY an!   Senden Sie eine Private Message an FGR_DIZZY  Schreiben Sie einen Gästebucheintrag für FGR_DIZZY

Beiträge: 13
Registriert: 26.05.2004

erstellt am: 25. Okt. 2004 17:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo daywa1k3r,

vielleicht ist ja nicht so richtig rübergekommen was ich brauche ...

... ich will hier kein Teil drehen sondern die Drehung des Teils ermitteln. Und wenn ich mir die Werte in der Translationsmatrix über die Arcusfunktionen rückrechne komm eich nicht auf das was mir der Inventor Registerkarte "Exemplar" des Eigenschaftsdialoges eines Teiles in einer IAM anzeigt.

MfG
FGR

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

waldi
Mitglied
 Softwerker


Sehen Sie sich das Profil von waldi an!   Senden Sie eine Private Message an waldi  Schreiben Sie einen Gästebucheintrag für waldi

Beiträge: 272
Registriert: 07.08.2001

erstellt am: 26. Okt. 2004 08:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für FGR_DIZZY 10 Unities + Antwort hilfreich

Hi,

normalerweise nimmst du das Skalarprodukt zwischen den Achsen, deren Winkel du berechnen willst, als z.B. die X-Achse des Assembly Koordinatensystems (1,0,0) und den X-Vektor der Occurrence Matrix. Ist das Skalar -1, ist der Winkel 180 Grad, bei 1 ist er 0 Grad und ansonsten ist es der arcus cos des Skalar Produktes.
Ob du dann aber die gleichen Werte bekommst, die der Inventor intern hat, weiss ich nicht, das kommt wohl auf einen Versuch an.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

daywa1k3r
Moderator
Softwareentwickler




Sehen Sie sich das Profil von daywa1k3r an!   Senden Sie eine Private Message an daywa1k3r  Schreiben Sie einen Gästebucheintrag für daywa1k3r

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 26. Okt. 2004 09:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für FGR_DIZZY 10 Unities + Antwort hilfreich

Hallo,

ich habe gestern auch mal etwas getestet...

Code:

Sub test_matrix()
     
    Dim oOcc As ComponentOccurrence
    Set oOcc = ThisApplication.ActiveDocument.ComponentDefinition.Occurrences(1)
   
    Dim oMatrix1 As Matrix
    Set oMatrix1 = oOcc.Transformation
   
    Dim oOrigin1 As Point
    Dim oX1 As Vector
    Dim oY1 As Vector
    Dim oZ1 As Vector
   
    Call oMatrix1.GetCoordinateSystem(oOrigin1, oX1, oY1, oZ1)
   
    Dim oMatrix2 As Matrix
    Set oMatrix2 = ThisApplication.TransientGeometry.CreateMatrix
   
    Dim oOrigin2 As Point
    Dim oX2 As Vector
    Dim oY2 As Vector
    Dim oZ2 As Vector
   
    Call oMatrix2.GetCoordinateSystem(oOrigin2, oX2, oY2, oZ2)

    Debug.Print (oX2.AngleTo(oX1) * 180) / 3.14159265
    Debug.Print (oY2.AngleTo(oY1) * 180) / 3.14159265
    Debug.Print (oZ2.AngleTo(oZ1) * 180) / 3.14159265
   
End Sub


Also die Winkel, die Inventor ausgibt, bekomme ich nicht hin. Aber irgendwie sind die Werte auch komisch, oder ich habe das Grundprinzip nicht verstanden. Ein Beispiel: In eine Baugruppe das erste Teil einfügen. Die Winkel checken:

X = 0
Y = 0
Z = 0

Mit dem Makro die Werte checken

X = 0
Y = 0
Z = 0

Soweit so gut.

Jetzt mal das Teil um die Y Achse um 90°UZS drehen. Und jetzt kommt das, was ich nicht verstehe. Y Winkel darf sich doch nicht verändert haben, X und Z aber schon um 90°. Wenn ich aber das Exemplar anschaue, dann ist es genau umgekehrt.

X = 0
Y = 90
Z = 0

Mein Makro gibt mir ( zumindest mir ) logische Werte aus:

X = 90
Y = 0
Z = 90

Das sind doch die Winkel im Vergleich zum Ursprung der Baugruppe. Irgendwie verstehe ich es nicht ganz. Ich habe gestern ein paar Sachen probiert ( invertieren, multiplizieren, ... ) aber ich habe die Daten aus dem Exemplar nicht bekommen.

Bis bald...

------------------
Grüße daywa1k3r

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

PaulSchuepbach
Moderator
Programmierer




Sehen Sie sich das Profil von PaulSchuepbach an!   Senden Sie eine Private Message an PaulSchuepbach  Schreiben Sie einen Gästebucheintrag für PaulSchuepbach

Beiträge: 1005
Registriert: 01.10.2003

erstellt am: 31. Okt. 2004 18:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für FGR_DIZZY 10 Unities + Antwort hilfreich

Hallo zusammen,

ich habe endlich Zeit und Muse gefunden, das Problem mal naeher anzuschauen. Es sieht fast so aus, als ob die Vektoren mittels 'GetCoordinateSystem' falsch bzw. vertauscht gesetzt wuerden. Wenn ich die Vektoren mauell aus der Matrix setzte, dann sind die Werte der Achs-Winkel zueinander korrekt.

Macht folgendes: Ein Klotz auf 0,0,0 erstellen. Ein Assy oeffnen, Klotz auf 0,0,0 einfuegen. Klotz nochmals einfuegen und mit Winkelabhaengigkeit versehen, so dass ^der 2. Klotz um eine Achse gederht werden kann (z.B. um Z). Code laufenlassen und im Debug-Fenster erscheinen die Winkelwerte. Wenn z.B. die 2. instanz 90 nGrad um Z gederht ist kommt 90 90 0 heraus - was korrekt ist.


Code:

Private Sub chkAngle()
 
  Dim oApp As Inventor.Application
  Set oApp = ThisApplication
 
  Dim oDoc As AssemblyDocument
  Set oDoc = oApp.ActiveDocument
 
  Dim oOcc1 As ComponentOccurrence
  Set oOcc1 = oDoc.ComponentDefinition.Occurrences(1)
 
  Dim oMat1 As Matrix
  Set oMat1 = oOcc1.Transformation
 
 
  Dim oOcc2 As ComponentOccurrence
  Set oOcc2 = oDoc.ComponentDefinition.Occurrences(2)
 
  Dim oMat2 As Matrix
  Set oMat2 = oOcc2.Transformation
   
  Dim oO1 As Point
  Dim oX1 As Vector
  Dim oY1 As Vector
  Dim oZ1 As Vector
 
  ' hier scheint das Problem zu sein: die Vektoren werden offensichtlich falsch gesetzt
  Call oMat1.GetCoordinateSystem(oO1, oX1, oY1, oZ1)

  Dim oO2 As Point
  Dim oX2 As Vector
  Dim oY2 As Vector
  Dim oZ2 As Vector
 
  ' hier natuerlich dasselbe wie oben: die Vektoren werden offensichtlich falsch gesetzt
  Call oMat2.GetCoordinateSystem(oO2, oX2, oY2, oZ2)
 
   
  ' also setze ich die Vektoren manuedll - aus der Matrix
  ' 1. Instanz
  oX1.X = oMat1.Cell(1, 1)
  oX1.Y = oMat1.Cell(1, 2)
  oX1.Z = oMat1.Cell(1, 3)
 
  oY1.X = oMat1.Cell(2, 1)
  oY1.Y = oMat1.Cell(2, 2)
  oY1.Z = oMat1.Cell(2, 3)

  oZ1.X = oMat1.Cell(3, 1)
  oZ1.Y = oMat1.Cell(3, 2)
  oZ1.Z = oMat1.Cell(3, 3)


  ' 2. Instanz
  oX2.X = oMat2.Cell(1, 1)
  oX2.Y = oMat2.Cell(1, 2)
  oX2.Z = oMat2.Cell(1, 3)
 
  oY2.X = oMat2.Cell(2, 1)
  oY2.Y = oMat2.Cell(2, 2)
  oY2.Z = oMat2.Cell(2, 3)

  oZ2.X = oMat2.Cell(3, 1)
  oZ2.Y = oMat2.Cell(3, 2)
  oZ2.Z = oMat2.Cell(3, 3)


' jetzt klappt's auch mit den Winkeln der einzelnen Achsen zurinander, Ausgabe korrekt
Debug.Print Round(oX1.AngleTo(oX2) * 180 / 3.14159265, 3)
Debug.Print Round(oY1.AngleTo(oY2) * 180 / 3.14159265, 3)
Debug.Print Round(oZ1.AngleTo(oZ2) * 180 / 3.14159265, 3)


End Sub

Gruesse,

Paul

www.morecam.ch/cad.htm

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Goose
Mitglied
Maschinenbautechniker / geb. Zerspanungsmechaniker Fachrichtung Frästechnik


Sehen Sie sich das Profil von Goose an!   Senden Sie eine Private Message an Goose  Schreiben Sie einen Gästebucheintrag für Goose

Beiträge: 202
Registriert: 29.03.2007

IV2021 R4
CATIA V6 R2013x

erstellt am: 08. Dez. 2017 14:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für FGR_DIZZY 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von daywa1k3r:
Hallo,

ich habe gestern auch mal etwas getestet...

<BLOCKQUOTE><font size="2" face="Courier New">Code:<HR>
Sub test_matrix()
     
    Dim oOcc As ComponentOccurrence
    Set oOcc = ThisApplication.ActiveDocument.ComponentDefinition.Occurrences(1)
   
    Dim oMatrix1 As Matrix
    Set oMatrix1 = oOcc.Transformation
   
    Dim oOrigin1 As Point
    Dim oX1 As Vector
    Dim oY1 As Vector
    Dim oZ1 As Vector
   
    Call oMatrix1.GetCoordinateSystem(oOrigin1, oX1, oY1, oZ1)
   
    Dim oMatrix2 As Matrix
    Set oMatrix2 = ThisApplication.TransientGeometry.CreateMatrix
   
    Dim oOrigin2 As Point
    Dim oX2 As Vector
    Dim oY2 As Vector
    Dim oZ2 As Vector
   
    Call oMatrix2.GetCoordinateSystem(oOrigin2, oX2, oY2, oZ2)

    Debug.Print (oX2.AngleTo(oX1) * 180) / 3.14159265
    Debug.Print (oY2.AngleTo(oY1) * 180) / 3.14159265
    Debug.Print (oZ2.AngleTo(oZ1) * 180) / 3.14159265
   
End Sub

<HR></font></BLOCKQUOTE>



Hallo zusammen,

ich würde gerne anstelle des Winkels den X- Wert ausgeben lassen!

Debug.Print (oX2.AngleTo(oX1) * 180) / 3.14159265

Leider finde ich in den List Properties/ Methods nichts wie Measure oder sonstiges.

Kann mir da jemand den zugehörigen Befehl nennen um den Abstand zu messen!?

Danke und Gruß


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 13. Dez. 2017 10:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für FGR_DIZZY 10 Unities + Antwort hilfreich

den Abstand zu was?

Call oMatrix1.GetCoordinateSystem(oOrigin1, oX1, oY1, oZ1)

dieser Befehl liefert ja schon die Koordinaten des Bauteil-Ursprungs zum Ursprung der Baugruppe -> im Vektor oOrigin1. Darin sind die Werte zu finden, die auch bei den iProp./Exemplar stehen. Natürlich in der internen IV-Einheit (cm).

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz