 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 13.04.2008, 20:31 Titel: "Physikalische" Fragen |
|
|
Hallöchen,
heute hab ich gleich zwei Fragen parat:
1. Ich möchte mir gerne meine eigene Physik-Engine basteln, bin allerdings mit dem was ich bisher zu Stande gebracht habe nicht wirklich zufrieden. Kennt jemand dazu ein Tutorial?
2. Außerdem würde ich gerne wissen wie man eine Wellenbewegung (die durch einzelne Tropfen verursacht wurde) berechnen kann. Also so wie hier:
http://www.walterreid.com/file_download/21
Danke schon mal im Voraus für eventuelee Antworten.
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 13.04.2008, 21:46 Titel: |
|
|
Ohne Dich allzusehr entmutigen zu wollen: Physik im und mit Wasser gehört computersimuliert so ziemlich zum Kompliziertesten, was es gibt.
Mein dringender Rat: Verwende Eine von denen hier:
http://de.wikipedia.org/wiki/Physik-Engine
Mit einem "Powered by Newton" oder "Powered by ODE" fällt Dir kein Zacken aus der Krone, aber Du ersparst Dir Arbeit in einem Umfang, der von einer Einzelperson eigentlich nicht mehr leistbar ist.
Lutz Ifer _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
Klößchn 1x verwarnt

Anmeldungsdatum: 22.03.2008 Beiträge: 77 Wohnort: Donauwörth
|
Verfasst am: 13.04.2008, 22:16 Titel: |
|
|
das mit dem Wasser ist egtl "einfach"... is ja "nur" Kosinus mit Abnehmen des absoluten nach aussen.
Sollte egtl auch in dem NeHe-Tutorial stehen... steht ja inner Titelleiste |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 13.04.2008, 22:19 Titel: |
|
|
Genau von denen wollte ich mich ja distanzieren. Ich kann mir denken, dass die um einiges besser sind, als das was ich hier zusammen coden werde. Aber ich möchte eine solche (wenn auch weniger komplexe) Engine mal selbst programmieren, um dabei evtl. zu lernen wie genau sowas funktioniert. Der Funktionsumfang sollte eigentlich nur Kollisionserkennung (die ich übrigens schon eingebaut habe) und grundlegende Physikalische Gesetze, wie Trägheit, Reibungswiederstand, Gravitation usw enthalten.
Was das Wasser betrifft:
selbstverständlich möchte ich keine 3-dimensionale Wassersimulation haben, sondern nur eine Wellenbewegung auf einer 2-dimensionalen Fläche simulieren. (hoffe ihr wisst wie ih das meine)
Ist das denn wirklich so schwer wie Du sagst?
MfG Caran
Edit:
@Klößchn:
Dein Post wurde bei mir noch nicht angezeigt, als ich meinen 2. Geschrieben hatte.
Jedenfalls kann ich mir gut denken, wie dein Lösungsvorschlag funktoniert. Danke _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
Klößchn 1x verwarnt

Anmeldungsdatum: 22.03.2008 Beiträge: 77 Wohnort: Donauwörth
|
Verfasst am: 13.04.2008, 22:22 Titel: |
|
|
Schwer? Egtl nicht... sobald man in der 10. Klasse Wellenphysik durch hat, isses eazy.. ich guck mal ob ich n stückchen Code zambekomme, so ganz geheuer ist mir FreeBasic noch nicht, aber lernen möcht ichs schon :]
Endlich raus aus der DOS-Box |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 13.04.2008, 22:40 Titel: |
|
|
Na, dann danke und viel Spaß. Ich hab mir da auch schon ein bisschen was gecodet, aber jetzt bin ich, ehrlich gesagt, zu müde um daran weiter zu arbeiten.
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
Klößchn 1x verwarnt

