Animation erstellen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Ich habe mein Rad unterdessen in eine Classe verbaut und habe dazu Display-Listen verwendet.

Beachte die Unit Rad und die procedure Draw.
Die Aufwendigen und Zeit fressenden Sin/Cosinus-Berechnung hast du nur einmal am Programm Anfang.
Zum rendern drehst du nur noch die Matrix und rufst die Liste auf.

Tönt etwas kompliziert, ist aber recht einfach.
Dateianhänge
OpenGL_Rad.zip
(128.2 KiB) 48-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,
Dein "Rad" hat mich schwer beeindruckt nur, wenn ich ehrlich bin, kann ich da noch nicht ganz folgen.Ich würde mich zu gern an Deinem Beispiel bedienen nur plagen mich jetzt andere Probleme. So will
meine Schwinge gar nicht das machen was sie soll. Das liegt aber nicht am OpenGL sondern an den Berechnungen zum Schwingenwinkel. Der Kram hatte schon einmal funktioniert. Jetzt, nachdem ich
alles umgebaut habe läuft das nicht mehr so wie gewollt. So habe ich auch den Nullpunkt nach links unten verschoben um nicht immer umdenken zu müssen. (Ich bin halt viele Jahre CAD gewohnt).
Der Drehwinkel des Rades ist invertiert und das hat Einfluss auf einige Berechnungen. Die ich leider alles Andere als ein Mathematiker bin fällt es mir nicht leicht Fehler zu finden.
Wenn Alles so läuft wie gewollt sehe ich mir Dein Beispiel genauer an und versuch es zu verstehen.
Bin halt wirklich nur ein Anfänger mit wenig Erfahrung aber es wird, nicht zuletzt durch Deine Unterstützung, langsam besser.

Herzlichen Dank

Hannes

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Ich habe auch noch mit einer Schwinge gebastelt, aber leider hat es noch einen kleinen Fehler.
Der Fehler ist dort sichtbar, wo die beiden Pleuel oben zusammen kommen.
Je kleiner ich den Radius der Nabe am Rad wähle, desto kleiner ist der Fehler sichtbar.

Irgendwie sieht es nach einem Rundungsfehler aus, ich hatte mal versuchsweise von Single auf Double gewechselt, aber es ist kein Unterschied feststellbar.
Vielleicht hat es auch ein Fehler in der Formel.

Aber wer weis, vielleicht sieht du noch was. :wink:
Dateianhänge
OpenGL_Rad.zip
(129.22 KiB) 46-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,
ich habe mir mal etwas Zeit genommen um Deinen Code zu verstehen. Fast ohne Kommentare versehen war das für mich, als Einsteiger, nicht einfach.
Es hat sich aber gelohnt. Viele neue Möglichkeiten habe ich dabei entdeckt. Zu gern hätte ich den kleinen Fehler in Deinem Beispiel gefunden aber nun (man beachte die Uhrzeit) muss ich passen.
An einen Rundungsfehler glaube ich nicht. Interessant ist, dass der Fehler im Nulldurchgang der Y-Achse des Antriebswinkels weg ist. Je mehr sich der Exenter in X-Richtung bewegt umso größer wird er.
Auf die Gefahr hin ein Schmunzeln zu erzeugen, hier meine Formel zur Berechnung des Schwingenwinkels:
(Hab ich extra aufgelöst um den Weg zu zeigen)

Code: Alles auswählen

                  // Schwingenwinkel Anlenkung
  a:=Mathe.RAJ;      //0.334;    // Kurbel
  b:=Mathe.RAK;      //3.773;    // Exenterstange
  c:=IAH;            //1.063;    // Anlenkung
  d:=SWAATR;         //4.16;     // Abstand
  e:=SQRT(a**2+d**2-2*a*d*cos(Phi));
  alpha1:=(a/e)*sin(Phi);
  alpha2:=arccos((c**2+e**2-b**2)/(2*e*c));
  SWWA:=(Pi-(alpha1+alpha2));                             
Ich habe aus dem Gelenkviereck zwei Dreiecke gemacht um ans Ziel zu kommen. "e" ist ein Zwischenwert. Phi ist der Antriebswinkel.
"Abstand" ist die Differenz Treibachszentrum - Schwingenlager.

Gruß

Hannes

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Zu gern hätte ich den kleinen Fehler in Deinem Beispiel gefunden aber nun (man beachte die Uhrzeit) muss ich passen.
4:17 um diese Zeit schlafe ich immer noch, um diese Zeit aufzusehen wäre mir ein bisschen zu früh.
Aber macht nichts, ich habe den Fehler jetzt auf Anhieb gefunden.
Eine Zeile muss abgeändert werden, ich habe für die Winkel-Berechnung eine falsche Länge genommen.

Code: Alles auswählen

//  w := arcsin(-zy / (l - zx)) / Pi * 180.0;
  w := arcsin(-zy / c) / Pi * 180.0; 
Unter der Berechnung habe ich noch ein Teleskop-Pleuel eingebaut, der hatte mir gezeigt, das mit der Winkelberechnung etwas nicht stimmte.

Code: Alles auswählen

  // Teleskop-Pleuel
 
  glPushMatrix;
  TestSchwinge:=TStange.Create(radR/48,c);
  glTranslatef(zx,zy,0);
  glRotatef(w,0,0,1);
 
  TestSchwinge.Draw;
 
  TestSchwinge.Free;
  glPopMatrix; 
