Verfasst am: 20.07.2012, 23:12
Titel: Problem mit Billardprogramm
Guten Abend zusammen,
ich habe ein Problem bei der Programmierung eines Billardprogramms.
Es soll ein Billardtisch mit 9 Kugeln geplottet werden. Dabei soll nur die Richtung vom Benutzer eingegeben werden.
Zu berücksichtigen sind die Rollreibung und zweidimensionale Stöße zwischen den Kugeln und den Banden.
Bisher konnte ich zwei Plots mit je 9 Kugeln erzeugen. Der erste Plot stellt die Startposition dar und der zweite die Endposition.
Nach der Eingabe eines x- und y-Wertes befindet sich auch eine Kugel an der entsprechenden Position.
Die Berechnung/Simulation soll enden sobald die Geschwindigkeit v=0 ist oder einem vorgegebenen Wert entspricht.
Nun sind meine Kenntnisse in MATLAB leider nicht sehr tiefgründig da wir quasi ins kalte Wasser geschmissen wurden.... :-/
Ich soll irgendwie mit den Funktionen s(t), v(t) und a(t) klar kommen, weiterhin benötige ich ja eine Impuls- und Energieerhaltung.
Mir fehlt einfach der Ansatz das ganze zusammen zu packen
Hoffentlich versteht ihr mein Problem und könnt mir helfen...
Hier mal mein bisheriger Code (ich weiß es ist nicht viel)....
Code:
clearall;
%% Startpositionen der Kugeln
Pos=[12;42;4.251.5;4.252;4.252.5;4.51.25;4.51.75;4.52.25;4.52.75];
Kugelfarben=[111;100;010;000;001;110;011;101;00.50.5];
AnzahlKugeln=9;
%% grafische Ausgabe der Startpositionen subplot(2,1,1) for c=1:AnzahlKugeln;
hold on;
plot(Pos(c,1),Pos(c,2),'o','MarkerEdgeColor','k','MarkerFaceColor',Kugelfarben(c,:),'MarkerSize',10);
end
Bande=[0604]; %Festlegen der Tischgröße - xmin xmax ymin ymax
Tischfarbe=[00.50]; %Festlegen der Tischfarbe
axis(Bande); %Achsen auf die Werte von "Bande" skalieren
set(gcf,'color',[111]); %Hintergrundfarbe des function-Fensters setzen
set(gca,'Color',Tischfarbe,'xcolor',Tischfarbe,'ycolor',Tischfarbe);%,...
%'xtick',[],'ytick',[]);
title('Startposition der Kugeln')
%% Startrichtung der Stosskugel
xRichtung = input('Startwert (0-6) der Stosskugel in X-Richtung: ');
yRichtung = input('Startwert (0-4) der Stosskugel in Y-Richtung: ');
Richtung = [xRichtung; yRichtung]; %vom Benutzer eingegebener Richtungsvektor
xLaenge = abs((xRichtung-Pos(1,1))); %Betrag der Länge in x-Richtung
yLaenge = abs((yRichtung-Pos(1,2))); %Betrag der Länge in y-Richtung
phi = atan(yLaenge/xLaenge)*180/pi; %Winkel nach Pythagoras
%% neue Position
Pos_neu=Pos;
Pos_neu(1,:)=[xLaenge,yLaenge];
%% grafische Ausgabe der Endpositionen subplot(2,1,2) for c1=1:AnzahlKugeln;
hold on;
plot(Pos_neu(c1,1),Pos_neu(c1,2),'o','MarkerEdgeColor','k','MarkerFaceColor',Kugelfarben(c1,:),'MarkerSize',10) end
Bande=[0604]; %Festlegen der Tischgröße - xmin xmax ymin ymax
Tischfarbe=[00.50]; %Festlegen der Tischfarbe
axis(Bande); %Achsen auf die Werte von "Bande" skalieren
set(gcf,'color',[111]); %Hintergrundfarbe des function-Fensters setzen
set(gca,'Color',Tischfarbe,'xcolor',Tischfarbe,'ycolor',Tischfarbe);%,...
%'xtick',[],'ytick',[]);
title('Endpositionen der Kugeln')
Ist dein Problem, die richtigen physikalischen Gleichungen aufzustellen, welche bei so einem Stoß benötigt werden, oder geht es um die Umsetzung dieser Gl. in Matlab?
Du musst ja nicht nur eine Zielkoordinate definieren, sondern auch, mit welcher Kraft bzw. den Impuls vorgegeben, mit der die weiße Kugel gespielt wird. Massenangaben fehlen auch. Werden die Kugeln als Massenpunkt angenommen oder haben sie eine bestimmte Größe. Das würde die Sache ja noch erschweren, da sich die Kugeln ja nicht nur zentral treffen können und somit unterschiedliche Ablenkwinkel entstehen. Mal abgesehen von der Umsetzung in Matlab ist das schon keine einfache Aufgabe. Ist das eine Aufgabe aus einem Studienfach?
ja das ist eine Aufgabe aus dem Studium. Der genaue Aufgabentext lautet wie folgt:
Zitat:
Es werden 9 Kugeln mit einem einheitlichen, festen Durchmesser innerhalb eines Rechteckes (Seitenlängen a und b) zufällig verteilt. Eine Kugel wird zu Beginn der Simulation in eine vom Benutzer frei zu wählende Richtung beschleunigt. Die Simulation berechnet das weitere Verhalten, bis dass die letzte Kugel liegen bleibt (Geschwindigkeit unter einer festen Grenze). Die Kugeln dürfen in der Simulation als Punktmassen mit Ausdehnung betrachtet werden.
Die folgenden Phänomene sind zu berücksichtigen und zu modellieren:
zweidimensionale elastische Stöße zwischen den Kugeln
zweidimensionale elastische Stöße zwischen mit den Rändern
Rollreibung
Explizit vernachlässigt werden dürfen u.a.:
die Haftreibung
Spin und Drehimpuls
die beim echten Billard üblichen Löcher
Die Startkonfiguration und das Ergebnis der Simulation soll visualisiert werden und zwar als farbige Kreise auf einem rechteckigen grünen Untergrund (z.B. über eine Image-Umgebung). Ob diese Visualisierung während der Simulation oder danach auf Basis der Ergebnisse stattfindet, ist freigestellt.
Da ich weder in Physik noch in MATLAB so der Crack bin liegt mein Problem in beiden Bereichen.
Die Grundgleichungen, bspw.
kenne ich zwar aber mir fehlt einfach der Ansatz, das so zu modellieren und in MATLAB umzusetzen das es zu einer vernünftigen Lösung kommt.
Ich hoffe das mein Problem jetzt klarer ist :-/
Gruß, Guido
Edit: Ich möchte ja auch gar keine kompletten Lösungen mir geht es einfach darum zu verstehen wie das ganze angegangen werden muss. Also im Prinzip einfach nur eine Starthilfe, schließlich soll ich dabei ja noch was lernen
Dabei sollen alle v0=0 sein, außer die der Anstoßkugel. Weiterhin soll ich irgendwie mit m*a=Fk-Fr für die Beschleunigung a arbeiten.
Auch soll beim Start a=-Fr gelten... Mit Fr sei jeweils die Rollreibung gemeint.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.