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:

"Physikalische" Fragen

 
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
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 13.04.2008, 20:31    Titel: "Physikalische" Fragen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 13.04.2008, 21:46    Titel: Antworten mit Zitat

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 böse Ifer
_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Klößchn
1x verwarnt


Anmeldungsdatum: 22.03.2008
Beiträge: 77
Wohnort: Donauwörth

BeitragVerfasst am: 13.04.2008, 22:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 13.04.2008, 22:19    Titel: Antworten mit Zitat

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? traurig
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
Benutzer-Profile anzeigen Private Nachricht senden
Klößchn
1x verwarnt


Anmeldungsdatum: 22.03.2008
Beiträge: 77
Wohnort: Donauwörth

BeitragVerfasst am: 13.04.2008, 22:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 13.04.2008, 22:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Klößchn
1x verwarnt


Anmeldungsdatum: 22.03.2008
Beiträge: 77
Wohnort: Donauwörth

BeitragVerfasst am: 13.04.2008, 23:22    Titel: Antworten mit Zitat

Geschafft, auch wenns mich eher dran erinnert, ein gespanntes Gummiseil zu ziehen grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.04.2008, 12:56    Titel: Antworten mit Zitat

eine gelungene wackelpudding-simulation! Daumen rauf! durchgeknallt
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Klößchn
1x verwarnt


Anmeldungsdatum: 22.03.2008
Beiträge: 77
Wohnort: Donauwörth

BeitragVerfasst am: 14.04.2008, 12:58    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
eine gelungene wackelpudding-simulation! Daumen rauf! durchgeknallt

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



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

BeitragVerfasst am: 14.04.2008, 13:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Klößchn
1x verwarnt


Anmeldungsdatum: 22.03.2008
Beiträge: 77
Wohnort: Donauwörth

BeitragVerfasst am: 14.04.2008, 15:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Klößchn
1x verwarnt


Anmeldungsdatum: 22.03.2008
Beiträge: 77
Wohnort: Donauwörth

BeitragVerfasst am: 14.04.2008, 16:56    Titel: Antworten mit Zitat

Soah, nach wie vor nicht mit Vektoren, aber "hübscher" lächeln
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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



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

BeitragVerfasst am: 14.04.2008, 21:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Caran



Anmeldungsdatum: 11.03.2007
Beiträge: 290
Wohnort: Lörrach

BeitragVerfasst am: 17.04.2008, 14:59    Titel: Antworten mit Zitat

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. happy

MfG Caran
_________________
Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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