In deinem Code habe ich etwas komisches entdeckt, ein ** in denke dies sollte hoch heissen.
Ich habe die Unit Math angeschaut, es ist dazächlich für Exponenten-Berechnung.
Die habe ich in Pascal noch nie gebraucht, ausser hoch 2 und da kann man Sqr nehmen, darum kannte ich es noch nicht.
In GW-Basic kannte ich es mit x ^ y.
Eigentlich müsste man die Wiki anpassen, da ist Pascal nicht gelistet. https://de.wikipedia.org/wiki/Potenz_(Mathematik)
Zuletzt geändert von Mathias am Fr 4. Mär 2016, 20:09, insgesamt 1-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5152
Registriert: Fr 8. Apr 2011, 09:01

Re: Animation erstellen

Beitrag von wp_xyz »

Mathias hat geschrieben:In deinem Code habe ich etwas komisches entdeckt, ein ** in denke dies sollte hoch heissen.
Ich habe die Unit Math angeschaut, es ist dazächlich für Exponenten-Berechnung.
Die habe ich in Pascal noch nie gebraucht, ausser hoch 2 und da kann man Sqr nehmen, darum kannte ich es noch nicht.
In GW-Basic kannte ich es mit x ^ y.
Eigentlich müsste man die Wiki anpassen, da ist Pascal nicht gelistet. https://de.wikipedia.org/wiki/Potenz_(Mathematik)
Das ist richtig: 5**3 ist dasselbe wie power(5,3). Dazu gabe es übrigens eine interessante Diskussion im englischen Forum: Was ist -2**2? -4 oder 4? Etwa die Hälfte der User plädiert für 4 (so wie Excel), die andere Hälfte für -4 (so wie fpc). Daher unbedingt bei solchen Konstrukten Klammern setzen ( (-2)**2 oder -(2**2) ), oder die Funktion power() verwenden!.

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Die Wiki habe ich vorhin angepasst, ich hoffe das ich nichts falsches geschrieben habe.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Ich habe für die Schwingen-Berechnung eine record gebaut.
Ich hoffe der Code ist nun verständlicher.

Der Clou, es hat sogar eine Doppel-Schwinge.
Dateianhänge
OpenGL_Rad.zip
(129.88 KiB) 62-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,
Du bist ja unermüdlich!
Leider läuft das bei mir nicht:

Code: Alles auswählen

      Projekt kompilieren, Ziel:project1.exe: Exit code 1, Fehler: 2  mymath.pas(17,18) 
                                          Error: Identifier not found mymath.pas(17,25)
                                          Error: Error in type  definition
Gruß
Hannes

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Code: Alles auswählen

type
  TPointf=record
    x, y:single;
  end;
Da ist wohl mein fpc zu neu, so sollte es gehen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Hallo Mathias,
jetzt funktioniert es. Danke.
Deinen Weg zur Berechnung hatte ich schon im letzten Beispiel, nach eingem Suchen, heraus gefunden.
Die "Hebelei" ist interessant anzuschauen. Da hätte ich schon wieder Ideen..
Ich habe mir jetzt den "Voreilhebel" (engl:Combination lever) als Nächstes in meiner Animation vorgenommen.
Das ist eine Stange mit 3 Gelenken. Mit diesem Hebel 2 Bewegungskomponenten zusammen gefasst.
Hier ist ein(uraltes) Programm welches von einem Hobbyisten aus Canada geschrieben wurde: https://www.dropbox.com/s/is45s5s0qh9bc ... T.rar?dl=0
Es zeigt im Prinzip auch meine Animation und man kann, hoffentlich, auch den Voreilhebel erkennen. (das schwingende Teil vor Zylinder und Schieber was unten die Bewegung des Kolbens und am mittleren Lager die Bewegung der Schieberstange zusammenfasst)
Ich habe schon einige Zeit vergeblich damit zugebracht das zu animieren. Die notwendigen Abmessungen und Abstände habe ich alle aber wie kann man das umsetzen? Das Ding hat ja keinen festen Punkt.
Einzig vom oberen Lager ist bekannt, dass es auf einer Geraden zur x-Achse läuft.
Vielleicht kannst Du mir einen Rat geben wie man das angeht ?

Einen schönen Sonntagabend

Hannes

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Vielleicht kannst Du mir einen Rat geben wie man das angeht ?
Das ist mir auch ein wenig zu komplex, für so etwas muss man fast die UNI besucht haben.
Hier komme ich mit meinen Trigonometrie-Kenntnissen nicht mehr weiter.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Danke. Mir geht es ähnlich. Muss mich mal nach Hilfe umsehen.

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Animation erstellen

Beitrag von Mathias »

Wen ich dies angucke, sieht recht kompliziert aus.

https://upload.wikimedia.org/wikipedia/ ... ersing.gif

Ich habe aber trotzdem noch etwas probiert.
Dateianhänge
OpenGL_Rad.zip
(130.01 KiB) 55-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Johannes
Beiträge: 174
Registriert: Sa 9. Jan 2016, 09:30

Re: Animation erstellen

Beitrag von Johannes »

Ich bin immer wieder erstaunt wie schnell Du solche Änderungen fertig bekommst!
Ich werde es mal so versuchen: Wenn man den Einfluss der Schwinge weglässt, also das mittlere Lager des Voreilhebel fixiert, müsste eine Lösung per Trigonometrie möglich sein.
Die Abstände der Lager (Anlenkpunkte) habe ich. Die Länge der kleinen Verbindungsstange unten (Lenkerhebel/Union Link) ist bekannt und der Hub der damit auf das untere Lager übertragen wird auch.
Wenn ich das gebacken bekomme sehe ich weiter.
Schon die Trigonometrie bringt mich oft an meine Grenzen. Abi und Uni hat man mir damals, aus politischen Gründen, nicht erlaubt. Aber das gehört hier nicht her..

Antworten