![]() |
(realistische) Dämpfung eines Pendels
Wie einige schon wissen, entwickle ich für eine kleine Belegarbeit eine grafische Pendelkomponente zur Simulation eines mathematischen Pendels. Dabei habe ich mich an Luckie's Pendelsimulation orientiert ... Danke schonmal an Luckie :zwinker:
Nun möchte ich die reale Pendeldämpfung bei maximaler Auslenkung entwickeln, finde dazu aber überhaupt keinen Ansatz. Hier der bisherige Quelltext:
Delphi-Quellcode:
Tatsache ist, dass das Intervall des Timers ständig geändert werden muss. Zur Berechnung fehlt mir aber irgendwie das physikalische Hintergrundwissen (:|), ihr könnt mir da aber bestimmt weiterhelfen :thuimb:
unit Pendel;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Math; type TPendel = class(TCustomControl) private { Private-Deklarationen } Timer: TTimer; Bitmap: TBitmap; Winkel, PendelLaenge: Integer; PendelLinks: Boolean; procedure TimerOnTimer(Sender: TObject); procedure PendelZeichnen(Winkel: Integer); protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner: TComponent); override; procedure Paint; override; function Gegenkathete(Winkel: Integer): Real; function Ankathete(Winkel: Integer): Real; published { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Pendel', [TPendel]); end; function TPendel.Gegenkathete(Winkel: Integer): Real; begin Result := Sin(DegToRad(Winkel)) * PendelLaenge; end; function TPendel.Ankathete(Winkel: Integer): Real; begin Result := Cos(DegToRad(Winkel)) * PendelLaenge; end; constructor TPendel.Create; begin inherited Create(AOwner); if Width = 0 then Width := 300; if Height = 0 then Height := 250; Bitmap := TBitmap.Create; Timer := TTimer.Create(Self); Timer.Interval := 50; Timer.OnTimer := TimerOnTimer; Timer.Enabled := True; end; procedure TPendel.TimerOnTimer(Sender: TObject); begin if (Width <> Bitmap.Width) or (Height <> Bitmap.Height) then begin Bitmap.Width := Width; Bitmap.Height := Height; PendelLaenge := Height - 50; end; if not PendelLinks then Inc(Winkel) else Dec(Winkel); if Winkel = 30 then PendelLinks := True; if Winkel = -30 then PendelLinks := False; Paint; end; procedure TPendel.PendelZeichnen(Winkel: Integer); begin Bitmap.Canvas.MoveTo(Width div 2, 25); // Pendelfaden Bitmap.Canvas.LineTo(Width div 2 + Round(Gegenkathete(Winkel)), Round(Ankathete(Winkel))); // Pendelkörper Bitmap.Canvas.Brush.Color := clBlack; Bitmap.Canvas.Brush.Style := bsSolid; Bitmap.Canvas.Ellipse(Width div 2 + Round(Gegenkathete(Winkel)) - 20, Round(Ankathete(Winkel)) - 20, Width div 2 + Round(Gegenkathete(Winkel)) + 20, Round(Ankathete(Winkel)) + 20); end; procedure TPendel.Paint; begin inherited Paint; // Pendel auf Bitmap im Speicher zeichnen PendelZeichnen(Winkel); // Bitmap auf Canvas der Komponente kopieren BitBlt(Canvas.Handle, 0, 0, Width, Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY); // Bitmap mit weiß überschreiben Bitmap.Canvas.Brush.Color := clWhite; Bitmap.Canvas.Rectangle(0, 0, Width, Height); Bitmap.Canvas.Brush.Color := clBlack; end; end. |
Re: (realistische) Dämpfung eines Pendels
Das sind die Vorbereitungen die wir in der Uni bekommen haben...
Da steht alles drin was Du brauchen solltest... ![]() |
Re: (realistische) Dämpfung eines Pendels
Du veränderst mit jedem Timer-Aufruf den Winkel um 1? So ein Ansatz dürfte nicht funktionieren, da der Timer nicht "echtzeitfähig" ist.
Besser: Im Timer den Zeitablauf seit Start bestimmen und daraus den Winkel berechnen. Als Ansatz könnte dienen, das die Schwingungszeit eines Pendels ja konstant ist. Wie Du aber die Dämpfung rein rechnen könntest, weiß ich nicht. [edit]Da war wohl jemand schneller und hatte gleich die Lösung zur Hand :zwinker: [/edit] |
Re: (realistische) Dämpfung eines Pendels
mmh ... hab mir das pdf-file zwar durchgelesen, finde dort aber keinen hinweis für die lösung meines problems. am besten wäre wirklich eine funktion, der die zeit in sekunden übergeben wird und die als funktionsergebnis den entsprechenden winkel liefert (pendellänge und fallbeschleunigung/erdbeschleunigung spielen natürlich auch eine rolle). ist sowas möglich?
EDIT: übrigens soll das pendel nicht gedämpft sein, sondern einfach eine dynamische winkelgeschwindigkeit besitzen (-> mathematisches pendel), sprich die geschwindigkeit nimmt bei maximaler auslenkung ab. |
Re: (realistische) Dämpfung eines Pendels
Also für ein mathematisches Pendel reicht doch ne einfache Sinus-Funktion für die Winkelbestimmung...???
Aber je realistischer das ganze werden soll desto mehr wirst Du Dich wohl mit dem Hauptsatz der Kinetik beschäftigen müssen: Ekin=EPot Ekin ist die kinetische Energie(Also die Geschwindigkeit in diesem Fall) EPot ist die potentielle Energie(Also die Höhe mal masse) In den oberen Wendepunkten ist Epot maximal und in der Mitte Ekin! Dann noch die Dämpfung als Reibung reinrechnen und schon siehts schön aus... |
Re: (realistische) Dämpfung eines Pendels
Nun ja. Wo druch wird denn das Pendel gedämpft? Durch den Luftwiderstand, durch die Reibung am Aufhängepunkt. Und damit sind wir dann bei Differenzialgleichungen gelandet, um eine realistische Dämpfung hinzubekommen.
Ein mathematisches Pendel funktioniert ja so, dass es am Punkt der maximalen Amplitude die Geschwindigkeit null hat. Mist, jetzt habe ich den Faden verloren... :roll: |
Re: (realistische) Dämpfung eines Pendels
Hallo zusammen,
so wie ich Wheelie verstanden habe, möchte er nur ein simples (mathematische Pendel) ohne gedämpfte Schwingung, sondern nur mir dynamischer Geschwindigkeit (also abhängig von der Auslenkung). atreju2oo0 hatte schon recht mit dem Sinus. Das sieht prinzipiell folgendermaßen aus: Auslenkung = sin(Zeit*2*pi)*MaxWinkel oder Auslenkung = sin(Zeit*360)*MaxWinkel MaxWinkel= maximale Auslenkung in Grad Zeit = Periodendauer Auslenkung = Auslenkungswinkel, abhägig von der Zeit Ich hoffe das hilft. Have fun, em-sigma |
Re: (realistische) Dämpfung eines Pendels
... und hier noch ein kleiner Zusatz:
möchte man wirklich ein Pendel mit gedämpfter Schwingung, wird noch eine Exponential-Funktion benötigt. Die Formel sieht dann folgendermaßen aus: Auslenkung = sin(Zeit*2*pi)*exp(Zeit*Stärke)*MaxWinkel Stärke < 0 : Schwingungsamplitude wird kleiner Stärke > 0 : Schwingungsamplitude wird größer Auf diese Weise wird aus dem mathematischen Pendel ein realistisches Pendel. Viel Spaß, em-sigma |
Re: (realistische) Dämpfung eines Pendels
Liste der Anhänge anzeigen (Anzahl: 1)
Hi!
Ich habe mal alle drei Gleichungen, die man bei einer gedämpften Schwingung erhalten kann, zusammengefasst und auch aufgeschrieben, wie man über die Lösung der DGL daran kommt. MfG Peter //edit: Irgendwie komme ich mit Aktualisieren des Attachments nicht klar :? |
Re: (realistische) Dämpfung eines Pendels
Zitat:
Gruß, Tom |
Re: (realistische) Dämpfung eines Pendels
Jetzt schwingt das Pendel endlich einwandfrei :thuimb: Danke euch allen :dp:
|
Re: (realistische) Dämpfung eines Pendels
Gibt es dein Pogramm auch irgendwo fertig mit Source?
|
Re: (realistische) Dämpfung eines Pendels
Liste der Anhänge anzeigen (Anzahl: 1)
Naja, fertig ist es noch lange nicht, aber ich kann den jetzigen Stand der Dinge veröffentlichen. Das ganze soll mal eine "pädagogische Komponente" werden, mit deren Hilfe die Info-/Physiklehrer ihren Schülern das Pendel begreiflich machen können. Der Lehrer passt sich die Komponente nach seinen Wünschen an und verändert vor seinen staunenden Schülern die verschiedenen Parameter :zwinker:
|
Re: (realistische) Dämpfung eines Pendels
Aber die Dämpfung ist da noch nicht drin, oder?
|
Re: (realistische) Dämpfung eines Pendels
Ne, die soll laut meinem Lehrer gar nicht zur Verfügung stehen. Danke dir trotzdem auch für deine Mühen!
|
Re: (realistische) Dämpfung eines Pendels
@Wheelie
wenn du schon die *.res nicht mitlieferst, dann macht es sich auch gut, wenn auch nocht "{$R *.res}" aus der *.dpr gelöscht wird. Und die *.cfg wird von den meisten auch auch nicht benötigt (z.B. ist das darin angegebene Verzeich "c:\programme\borland\delphi7\Projects\Bpl" bei mir nicht vorhanden - hab alles auf K:/...) |
Re: (realistische) Dämpfung eines Pendels
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz