Animation erstellen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Mathias
Beiträge: 6974
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 »

Das eine Ende dieser Stange beschreibt einen Kreis um das Zentrum meines Rades. (gx := cos(GKW) *(Mathe.RAJ), gy := sin(GKW) *(Mathe.RAJ)) Das andere Ende treibt meine Schwinge an.
Wen ich dich richtig verstehe, ist dies die grüne Stange in meinem Beispiel.
Die Blaue würde dann die Schwinge darstellen.
Dateianhänge
OpenGL_Rad.zip
(130.51 KiB) 64-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 »

Ja, das ist richtig. Leider wird es für mich zunehmend schwieriger Deinen Beispielen zu folgen.
Ich glaube, dass ich eine Auszeit brauche sonst begreife ich gar nix mehr...
Es tut mir leid wenn deine Mühen mich, momentan, nicht weiter bringen.
Vielleicht sollte ich doch Briefmarken sammeln...

Mathias
Beiträge: 6974
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 die Parameter der Schwingenberechnung besser kommentiert.
Vielleicht kannst du diese 1:1 übernehmen und in dein Programm einbauen.

Code: Alles auswählen

  TSchwinge = record
    Pleuel_W, Schwinge_W: single;
    RadExzenter: TPointF;
    procedure SetParam(Rad_W: single; Rad_R, Schwinge_x, Schwinge_y, Pleuel_L, Schwinge_L: single);
  end;  
 
function TTrigo.a_b_c_To_Alpha(a, b, c: single): single;
begin
  Result := arccos((-sqr(a) + sqr(b) + sqr(c)) / (2 * b * c));
  if Grad then begin
    Result := Result / pi * 180;
  end;
end;
 
function TTrigo.a_b_c_To_Beta(a, b, c: single): single;
begin
  Result := arccos((-sqr(b) + sqr(a) + sqr(c)) / (2 * a * c));
  if Grad then begin
    Result := Result / pi * 180;
  end;
end;   
 
 
procedure TSchwinge.SetParam(Rad_W: single; Rad_R, Schwinge_x, Schwinge_y, Pleuel_L, Schwinge_L: single);
(*  @Rad_W:           Winkel, des Excenter, des Rades.
    @Rad_R:           Distanz, Rad-Zentrum bis Excenter.
    @Schwinge_x / y:  Drehpunkt der Schwinge.
    @Pleuel_L:        Länge des Pleuels, vom Rad-exenter bis Schwinge-Ende, im Beispiel Verbindung der blauen und grünen Stange.
    @Schwinge_L:      Distanz, Drehpunkt-Schwinge bis Pleuelbefestigung.
*)
 
var
  c,           // Ist der Abstand zwischen dem Radexcenter und dem Zentrum der Schwinge.
  w: single;   // Ist der Winkel von C   ( Ister der Winkel von c, wen die eine Linie wäre.
begin
  RadExzenter := Trigo.Alpha_c_To_xy(Rad_W, Rad_R);
 
  c := sqrt(sqr(RadExzenter.y - Schwinge_y) + sqr(Schwinge_x - RadExzenter.x));
  w := arcsin((-RadExzenter.y + Schwinge_y) / c) / Pi * 180.0;
 
  Pleuel_W := Trigo.a_b_c_To_Alpha(Schwinge_L, Pleuel_L, c) + w;
  Schwinge_W := 180.0 - Trigo.a_b_c_To_Beta(Schwinge_L, Pleuel_L, c) + w;
end;   
Die beiden Trigo-Funktion beziehen sich auf ein "Beliebiges Dreieck", http://www.sengpielaudio.com/Rechner-dreieck.htm

Ich hoff das du jetzt besser durchblickst.
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 »

