Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  AXIS Rotation

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
Autor Thema:  AXIS Rotation (3409 mal gelesen)
IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 23. Apr. 2014 10:37    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 zusammen,

ich möchte ein Achsensystem erstellen.
Dazu positioniere ich das Achsensystem im Raum durch die Koordinaten.
Das bekomme ich soweit hin. 

Code:
    'Frameursprung setzen
    axisSystem1.OriginType = catAxisSystemOriginByCoordinates
    Dim arrayOfVariantOfDouble1(3)
    arrayOfVariantOfDouble1(0) = CDbl(CStr(koordinatenListe(0)))
    arrayOfVariantOfDouble1(1) = CDbl(CStr(koordinatenListe(1)))
    arrayOfVariantOfDouble1(2) = CDbl(CStr(koordinatenListe(2)))
    axisSystem1.PutOrigin arrayOfVariantOfDouble1

Dann möchte ich allerdings mit vorhandenen Winkeln (Drehung um x, um y, um z) das Achsensystem ausrichten.

Bei der Axis Rotation stoße ich aber auf Grenzen. Kann mir da jemand weiter helfen?

------------------
Anfänger!

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 23. Apr. 2014 11:11    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 IAmTheFabian 10 Unities + Antwort hilfreich

Servus
Schau dir dazu mal die Methoden "PutVectors" bzw "PutXAxis", "PutYAxis" und "PutZAxis" an.
Vermutlich musst du die Eulerwinkel in Richtungsvektoren der Achsen umrechnen (viel Spaß dabei)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 23. Apr. 2014 13:06    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

ja das habe ich versucht.

ich möchte die 3x3 Matrix mit Werten füllen doch wenn ich eine Zelle in der Matrix einen Wert zuweise, verändern sich die anderen Werte in der Matrix.

------------------
Anfänger!

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 23. Apr. 2014 13:12    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 IAmTheFabian 10 Unities + Antwort hilfreich

Servus
Mit "PutVectors" kannst du doch die Richtungen von X- und Y-Achse auf einmal definieren, oder?
Die Z-Achse sollte sich automatisch ergeben (oder entscheidet dann Catia selbstständig ob es sich um ein rechtsseitiges oder linksseitiges Koordinatensystem handelt)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 23. Apr. 2014 13:13    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


matrix.JPG

 
Hier ein Bild

------------------
Anfänger!

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 23. Apr. 2014 14:38    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 IAmTheFabian 10 Unities + Antwort hilfreich

Einfach die 12er Matrix ausrechnen und wieder zurück übergeben.

Habe ich bei

http://hoblila.wordpress.com/download/

auch so gemacht.

Du setzt mit PutOrigin() ja nur den Ursprungspunkt. Bernd hat Dich auch auf gute Funktionen dafür hingewiesen.
ich würd's aber mit GetCoordinates() machen, was es auch geben müsste, aber schon so lange her. :-)

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 23. Apr. 2014 editiert.]

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 23. Apr. 2014 14:49    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

Gibt's dazu auch einen Quellcode? Ich versuche gerade die Drehmatrizen zu multiplizieren. Ohne Erfolg...

------------------
Anfänger!

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 23. Apr. 2014 15: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 IAmTheFabian 10 Unities + Antwort hilfreich

Der Code ist halt echt mies, würde ich heute nicht mehr so abgeben. :-)
So war früher aber mein Mathe-Modul aufgebaut. :-D

Hier die Funktion für die Rotation:

Code:

Public Sub Rotate(ByRef i_dWinkel As Double _
                , i_arrDblAxis() As Double _
                , io_arrVecToTransform() As Double _
                , i_arrDblOrignToTransform() As Double)

  Dim wina As Double, winb As Double
  Dim cosa As Double, cosb As Double, sina  As Double
  Dim br As Double, bx As Double
  Dim a1 As Double, a2 As Double, a3 As Double
  Dim X(1 To 3) As Double   'Richtungsvektor nach Q
  Dim t(1 To 3) As Double

  Dim arrDblKreuzprod1(1 To 3) As Double
  Dim arrDblVecBetweenOrign(1 To 3) As Double
  Dim arrDblVecToPoint(1 To 3) As Double
  Dim dAngle As Double
 
  'I = Normiert(P-C)
  arrDblVecBetweenOrign(1) = io_arrVecToTransform(1)
  arrDblVecBetweenOrign(2) = io_arrVecToTransform(2)
  arrDblVecBetweenOrign(3) = io_arrVecToTransform(3)
  dAngle = Normieren(arrDblVecBetweenOrign)
 
  'J=KxI
  dAngle = Kreuzprodukt(arrDblKreuzprod1, i_arrDblAxis, arrDblVecBetweenOrign)
 
  'R = P - C
  arrDblVecToPoint(1) = io_arrVecToTransform(1)
  arrDblVecToPoint(2) = io_arrVecToTransform(2)
  arrDblVecToPoint(3) = io_arrVecToTransform(3)
 
  wina = i_dWinkel
  cosa = wina * (PI / 180)
  cosa = Cos(cosa)
  If Abs(cosa) < EPSILON Then cosa = 0
 
  If wina >= 0 And wina < 180 Then
    sina = Sqr(1 - cosa ^ 2)
  Else
    sina = -Sqr(1 - cosa ^ 2)
  End If
  If Abs(sina) < EPSILON Then sina = 0
 
  'Richtungsvektor nach Q
