Seite 1 von 2
Pendelschwingung
Verfasst: Do Mär 28, 2013 9:36 pm
von songoku
Hallo,
ich muss eine Pendel programieren welches sich langsam abklingt ...
ich habe es geschafft dass sich die pendel um 360 grad dreht ...
zu nächst möchte ich dass es sich von einem anfangswinkel auf einen zweiten winkel bewegt und auf die startposition zurück kommt ...
habe das mit einer schleife versucht aber klappt nicht

((
ich bitte um hilfeee
mein porogramm :
Code: Alles auswählen
nclude <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <string.h>
#include <stdio.h>
#include "Prototypen.h"
#include "Projekt39res.h"
#include <math.h>
BOOL Text_schreiben (HWND hwnd)
{
HDC hdc;
PAINTSTRUCT ps;
int farbmischung;
HBRUSH pinsel;
int x, y;
int radius = 10;
int r=150;
static double winkel = 0.5;
double delta_winkel = 0.01;
x = 300+r * cos (winkel);
y = 50+r * sin (winkel);
do
{
winkel= winkel+delta_winkel;
}
while(winkel <=3);
InvalidateRect (hwnd, NULL, TRUE);
hdc = BeginPaint(hwnd, &ps);
farbmischung = RGB(255, 0, 0);
pinsel = CreateSolidBrush(farbmischung);
SelectBrush(hdc,pinsel);
SetViewportOrgEx(hdc, 100,100,NULL);
Ellipse(hdc, (int) x - radius, y - radius, x + radius, y + radius);
MoveToEx (hdc, 300, 50, NULL);
LineTo (hdc, x, y);
Rectangle(hdc, 200, 40, 400, 50);
DeleteObject(pinsel);
EndPaint(hwnd, &ps);
UpdateWindow(hwnd);
return 0;
ich danke jetzt schon für die hilfe
Edit by Xin: Codetags hinzugefügt
Re: Pendelschwingung
Verfasst: Fr Mär 29, 2013 9:31 am
von Xin
songoku hat geschrieben:Hallo,
ich muss eine Pendel programieren welches sich langsam abklingt ...
ich habe es geschafft dass sich die pendel um 360 grad dreht ...
zu nächst möchte ich dass es sich von einem anfangswinkel auf einen zweiten winkel bewegt und auf die startposition zurück kommt ...
habe das mit einer schleife versucht aber klappt nicht

((
ich bitte um hilfeee
mein porogramm :
Code: Alles auswählen
static double winkel = 0.5;
double delta_winkel = 0.01;
x = 300+r * cos (winkel);
y = 50+r * sin (winkel);
do
{
winkel= winkel+delta_winkel;
}
while(winkel <=3);
Warum
winkel <= 3?
Ich werfe mal den ganzen WinAPI-Kram raus und wir stellen uns vor, dass das eine beliebige Funktion ist, die das Pendel ausrechnet. Dafür einen Link zu Wikipedia dazu (
physikalisches Pendel).
Verstehst Du die Formel mit den Vektoren?
Re: Pendelschwingung
Verfasst: Fr Mär 29, 2013 11:04 am
von songoku
ja das mit 3 war nur ein versuch ... ich habe die formeln angeschaut ich weis aber nicht wie ich das in meinem Programm einbaun kann ... kanns du mal ein beispiel machen in meinem programm ...
meine idee war bissher eine schleife einzubaun in dem der winkel bei jedem durchlauf abnimmt ..
bin halt wirlich noch ein anfänger ist meine erste aufgabe
vielen dank für deine hilfe ...
ich muss in zwei wochen das abgeben ...
Re: Pendelschwingung
Verfasst: Fr Mär 29, 2013 1:13 pm
von cloidnerux
Ganz generell hast du eine harmonische Schwingung, kannst also den Schwingprozess durch eine Formel dieser Art
annähern.
Im Speziellen findest du
hier die Formelnäherung für den Winkel des Mathematischen Pendels:
Eine Dämpfung lässt sich in der Regel durch
beschreiben.
Wenn du das gut Kombinierst und deine Zeit auf deine Frames anpasst, sollte es wunderbar funktionieren.
Re: Pendelschwingung
Verfasst: Di Apr 30, 2013 10:14 pm
von songoku
Hallo nochmals, also ich habe es jetzt geschafft meine Pende labkligen zu lassen

)
aber jetzt muss parallel zu meiner Pendel eine Sinusfunktion zeichen lassen
hat da jemand eine Idee wie ich das mache ???
ich glaube ich muss immer punkte berechene lassen und die punkte miteindar verbinden doch das problem ist ja wenn
ich das mit eienm TIMER mache das meine Linie zuvor gelöscht wird.
mein porgramm:
Code: Alles auswählen
HDC hdc;
PAINTSTRUCT ps;
double amplitude;
double g = 9.81;
static double t = 0;
double delta_t= 0.1;
amplitude = 0.5;
t = t + delta_t;
int farbmischung;
HBRUSH pinsel;
static int i = 1;
int j;
int x, y;
int radius = 10;
int r=150;
static double winkel1;
winkel1= 90.0/180*PI+1.0*amplitude*sin(sqrt(1.0*g/r)*t + amfangswinkel)*exp(-lamda*t/100)*2;
x = 300+r * cos (winkel1);
y = 50+r * sin (winkel1);
InvalidateRect (hwnd, NULL, TRUE);
hdc = BeginPaint(hwnd, &ps);
farbmischung = RGB(255, 0, 0);
pinsel = CreateSolidBrush(farbmischung);
SelectBrush(hdc,pinsel);
SetViewportOrgEx(hdc, 100,100,NULL);
double k = 0;
double delta_k= 0.1;
k = k+delta_k;
double h = 0;
double delta_h= 0.1;
h = h+delta_h;
Ellipse(hdc, (int) x - radius, y - radius, x + radius, y + radius);
MoveToEx (hdc, 300, 50, NULL);
LineTo (hdc, x, y);
Rectangle(hdc,200, 40, 400, 50);
MoveToEx (hdc, 500, 200, NULL);
LineTo (hdc, 900,200 );
MoveToEx (hdc, 510, 210, NULL);
LineTo (hdc, 510,50 );
for (j = 0; j<=i;j++) HIER HABE ICH DAS VERSUCHT !!! IST ABER FALSCH !!!!
{
MoveToEx (hdc, 510+delta_t, 200, NULL);
LineTo (hdc, 510+delta_t,y );
}
BITTE DRINGEND UM HILFE
Edit by cloidnerux Code Tags Hinzugefügt
Re: Pendelschwingung
Verfasst: Mi Mai 01, 2013 11:12 am
von Xin
Es ist relativ schwer, sich vorzustellen, was Du da zeichnest.
Zum einen könntest Du ein vollständiges Projekt (ohne pdb etc.) ausliefern, dann könnte man sich das auch mal ansehen.
Ich sehe, dass Du Ellipsen zeichnest, also stelle ich mir vor, dass Du den Weg von oben gesehen malst.
Als nächstes kommt bei mir aber auch dazu, dass ich das Pendel vor etwa 18 Jahren zuletzt berechnen musste, das ganze also auch nicht unbedingt präsent im Kopf habe. ^^
Was heißt Parallel dazu eine Sinusfunktion zu zeichnen. Ich würde jetzt mal stur sin(value) zeichnen, wenn Du das so schreibst. Du sollst vermutlich den Ausschlag des Pendels berechnen.
Womit ich schon wieder die Frage haben, ob Du X oder den Y Ausschlag zeichnen möchtest oder die Distanz zum Mittelpunkt der Ellipse.
Kurz: Was möchtest Du denn?
Re: Pendelschwingung
Verfasst: Mi Mai 08, 2013 6:12 pm
von doctog
Also... wenn ich das richtig sehe, dann habe ich Ihnen die Projektaufgabe gegeben, damit SIE als angehender Maschinenbauingenieur das Programmieren in C trainieren! Sie müssen mir Ihre Lösung bei der Projektabgabe erklären und ihre Programmierfähigkeit unter Beweis stellen.
VERGESSEN SIE DAS NICHT! Klar dürfen Sie Oma und Opa um Hilfe bei der Programmierung bitten

. Doch SIE müssen es verstanden haben, was Sie mir abgeben und präsentieren.
Gern dürfen Sie natürlich auch in die EDV-Besprechungsstunden kommen. Dafür sind diese da. Ausserdem steht Ihnen ein erfahrener studentischer Tutor zur Seite.
Ich denke, das Hauptproblem ist nicht das Programmieren. Es wird vermutlich das Strukturieren der Aufgabe sein. Machen Sie kleine Programmpakete, testen diese und bauen so nach und nach das Gesamtsystem zusammen.
Viel Erfolg!
Ach ja: Es kommt mir nicht auf die physikalisch exakte Lösumg mit der Dämpfung an. Sie könnten beispielsweise je Pendelausschlag ein Delta beim nächsten Ausschlag abziehen und so ein Abklingen "simulieren".
Re: Pendelschwingung
Verfasst: Do Mai 09, 2013 9:24 pm
von Xin
doctog hat geschrieben:Also... wenn ich das richtig sehe, dann habe ich Ihnen die Projektaufgabe gegeben, damit SIE als angehender Maschinenbauingenieur das Programmieren in C trainieren!
Irgendwie fällt mir
das dazu ein
Wenn Sie hier schon die Fragesteller verscheuchen, geben SIe hier wenigstens Antworten.
doctog hat geschrieben:Klar dürfen Sie Oma und Opa um Hilfe bei der Programmierung bitten

"Junger Mann" kommt heutzutage ja leider viel zu selten, aber Opa is' jetzt neu
doctog hat geschrieben:Ach ja: Es kommt mir nicht auf die physikalisch exakte Lösumg mit der Dämpfung an. Sie könnten beispielsweise je Pendelausschlag ein Delta beim nächsten Ausschlag abziehen und so ein Abklingen "simulieren".
Was ist denn für Ihren Unterricht an fachlichem Wissen in C erforderlich, falls man das C-Tutorial passend erweitern kann - womit jetzt nicht Beispiellösungen für Ihre Aufgaben gemeint sind.
Re: Pendelschwingung
Verfasst: So Mai 12, 2013 5:08 pm
von doctog
Das C-Tutorial ist schon klasse und wirklich gut erklärt. Wer C lernen möchte, kann hier prima Unterstützung finden.
Zur Frage: Was ist denn für den Unterricht an fachlichem Wissen in C erforderlich? Es sind die einfachsten Basics einer Programmiersprache (hier C), z.B. Felder erzeugen, Schleifen anwenden, in Dateien schreiben, Strukturen aufbauen, ...
In erster Linie wird aber trainiert, wie ein Programm logisch abläuft. Dieses Verständnis fehlt - nach meiner Erfahrung - vielen Anfängern. Beispiel: Eine Datei muss erst geöffnet werden, bevor Daten hineingeschrieben werden können!
Auch im obigen Fall liegt das Problem nicht in der Programmiersprache, sondern im logischen Zerlegen der Aufgabe in die einzelnen Arbeitsschritte. Hier fehlte es am Verständnis, dass eine aus einzelnen kurzen Linienzügen aufgebaute Kurve nur dann sichtbar ist, wenn beim Zeichnen des letzten Elementes die davor gezeichneten Teilsegmente nicht gelöscht wurden.
Konkret zum Programmsegment, das oben dargestellt wurde: Es wird eine for-Schleife verwendet, die mit dem Laufindex j von 0 bis zum Wert i wiederholt durchlaufen werden soll. i steht im Programm auf 1 und wird offensichtlich nicht verändert. Es wird also immer nur ein einziges gerades Linienelement gezeichnet.
Re: Pendelschwingung
Verfasst: So Mai 12, 2013 5:53 pm
von doctog
Xin hat geschrieben:
Wenn Sie hier schon die Fragesteller verscheuchen, geben SIe hier wenigstens Antworten.
Sorry, wenn das so ankam. Ich wollte lediglich dem Fragesteller konkret mitteilen, dass es nicht ausschliesslich auf die Lösung seiner Programmieraufgabe ankommt. Er soll mit seinem Programm vielmehr die Basics von C trainieren, denn diese prüfe ich ab.