Vielen Dank!
Bitte sehe es mir nach wenn ich mich damit heute nicht mehr intensiv befasse. Ich muss erst einmal etwas Abstand zu dem Ganzen gewinnen.
Viel, wahrscheinlich zu viel, habe ich ausprobiert um an eigene Lösungen zu kommen. Morgen geht es weiter.
Die Berechnung des Schwingenwinkels ist bei mir bisher etwas umständlicher aber das Ergebnis war in Ordnung. Ich werde Deine, viel elegantere, Version gern umsetzen.
Zu dem Winkel kommen bei mir noch einige Parameter dazu. So gibt es ein "Backset" (Rücksetzung des Anlenkpunktes) und noch andere Späße die die Sache noch etwas komplizierter erscheinen lassen.
Meine Schwinge (Kulisse) ist nicht gerade und der, aus dem Schwingenausschlag resultierende, Weg zum Schieber muss auch passen.
Meine Animation soll außerdem 2 Steuerungsarten zeigen. Das bedeutet mehrfache Berechnung vieler Parameter. Es gibt also, neben OpenGL, noch viele andere Baustellen.
Wenn ich das aktuelle Problem, irgendwann, beherrschen sollte sehe ich aber kaum noch große Hindernisse mein Programmchen fertig zu stellen.
Um die mathematische Lösung zum Voreilhebel (war eine frühere Frage) kümmert sich, hoffentlich, ein Bekannter.

Ich wünsche Dir ein angenehmes Wochenende

Hannes

Mathias
Beiträge: 6974
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 »

Verstehe ich das richtig, das Gestänge inklusive der Schwinge dient dazu, den Hilfzylinder in die richtige Positon zu bringen ?
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 »

Genau so funktioniert das. Der Hilfszylinder wird "Schieber" genannt.
Das ist ein Thema das mich schon lange interessiert. Ich gehöre zu den Typen denen das Bauen und Konstruieren von Dampflokmodellen mehr Spaß macht als das Fahren damit.
Diese Homepage gehört einem Freund: http://www.echtdampfwelt.de/
Für Dich würde ich einen Sonderpreis heraus handeln. :P

Mathias
Beiträge: 6974
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 mir die Animation Walschaert nochmals angeguckt.
Der Schieber ist dem Haupt-Zylinder im ein wenig vorraus, egal in welche Richtung das Rad sich dreht.
Ausgenommen, wen die Stange genau in der Mitte der Schwinge steht. Ich nehme mal an, das es in der Praxis diese Position nicht gibt.
Oder sieht dies anders aus ? Oder hat das mit der Geschwindigkeit der Lok etwas zu tun ?

Abhängig von der Drehrichtung und der Position des Haupt-Zylinders, ist die Position des Schiebers vorgegeben.
Somit könnte man das Gestänge anpassen.
So viel ich mich erinnern mag, sind dir diese Schaltpunkte bekannt.

Dann sollte es nicht mehr so ein Problem sein die restlichen Stangen zu zeichnen.

Diese Homepage gehört einem Freund: http://www.echtdampfwelt.de/
Schöne Modelle, ich hatte auch mal eine Eisenbahn, aber momentan mache ich nichts mehr damit.

PS: Willst du diese Animation für die Homepage deines Freundes verwenden ?
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 »

Der Schieber ist dem Haupt-Zylinder im ein wenig vorraus, egal in welche Richtung das Rad sich dreht.
Das ist durchaus beabsichtigt und nennt sich "Voreilung".
Wenn die Schwinge in Mittelstellung (neutral) ist werden die Dampfkanäle zum Zylinder nicht mehr geöffnet und die Lok bleibt stehen.
Je weiter der "Schwingenstein" aus der Neutralstellung bewegt wird umso mehr werden die Kanäle geöffnet. Es kann mehr Dampf einströmen und die Lok wird schneller.
Die Richtung in der der Schwingenstein bewegt wird (oben oder unten) bestimmt Vorwärts- und Rückwärtsfahrt.
Mir sind alle Formeln bekannt um die Parameter einer solchen Steuerung (es gibt ja noch viele andere) zu bestimmen. Weil das aber recht umfangreich ist will ich mein Programm erstellen.