Anmeldungsdatum: 22.03.2008 Beiträge: 77 Wohnort: Donauwörth
|
Verfasst am: 13.04.2008, 23:22 Titel: |
|
|
Geschafft, auch wenns mich eher dran erinnert, ein gespanntes Gummiseil zu ziehen
Code: | Dim Welle(64) As Single
Dim WelleMax(64) As Single
Dim WellePow(64) As Single
Dim X As Integer
Dim Y As Integer
Dim k As Integer
Dim I As Integer
Dim P AS Single
Screen 12
Do
screenlock
cls
for x = 0 to 64
'line ((x-1)*10, welleMax(x-1)+240) - (x*10, welleMax(x)+240),12
'line ((x-1)*10, wellePow(x-1)+240) - (x*10, wellePow(x)+240),14
line ((x-1)*10, welle(x-1)+240) - (x*10, welle(x)+240),1
'Füllung:
line ((x-.5)*10, (welle(x)/2)+(welle(x-1)/2)+240) - ((x+0)*10, 480),1,BF
line ((x-0)*10, (welle(x)/2)+(welle(x+1)/2)+240) - ((x+.5)*10, 480),1,BF
next
screenunlock
getmouse x,y,,k
if k <> 0 AND x >= 0 then
wellemax(x/10) += (240-y)/20
end if
for x = 0 to 64
wellepow(x-1) -= wellemax(x)
wellepow(x+1) -= wellemax(x)
wellepow(x) = (wellepow(x-1) /2) + (wellepow(x+1) /2)
wellemax(x) = wellemax(x)*0.1
welle(x) = cos(p) * (wellepow(x))
next
p += 0.01
sleep 1
Loop until multikey(1) |
Kann man sicher noch optimieren |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.04.2008, 12:56 Titel: |
|
|
eine gelungene wackelpudding-simulation!  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Klößchn 1x verwarnt

Anmeldungsdatum: 22.03.2008 Beiträge: 77 Wohnort: Donauwörth
|
Verfasst am: 14.04.2008, 12:58 Titel: |
|
|
Jojo hat Folgendes geschrieben: | eine gelungene wackelpudding-simulation!  |
Dankeschön :]
Egtl wollt ich erst mit Vektoren arbeiten, aber das war mir dann fürs 2. Prog dann doch zuviel, da setz ich mich heut nachmittag dran. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.04.2008, 13:33 Titel: |
|
|
Hallo
Ich hab mal was ganz einfaches mit QB gebastelt:
Code: | SCREEN 13
CLS
pi = 3.141593
f = 1
DO
FOR f = 0 TO 63
OUT 968, f
OUT 969, 0
OUT 969, 0
OUT 969, f
NEXT
FOR xb = 0 TO 319 STEP 2
x = xb - 160
FOR yb = 0 TO 199 STEP 2
y = yb * 1.2 - 120
r = SQR(x ^ 2 + y ^ 2)
f = FIX((COS(r / 5 + t) * 31)) / (r / 10 + 2) + 32
PSET (xb, yb), f
NEXT
NEXT
t = t - .5
IF t < -2 * pi THEN t = 0
LOOP WHILE INKEY$ = "" |
Vielleicht lässt sich daraus etwas machen, wenn man die Wellen von wechselnden, zufälligen Zentren sich überlagern lässt. wie bei Regentropfen, die auf eine Wasserfläche fallen.
Wenn man das Bild eine Weile konzentriert ansieht und es dann mit Tastendruck stoppt, scheinen die Wellen zurückzuschwappen. Eine ganz nette, optische Täuschung.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Klößchn 1x verwarnt

Anmeldungsdatum: 22.03.2008 Beiträge: 77 Wohnort: Donauwörth
|
Verfasst am: 14.04.2008, 15:11 Titel: |
|
|
Hab ich es falsch konvertiert oder warum sehe ich nichts ausser einen Interlaced-Radial-Farbverlauf?
Code: | Dim pi as single
dim f as integer
dim as integer xb, yb, t, r, x, y
SCREEN 13
CLS
pi = 3.141593
f = 1
DO
FOR f = 0 TO 63
OUT 968, f
OUT 969, 0
OUT 969, 0
OUT 969, f
NEXT
FOR xb = 0 TO 319 STEP 2
x = xb - 160
FOR yb = 0 TO 199 STEP 2
y = yb * 1.2 - 120
r = SQR(x ^ 2 + y ^ 2)
f = FIX((COS(r / 5 + t) * 31)) / (r / 10 + 2) + 32
PSET (xb, yb), f
NEXT
NEXT
t = t - .5
IF t < -2 * pi THEN t = 0
LOOP WHILE INKEY$ = "" |
|
|
Nach oben |
|
 |
