WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Problem mit Billardprogramm

 

gdow86
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 20.07.2012, 23:12     Titel: Problem mit Billardprogramm
  Antworten mit Zitat      
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 Sad

Hoffentlich versteht ihr mein Problem und könnt mir helfen...

Hier mal mein bisheriger Code (ich weiß es ist nicht viel)....
Code:
clear all;
%% Startpositionen der Kugeln
Pos=[1 2;4 2;4.25 1.5;4.25 2;4.25 2.5;4.5 1.25;4.5 1.75;4.5 2.25;4.5 2.75];
Kugelfarben=[1 1 1;1 0 0;0 1 0;0 0 0;0 0 1;1 1 0;0 1 1;1 0 1;0 0.5 0.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=[0 6 0 4];  %Festlegen der Tischgröße - xmin xmax ymin ymax
Tischfarbe=[0 0.5 0];      %Festlegen der Tischfarbe
axis(Bande);    %Achsen auf die Werte von "Bande" skalieren
set(gcf,'color',[1 1 1]);   %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=[0 6 0 4];  %Festlegen der Tischgröße - xmin xmax ymin ymax
Tischfarbe=[0 0.5 0];      %Festlegen der Tischfarbe
axis(Bande);    %Achsen auf die Werte von "Bande" skalieren
set(gcf,'color',[1 1 1]);   %Hintergrundfarbe des function-Fensters setzen
set(gca,'Color',Tischfarbe,'xcolor',Tischfarbe,'ycolor',Tischfarbe);%,...
    %'xtick',[],'ytick',[]);
title('Endpositionen der Kugeln')
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 21.07.2012, 10:37     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
gdow86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 21.07.2012, 13:21     Titel:
  Antworten mit Zitat      
Guten Morgen,

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.
Code:
s(t)=s0+v0*t+0.5*a*t^2
oder für die Impulserhaltung
Code:
m*v0+M*V0=m*v1+M*V1
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 Smile 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 Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
gdow86
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 20.07.12
Wohnort: ---
Version: 7.9.0 (R2009b)
     Beitrag Verfasst am: 21.07.2012, 15:41     Titel:
  Antworten mit Zitat      
Vielleicht noch als kleine Info:

Ich soll mit 9 Gleichungen arbeiten, sprich:
Code:

s1(t)=s0+v0*t+0.5*a*t^2
.
.
.
s9(t)=s0+v0*t+0.5*a*t^2
 


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.
Question Question Question
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.