Pendelschwingung

Schnelle objektorientierte, kompilierende Programmiersprache.
songoku
Beiträge: 3
Registriert: Do Mär 28, 2013 9:29 pm

Pendelschwingung

Beitrag von songoku » Do Mär 28, 2013 9:36 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pendelschwingung

Beitrag von Xin » Fr Mär 29, 2013 9:31 am

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

songoku
Beiträge: 3
Registriert: Do Mär 28, 2013 9:29 pm

Re: Pendelschwingung

Beitrag von songoku » Fr Mär 29, 2013 11:04 am

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 ...

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Pendelschwingung

Beitrag von cloidnerux » Fr Mär 29, 2013 1:13 pm

Ganz generell hast du eine harmonische Schwingung, kannst also den Schwingprozess durch eine Formel dieser Art

Code: Alles auswählen

y = a*sin(b*x)
annähern.
Im Speziellen findest du hier die Formelnäherung für den Winkel des Mathematischen Pendels:

Code: Alles auswählen

phi(t) = phi_Amplitude * sin(sqrt(g/l) * t + phi_0)
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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

songoku
Beiträge: 3
Registriert: Do Mär 28, 2013 9:29 pm

Re: Pendelschwingung

Beitrag von songoku » Di Apr 30, 2013 10:14 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pendelschwingung

Beitrag von Xin » Mi Mai 01, 2013 11:12 am

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

doctog
Beiträge: 6
Registriert: Mi Mai 08, 2013 5:55 pm

Re: Pendelschwingung

Beitrag von doctog » Mi Mai 08, 2013 6:12 pm

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! :idea:

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".

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pendelschwingung

Beitrag von Xin » Do Mai 09, 2013 9:24 pm

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 :-D

Wenn Sie hier schon die Fragesteller verscheuchen, geben SIe hier wenigstens Antworten. :-D
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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

doctog
Beiträge: 6
Registriert: Mi Mai 08, 2013 5:55 pm

Re: Pendelschwingung

Beitrag von doctog » So Mai 12, 2013 5:08 pm

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.

doctog
Beiträge: 6
Registriert: Mi Mai 08, 2013 5:55 pm

Re: Pendelschwingung

Beitrag von doctog » So Mai 12, 2013 5:53 pm

Xin hat geschrieben: Wenn Sie hier schon die Fragesteller verscheuchen, geben SIe hier wenigstens Antworten. :-D
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.

Antworten