Klößchn 1x verwarnt

Anmeldungsdatum: 22.03.2008 Beiträge: 77 Wohnort: Donauwörth
|
Verfasst am: 14.04.2008, 16:56 Titel: |
|
|
Soah, nach wie vor nicht mit Vektoren, aber "hübscher"
Code: | #include "fbgfx.bi"
Dim t(0 To 640) As Single
Dim p(0 To 640) As Single
Dim s As Single
Dim Temp As Single
Dim i As Integer
Dim X As Integer
Dim Y As Integer
Dim k As Integer
Dim SW As Integer
Screen 18, 4
s = -3
Setmouse 320,240,0
Do
Getmouse X, Y, , k
Screenlock
If Cos(s) <= 0 Then Line (0,0)-(640,480),0, BF
If Cos(s) >= 0.0 Then Line (0,0)-(640,480),12, BF
If Cos(s) >= 0.1 Then Line (0,0)-(640,480),9, BF
If Cos(s) >= 0.5 Then Line (0,0)-(640,480),11, BF
Circle (320-Sin(s)*(Cos(s/2)*640),240-Cos(s)*240),32,14,,,,F
For i = 0 To 640
Line (i, 240-t(i))-(i,480),1
Next
If sw = 1 Then
For i = 0 To 640
'Line (i, 240-p(i))-(i,480),14
Pset (i, 240-p(i)),14
Next
End If
If (x<>0) And (y<>0) Then
Line (x,y) - (x, 240-t(x)),12
If (230-t(x)) >= y Then
Line (x-10,230-t(x)) - (x, 240-t(x)),12
Line (x+10,230-t(x)) - (x, 240-t(x)),12
Else
Line (x-10,250-t(x)) - (x, 240-t(x)),12
Line (x+10,250-t(x)) - (x, 240-t(x)),12
End If
End If
Line (x-10, y) - (x+10,y),15
Line (x, y-10) - (x,y+10),15
Screenunlock
For i = 0 To 640
'Impulsübertragung
If p(i) <> 0 Then
If (p(i) >= 0) Then
p(i-1) = (p(i)/2) + (p(i-1)) / 2
p(i+1) = (p(i)/2) + (p(i+1)) / 2
Else
p(i-1) = (p(i)/2) + (p(i-1)) / 2
p(i+1) = (p(i)/2) + (p(i+1)) / 2
End If
p(i) *= 0.75
End If
Next
'Impulsbildung
For i = 0 To 640
t(i) += p(i)
If (p(i)>0) Then
p(i) -= t(i)*0.5
Else
p(i) -= t(i)*0.5
End If
t(i) *= .9
Next
If k <> 0 Then
p(x) -= (240-y) 'Impuls auslösen
End If
Sleep 10
s -= 0.01
If Multikey(fb.sc_f1) Then sw = Not sw
Loop Until Multikey(fb.sc_escape)
|
|
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 14.04.2008, 21:47 Titel: |
|
|
Klößchn hat Folgendes geschrieben: | Hab ich es falsch konvertiert oder warum sehe ich nichts ausser einen Interlaced-Radial-Farbverlauf?
Code: | Dim pi as single
dim f as integer
dim as integer xb, yb, t, r, x, y
|
|
Du darfst r, x, y und vor allem t nicht als Integer deklarieren.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 17.04.2008, 14:59 Titel: |
|
|
Okay danke für eure Antworten. Ich habe das ganze jetzt 3 Dimensional dargestellt und das sah ganz gut aus. Was ich zum Thema Wassersimulation noch entdeckt habe ist das hier http://www.youtube.com/watch?v=CyDcAyIPaXA. (Mir) Besonders auffallend sind die einzelnen Wassertropfen, die die Wasseroberfläche verlassen.
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
|
|
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.
|
|