An die Möglichkeit die Animation (oder das ganze Programm) online zu verwenden hatte ich noch nicht gedacht. Könnte aber interessant sein. Momentan mache ich das nur für mich und, wenn es gut läuft, für einen kleinen Freundeskreis. Es gibt ja leider nicht so viele Narren wie mich die sich mit dieser Thematik beschäftigen.
Es freut mich Dein Interesse geweckt zu haben. Es gibt viele Leute die Lokomotiven für viele tausend € besitzen aber das was Du erkannt hast nicht verstehen.

Momentan sitze ich an der Umsetzung Deiner Schwingenberechnung. Muss etwas umbauen da meine Schwinge "unten" angelenkt wird.
Viele Parameter sind schon bekannt und vorgegeben: Schwingenposition(Drehpunkt),Exenter Radius, Länge Exenterstange, Abstand Schwingenanlenkung vom Drehpunkt

Mathias
Beiträge: 6974
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 »

Es gibt viele Leute die Lokomotiven für viele tausend € besitzen aber das was Du erkannt hast nicht verstehen.
Meinst du damit, das viele Leute Loks besitzen, aber nicht annähernd wissen, wie diese funktionieren ?
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 »

Genau das meinte ich. Mich haben die mechanischen Zusammenhänge schon immer interessiert. Ich finde es heute noch sehr schön wenn man einer alten Dampflokomotive zuschauen und den Mechanismus arbeiten sehen kann. Viele gibt es ja leider davon nicht mehr. Fast Alles was keinen Profit schafft verschwindet. Ich habe großen Respekt vor den Menschen die diese (und andere) alte Technik erhalten.
Wie ich bei einem Besuch im England feststellen konnte gibt es bei uns in Deutschland noch viel in dieser Richtung zu lernen.

Mathias
Beiträge: 6974
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 »

Viele gibt es ja leider davon nicht mehr.
Wir sind im Dorf an einer Dampfbahn-Stecke angeschlossen, ich höre jeden 2. Sonntag im Sommer Dampfloks pfeifen. :)
Wenn die Schwinge in Mittelstellung (neutral) ist werden die Dampfkanäle zum Zylinder nicht mehr geöffnet und die Lok bleibt stehen.
Wird somit die Geschwindigkeit und die Richtung einer Dampflok nur mit dem Schieber gesteuert ?

Aber, wen ich bei der Animation von Walschaert gucke, wird der Schieber immer noch voll bewegt, auch wen der Stein der Schwinge annähernd der Null-Stellung ist.
Ist dies ein Fehler, oder verstehe ich etwas falsch ?
An die Möglichkeit die Animation (oder das ganze Programm) online zu verwenden hatte ich noch nicht gedacht. Könnte aber interessant sein.
Das wäre ein Grund, das neue OpenGL anzugucken.
Bei WebGL (OpenGL, welches im Browser läuft), gibt es kein glBegin und glEnd mehr. Übrigens bei Android auch nicht mehr.
Wie ich bei einem Besuch im England feststellen konnte gibt es bei uns in Deutschland noch viel in dieser Richtung zu lernen.
Wieso, haben die Engländer andere Loks ? Oder sind die einfach die grösseren Sammler ?
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 »

Es gibt noch ein Dampfventil welches die Dampfzufuhr zu der "innerenSteuerung" (damit ist das Schiebergehäuse gemeint) drosseln kann.
Alles Andere wird vom Schieber geregelt. Das bedeutet, dass die Maschine auch ohne Ventil/Drosselung fahren würde. Der Schieber regelt die "Füllung" des/der Antriebszylinder mit Dampf.
Wenn die Steuerung in Mittelstellung ist legt der Schieber immer noch einen Weg zurück (Kolbenhub * Verhältnis der Abmessungen des Voreilhebels) aber die Dampfkanäle zu den Arbeitszylinder werden noch nicht frei gegeben. Erst die Bewegungskomponente von der Schwinge (Kulisse) verchiebt den Schieberweg so das eine Dampfzufuhr erfolgen kann.
Wenn in Deiner Nachbarschaft Dampflokomotiven unterwegs sind dann schau mal genauer hin. Man kann Einiges erkennen.
Ich war in England sehr angenehm überrascht von dem Angagement der Leute. Ich habe einige Museumsbahnen besuchen können. Die Technik und auch das Ambiente (Bahnhofsanlagen) waren blitzsauber und die Betreiber, zumeist ehrenamtlich, sehr angagiert und ausgesprochen freundlich. Das vermisse ich hier sehr. In der Schweiz wird auch sehr viel getan aber das kann ich, mangels eigener Erfahrung, nicht beurteilen.
Das mit dem neuen OpenGL hört sich interessant an aber ich muss jetzt erst einmal sehen wie ich so weiterkomme. Ich hab ja so schon genug Probleme. Jetzt hänge ich schon wieder bei der Umsetzung Deiner Schwingenberechnung.So sieht das nun bei mir aus:

