Animation erstellen
-
- 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
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.
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
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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
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
-
- 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
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.
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.

- 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
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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)
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
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));
"Abstand" ist die Differenz Treibachszentrum - Schwingenlager.
Gruß
Hannes
-
- 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
4:17 um diese Zeit schlafe ich immer noch, um diese Zeit aufzusehen wäre mir ein bisschen zu früh.Zu gern hätte ich den kleinen Fehler in Deinem Beispiel gefunden aber nun (man beachte die Uhrzeit) muss ich passen.
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;
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;
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
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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 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)
-
- 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
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
Mit Java und C/C++ sehe ich rot
-
- 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
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.
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
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Hallo Mathias,
Du bist ja unermüdlich!
Leider läuft das bei mir nicht:
Gruß
Hannes
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
Hannes
-
- 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
Code: Alles auswählen
type
TPointf=record
x, y:single;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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
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
-
- 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
Das ist mir auch ein wenig zu komplex, für so etwas muss man fast die UNI besucht haben.Vielleicht kannst Du mir einen Rat geben wie man das angeht ?
Hier komme ich mit meinen Trigonometrie-Kenntnissen nicht mehr weiter.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
Danke. Mir geht es ähnlich. Muss mich mal nach Hilfe umsehen.
-
- 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
Wen ich dies angucke, sieht recht kompliziert aus.
https://upload.wikimedia.org/wikipedia/ ... ersing.gif
Ich habe aber trotzdem noch etwas probiert.
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
Mit Java und C/C++ sehe ich rot
Re: Animation erstellen
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..
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..