Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 27.11.2008, 17:36 Titel: Explosionen + Schwerkraft |
|
|
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 |
|
 |
max06

Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 27.11.2008, 18:12 Titel: |
|
|
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
Code: |
(flugrichtung)
------------------------>
|\
| \
| \ (Symbolische Flugrichtung)
\/ \
(Schwerkraft)
|
Ich kann dir da eventuell TPM empfehlen, der kann das besser als ich...
Grüße,
max06 |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 27.11.2008, 19:49 Titel: |
|
|
Nur wenn ich die Rotation und die Geschwindigkeit berechnen will, welche Formeln muss ich denn da Eingeben? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.11.2008, 20:16 Titel: |
|
|
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 |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 27.11.2008, 20:17 Titel: |
|
|
Was, wieso? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.11.2008, 20:28 Titel: |
|
|
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 |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 27.11.2008, 20:31 Titel: |
|
|
MisterD hat Folgendes geschrieben: | ich könnte dir erklären wie du dir dadraus jetzt ne formel integrierst | Wäre mir am liebsten  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.11.2008, 20:43 Titel: |
|
|
nu gut.. 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 |
|
 |
max06

Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 27.11.2008, 22:59 Titel: |
|
|
Das hab sogar ich verstanden xD |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 28.11.2008, 09:32 Titel: |
|
|
Ich auch! Danke! |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 28.11.2008, 15:18 Titel: |
|
|
Sicherlich, nitroxis, sicherlich ;P |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 28.11.2008, 15:41 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 28.11.2008, 18:44 Titel: |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 30.11.2008, 16:49 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.11.2008, 19:42 Titel: |
|
|
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 |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 01.12.2008, 17:35 Titel: Re: Explosionen + Schwerkraft |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 01.12.2008, 23:13 Titel: |
|
|
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 |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 02.12.2008, 22:55 Titel: |
|
|
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 |
|
 |
|