'  x(1) = cosa * (j(2) * k(3) - j(3) * k(2)) - sina * (i(2) * k(3) - i(3) * k(2))
'  x(2) = sina * (i(1) * k(3) - i(3) * k(1)) - cosa * (j(1) * k(3) - j(3) * k(1))
'  x(3) = cosa * (j(1) * k(2) - j(2) * k(1)) - sina * (i(1) * k(2) - i(2) * k(1))
 
  X(1) = cosa * (arrDblKreuzprod1(2) * i_arrDblAxis(3) - arrDblKreuzprod1(3) * i_arrDblAxis(2)) - sina * (arrDblVecBetweenOrign(2) * i_arrDblAxis(3) - arrDblVecBetweenOrign(3) * i_arrDblAxis(2))
  X(2) = sina * (arrDblVecBetweenOrign(1) * i_arrDblAxis(3) - arrDblVecBetweenOrign(3) * i_arrDblAxis(1)) - cosa * (arrDblKreuzprod1(1) * i_arrDblAxis(3) - arrDblKreuzprod1(3) * i_arrDblAxis(1))
  X(3) = cosa * (arrDblKreuzprod1(1) * i_arrDblAxis(2) - arrDblKreuzprod1(2) * i_arrDblAxis(1)) - sina * (arrDblVecBetweenOrign(1) * i_arrDblAxis(2) - arrDblVecBetweenOrign(2) * i_arrDblAxis(1))
 
 
  'Strecken des gedrehten Vektors
  bx = Betrag(X())              'Sollte nach Voraussetzung 1 sein
  br = Betrag(arrDblVecToPoint())
  t(1) = X(1) * br / bx
  t(2) = X(2) * br / bx
  t(3) = X(3) * br / bx
 
  Dim dBuffer(1 To 3) As Double
 
  dBuffer(1) = io_arrVecToTransform(1)
  dBuffer(2) = io_arrVecToTransform(2)
  dBuffer(3) = io_arrVecToTransform(3)
 
  io_arrVecToTransform(1) = i_arrDblOrignToTransform(1) + t(1)
  io_arrVecToTransform(2) = i_arrDblOrignToTransform(2) + t(2)
  io_arrVecToTransform(3) = i_arrDblOrignToTransform(3) + t(3)

  io_arrVecToTransform(1) = io_arrVecToTransform(1) - i_arrDblOrignToTransform(1)
  io_arrVecToTransform(2) = io_arrVecToTransform(2) - i_arrDblOrignToTransform(2)
  io_arrVecToTransform(3) = io_arrVecToTransform(3) - i_arrDblOrignToTransform(3)
  Normieren io_arrVecToTransform

  dAngle = Winkel(io_arrVecToTransform, dBuffer, i_arrDblAxis)
    If (Abs(dAngle) - i_dWinkel) > EPSILON Then
        i_dWinkel = i_dWinkel - (i_dWinkel + dAngle)
    End If
 
End Sub


Ich glaub es wäre einfacher die Funktion selbst zu bauen.
Du hast ja auch nur einen Fall zu betrachten, das Programm war damals für weit mehr ausgelegt.
Und so schwer isses nun auch nicht um ne Achse zu drehen.

Edit1: Ich denk mal die Rotate() Funktion sollte Dir reichen, den Rest musst Du nur noch drumherum bauen.
Edit2: Ich habe den anderen Käse mal rausgeschmissen, das bläht den Beitrag nur unnötig auf und passt sowieso nicht ganz zu dem Problem, da bei mir eine Rotation zu einem anderen System gemacht wurde und nicht der einfache Fall, nur ein Achsensystem zu drehen.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 23. Apr. 2014 editiert.]

[Diese Nachricht wurde von HoBLila am 23. Apr. 2014 editiert.]

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 23. Apr. 2014 15: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

Ich blicke da nicht so ganz durch. Kann ich nicht auch aus drei Drehmatrizen, 3 Eulerwinkel berechnen und einsetzten?

------------------
Anfänger!

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 23. Apr. 2014 15:42    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

Wenn ich PutAxis nehme dann nimmt er auch Left-Handed....

------------------
Anfänger!

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 23. Apr. 2014 16:18    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 IAmTheFabian 10 Unities + Antwort hilfreich

Ich behaupte, bin mir hier aber wirklich nicht sicher, dass Du immer alle 3 Achsen ausrechnen und dann deren Vektorkoordinaten setzen musst.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 19. Mai. 2014 11:15    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

Ja ich habe über Drehmatrizen die Koordinatenvektoren ausrechnen müssen. Würde auch mit Quaternionen funktionieren. Man muss nur die richtige Drehreihenfolge beachten.

------------------
Anfänger!

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