Code: Alles auswählen

procedure TSteuerung.Schwingenwinkel(rw,rg,sx,sy,ex,sa:single);
          //rw=Winkel,rg=Radius Gegenkurbel,sx=Schwingenlager x,sy=Schwingenlager y,
          //ex=Exenterstange,sa=Anlenkung
      var   c,w,wa,zx,zy :single;
        begin
         zx := cos(gkw) *(rg);
         zy := sin(gkw) *(rg);
         // Abstand Schwingenlager - Treibachse
         SWTR:=sqrt(sqr(sx)+sqr(sy));
         // Abstand zwischen Exenter und Schwingenlager
         c := sqrt(sqr(zy - sy) + sqr(sx - zx));
         // Winkel TAZ - Schwingenlager
         w:= (arcsin((-zy + sy) / c)) / Pi * 180.0;
         // Winkel   (Pleuel_W)
         wa:=(arccos((-sqr(sa) + sqr(ex) + sqr(c)) / (2 * ex * c)))/ pi * 180;
         // Winkel Schwinge (Schwinge_W)
         SW:=180-arccos((-sqr(ex)+sqr(sa)+sqr(c))/(2*sa*c))-w;
 
(*  @Rad_W:           Winkel, des Excenter, des Rades.
    @Rad_R:           Distanz, Rad-Zentrum bis Excenter.
    @Schwinge_x / y:  Drehpunkt der Schwinge.
    @Pleuel_L:        Länge des Pleuels, vom Rad-exenter bis Schwinge-Ende, im Beispiel Verbindung der blauen und grünen Stange.
    @Schwinge_L:      Distanz, Drehpunkt-Schwinge bis Pleuelbefestigung.
*)
   { @Rad_W         = rw     = Winkel 0 - 360"
     @Rad_R         = rg     = 0,344
     @Schwinge x/y  = sx/sy  = 3,991/1,188
     @Pleuel_L      = ex     = 3,803
     @Schwinge_L    = sa     = 1,063    }
 

Mathias
Beiträge: 6974
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 »

Jetzt hänge ich schon wieder bei der Umsetzung Deiner Schwingenberechnung.
Kannst du nicht meine Funktionen 1:1 übernehmen, oder machen die etwas falsch ?
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 »

Deine Funktionen passen schon. Ich wollte Deine MyMath Unit komplett übernehmen aber da gibt es dann schon wieder Fehlermeldungen.
Jetzt werde ich die Funktionen einzeln übernehmen.
Ich brauch noch etwas Zeit um das umzusetzen. Es wird schon werden.

Mathias
Beiträge: 6974
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 mache auch noch Anpassungen, ich packe Variblen in einen record, sonst wird es immer unübersichtlicher.

Das sieht dann so aus:

Code: Alles auswählen

    TreibRad: record
      Radius:Single;
      Rad: TRad;
      ExzenterRadius: single;
    end;
 
    Schubstange: record
      ZylinderAbstand: single;
      Schubstange, Pleuel, ZylinderStange: TStange;
      Zylinder: TZylinder
    end; 
Die Längen der einzelnen Stange habe ich in die Classe TStange gepackt.
Somit wird der Code einiges übersichtlicher.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten