Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Explosionen + Schwerkraft

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 27.11.2008, 17:36    Titel: Explosionen + Schwerkraft Antworten mit Zitat

Hallo!

Ich möchte ein kleines Spiel schreiben. In diesem Spiel Explodieren manchmal Sachen (Raumschiffe, Schüsse).
Die Explosion funktioniert gut, aber wie kann ich Schwerkraft mit einbinden?

Eine Explosion besteht aus insgesamt 100 Partikeln (Funken).
In diesen Partikeln ist die Geschwindigkeit und die Rotation (360°) gespeichert.
Die Sub zum Zeichnen und die Sub zum berechnen der neuen Position der Partikel habe ich schon geschrieben. Jetzt fehlt wie gesagt nur noch die Schwerkraft.

Code:
Type PartikelType
   XPos As Double
   YPos As Double
   Geschwindigkeit As Double
   Rotation As Double
End Type

Type ExplosionType
   Partikel(100) As PartikelType
   Gravitation As Double
End Type


Wie berechne ich diese Werte neu, so das sie mit einer bestimmten Anziehungkraft (z.B. 9.81 m/s) nach unten fallen?[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 27.11.2008, 18:12    Titel: Antworten mit Zitat

Ich würde spontan zu Vektoren raten... deine Funken haben ja ne absolute Position, eine Flugrichtung und eine gewisse Geschwindigkeit, da den Vektor nach unten mit einzurechnen (die Schwerkraft), dürfte nicht allzu schwer werden...

Hm... wie verdeutlicht man das peinlich
Code:

      (flugrichtung)
------------------------>
    |\
    |  \
    |    \ (Symbolische Flugrichtung)
   \/      \
(Schwerkraft)


Ich kann dir da eventuell TPM empfehlen, der kann das besser als ich...

Grüße,
max06
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 27.11.2008, 19:49    Titel: Antworten mit Zitat

Nur wenn ich die Rotation und die Geschwindigkeit berechnen will, welche Formeln muss ich denn da Eingeben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.11.2008, 20:16    Titel: Antworten mit Zitat

wie gut kannst du mathe? ;D
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 27.11.2008, 20:17    Titel: Antworten mit Zitat

Was, wieso?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.11.2008, 20:28    Titel: Antworten mit Zitat

naja, du hast gesagt du hast ne richtung und ne geschwindigkeit. daraus kannst du schonmal einen bewegungsvektor herleiten. dann hast du die beschleunigung durch die schwerkraft. außerdem hast du ne reihe an zeitwerten und möchtest jetzt die positionen haben aus der initialen bewegung und der beschleunigung für jeden zeitpunkt hervorgehen. Ich könnte dir jetzt ne DGL in die hand drücken wenn du weißt wie man damit umgeht, oder ich könnte dir erklären wie du dir dadraus jetzt ne formel integrierst falls du das kannst, oder ich könnte dir auch ne fertige formel in die hand drücken und man könnte sehen was passiert. prinzipiell egal
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 27.11.2008, 20:31    Titel: Antworten mit Zitat

MisterD hat Folgendes geschrieben:
ich könnte dir erklären wie du dir dadraus jetzt ne formel integrierst
Wäre mir am liebsten mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.11.2008, 20:43    Titel: Antworten mit Zitat

nu gut.. happy also mal angenommen, du hast:
Beschleunigungsvektor zum Zeitpunkt t -> a(t)
Bewegungsvektor zum Zeitpunkt t -> v(t)
Anfangsbewegungsvektor -> v(0)
Position zum zeitpunkt t -> p(t)
Anfangsposition -> p(0)

v(0) kannst du mit sinus und cosinus aus der richtung und der geschwindigkeit berechnen, p(0) solltest du so kennen.

zu jedem zeitpunkt t ist die beschleunigung a(t) = (0,-g), nämlich die Gravitationskraft die sich ja mit der zeit nicht verändert.

dann leitest du dir das ganze stückweise her:
Die Beschleunigung ist a(t)
die veränderung der Geschwindigkeit A(t) ist das integral von a(t) über t
also ist die Geschwindigkeit v(t) = v(0) + A(t)
die veränderung der Position V(t) ist das integral von v(t) über t
letztendlich ist die Position p(t) = p(0) + V(t)

das tust du der reihe nach einsetzen und integrieren, dann hast du deine formel.

hierbei beachten: a(t), A(t), v(t), V(t) und p(t) sind jeweils aus R², also zweiwertige Vektoren. Wenn du damit nicht umgehen kannst stell dir einfach alle Formeln für x und y getrennt auf, a für x ist halt 0 weil die gravitation nicht nach links oder rechts zieht, und a für y ist -g weil die geschwindigkeit mit g nach unten beschleunigt (ich gehe davon aus y zeigt nach oben, wenn du in bildschirmkoordinaten rechnest musst du das halt umdrehen).

ok? ;D
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 27.11.2008, 22:59    Titel: Antworten mit Zitat

Das hab sogar ich verstanden xD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 28.11.2008, 09:32    Titel: Antworten mit Zitat

Ich auch! Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 28.11.2008, 15:18    Titel: Antworten mit Zitat

Sicherlich, nitroxis, sicherlich ;P
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 28.11.2008, 15:41    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
Sicherlich, nitroxis, sicherlich ;P


sinn dieses posts? .. auch wenn du ihn nicht leiden kannst, dumme kommentare musst du deshalb nicht abgeben.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 28.11.2008, 18:44    Titel: Antworten mit Zitat

Zitat:
Die Beschleunigung ist a(t)
die veränderung der Geschwindigkeit A(t) ist das integral von a(t) über t

Meine Physikstunden sind schon wieder ziemlich lang her, aber ist die Beschleunigung nicht die Veränderung der Geschwindigkeit? Dann müsste A(t) die Veränderung der Beschleunigung sein.

Bei der Verwendung der Schwerkraft wirst du vermutlich die Beschleunigung konstant halten, außer du möchtest tatsächlich mit verschiedenen Planeten arbeiten, die nahe Partikel stärker anziehen als entfernte.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 30.11.2008, 16:49    Titel: Antworten mit Zitat

wtf das forum hat posts verschluckt..

also nochmal zusammenfassung:
a(t) ist der wert mit dem sich die geschwindigkeit verändert
das integral A(t) ist der wert um den sie sich verändert hat, und ledliglich der wird auf die geschwindigkeit draufgerechnet.

und ja, a(t) ist konstant, (0,-g) hängt offensichtlich nicht von t ab.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 30.11.2008, 19:42    Titel: Antworten mit Zitat

Nehme mal an, dass da eine Backup-Einspielung am Werke war.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 01.12.2008, 17:35    Titel: Re: Explosionen + Schwerkraft Antworten mit Zitat

Nitroxis hat Folgendes geschrieben:
Wie berechne ich diese Werte neu, so das sie mit einer bestimmten Anziehungkraft (z.B. 9.81 m/s) nach unten fallen?

Also ich würde nicht so konkrete Werte nehmen, weil da müsstest du ja irgendeinen Maßstab nehmen. Sowas kann man lieber nach gefühl machen.

Außerdem entsteht durch die Erdanziehungskraft keine konstante Geschwindigkeit sondern ein fallender Körper beschleunigt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 01.12.2008, 23:13    Titel: Antworten mit Zitat

mit konstanter beschleunigung von 9.81m/s², und wenn du so rechnest bekommst du am ende halt einheiten in Metern, die musst du dann nurnoch vorm zeichnen irgendwie auf pixel umrechnen
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 02.12.2008, 22:55    Titel: Antworten mit Zitat

Hallo

Ich hebe da mal ein Progrämmchen zusammengeschustert. Ein "Teilchenklumpen" umkreist einen zentralen Körper unter dem Einfluss von dessen Schwerkraft. Beim Drücken einer beliebigen Taste zerbirst dieser Klumpen in eine Partikelwolke. Ist zwar QB, aber vielleicht taugt es als Anregung.

Code:
SCREEN 9, , 0, 1
WINDOW (0, 0)-(639, 479)
CLS

dt = 1                           'Zeitschritt
g = 1                            'Gravitationsfaktor
partikel% = 250                  'Anzahl der Partikel

DIM x(partikel%), y(partikel%)
DIM vx(partikel%), vy(partikel%)
RANDOMIZE TIMER

x(0) = 320                        'Zentralkoerper
y(0) = 240
vx(0) = 0
vy(0) = 0

FOR p% = 1 TO partikel%           'Startwerte der Partikel
 x(p%) = 170
 y(p%) = 240
 vx(p%) = 0
 vy(p%) = 3
NEXT

DO
                             
 FOR p% = 1 TO partikel%
  dx = x(p%) - x(0)
  dy = y(p%) - y(0)
  dq = dx ^ 2 + dy ^ 2
  d = SQR(dq)
  a = -1500 * g / dq
  ax = a * dx / d
  vx(p%) = vx(p%) + ax * dt
  ay = a * dy / d
  vy(p%) = vy(p%) + ay * dt
 NEXT
 CLS
 FOR p% = 0 TO partikel%
  x(p%) = x(p%) + vx(p%) * dt
  y(p%) = y(p%) + vy(p%) * dt
  PSET (x(p%), y(p%)), 15
 NEXT

 PCOPY 0, 1

 taste$ = INKEY$
 IF taste$ <> "" AND ex = 0 THEN GOSUB explo 'Explosion mit beliebiger Taste

LOOP UNTIL taste$ = CHR$(27)                 'Ende mit ESC

END

explo:
ex = 1
FOR p% = 1 TO partikel%
 w = RND * 6.2832
 v = RND * 1                                  'Explosionsgeschwindigkeit
 vx(p%) = vx(p%) + COS(w) * v
 vy(p%) = vy(p%) + SIN(w) * v
NEXT
RETURN


Gruß
Skilltronic

EDIT: Hatte vergessen, den Gravitationsfaktor g in die Formel für die Beschleunigung einzubauen. Ist korrigiert.
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht 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.

 Impressum :: Datenschutz