Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 12.06.2005, 18:07 Titel: Schwerkraft in QB |
|
|
Hi. Ich habe gerade versucht eine Schwerkraft zu kreieren:
Ein Kreis startet bei (100,y)
und soll herunterfallen.
Dabei soll natürlich seine Geschwindigkeit zunehmen und beim Aufprall auf den Boden (Kollision hab ich mit POINT bestimmt) soll er Energie verlieren um anschließend nicht mehr so hoch zu springen wie vorher.
Das ganze soll laufen bis der Ball in der Ruhe ist.
Ich habe zwar schon einiges getestet aber das ist alles sehr banal.
Kann man das mit Hilfe des Ortsfaktor's und der Formeln der Energie realisieren? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.06.2005, 18:43 Titel: |
|
|
->
Code: | g = 9.81 '-9.81 eigentlich, aber bei Bildschirmen geht x ja nach unten und nicht nach oben...
TYPE objekt
x as single
y as single
dx as single
dy as single
END TYPE
dim irgendwas as objekt
DO
ende=timer
t=ende-start
start=timer
irgendwas.dy = irgendwas.dy + g*t
irgendwas.y = irgendwas.y + irgendwas.dy*t + 0.5 * g^2
...
LOOP |
Die Kollision kommt drauf an, wie die sein soll. Nur Horizontal oder auch Vertikal oder sogar diagonal? _________________ "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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 12.06.2005, 19:01 Titel: |
|
|
Ja ich habe deine Billard Simulation gesehen, ist auch recht eindrucksvoll aber ich kann leider nicht so viel damit anfangen da mir da zuviele Zahlen und Variablen vorkommen.
Wenn man den Teil mit der Schwerkraft vllt. extrahieren könnte mit Kommentaren würd ichs vielleicht verstehen. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 12.06.2005, 19:59 Titel: |
|
|
Die eigentliche Schwerkraft steckt eigentlich vollständig in dieser Variable g (ist vom Typ Vektor). Ansonste rührt die Programmkomplexität meiner Billardsimulation von den vielen Zusatzaufgaben her wie beispielsweise die Bestimmung, welche beiden Elemente (zwei Kugeln oder Kugel mit Bande?) als nächstes zusammenstossen werden.
Der Code sollte jedoch dank intensivem Gebrauch von TYPEs und SUB/FUNCTION (orientiert sich stark an der C++-Version mit Klassen) relativ einfach lesbar sein.
Kleiner Tipp von mir: Du kannst beispielsweise den Luftwiderstand als Energieverlust einmal vernachlässigen und stattdessen die Kugel beim Abprall Energie verlieren lassen => Dann sind es nur kleinere Änderungen in UmlenkungBande() und UmlenkungStoss() in BILL_SIM.BAS. Ist sogar ziemlich einfach:
Code: | DIM SHARED verlust!
verlust! = 0.8 ' Verlust von 20% kinetischer Energie beim Abstoss
SUB UmlenkungBande (bw AS Bandenwand, k AS Kugel, t!)
...
k.v.x = (vx! * bw.e2.x + vy! * bw.e2.y) * SQR(verlust!) ' Berechnung der
k.v.y = (vx! * bw.e2.y - vy! * bw.e2.x) * SQR(verlust!) ' Abprallreflektion
...
END SUB
SUB UmlenkungStoss (k1 AS Kugel, k2 AS Kugel, t!)
...
k1.v.x = (vu1a! * ex! + vv1! * ey!) * SQR(verlust!)
k1.v.y = (vu1a! * ey! - vv1! * ex!) * SQR(verlust!)
k2.v.x = (vu2a! * ex! + vv2! * ey!) * SQR(verlust!)
k2.v.y = (vu2a! * ey! - vv2! * ex!) * SQR(verlust!)
...
END SUB |
Hinweis: Die Wurzel ist nötig, da bekanntlich die kinetische Energie quadratisch zur Geschwindigkeit zunimmt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 12.06.2005, 20:50 Titel: |
|
|
naja es geht genau genommen um eine Pinball-Simulation.
Klar..sehr komplex, und deswegen fange ich ja erstmal mit der Schwerkraft an.
Kann ich vom Abprallen her "Einfallswinkel = Ausfallswinkel" nehmen oder ist das nur ein Spezialfall? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.06.2005, 20:56 Titel: |
|
|
Spezialfall- Ein Pinball ist nämlcih kein billard-tisch
Du, ich würde das an deiner Stelle lieber lassrn! Dazu braucht man erstmal ne bessere Progger-Sprache (C++) und außerdem einige Jährchen Erfahrung Ich habs auch schon versucht! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 12.06.2005, 20:58 Titel: |
|
|
hm ich glaub nichtmal unbedingt, dass man unbedingt ne bessere Sprache braucht.
Mit den passenden Befehlen dürfte das auch funzen.
Aber wie...das ist die Frage, ja  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.06.2005, 21:44 Titel: |
|
|
natürlich kannst du das mit dem Abprallwinkel=Aufprallwinkel nehmen, das Problem ist nur, bei ungenau definierten Kurvenwänden den richtigen Winkel rauszubekommen.. Du musst im Prinzip schaun, in welchem winkel der Ball die Wand trifft, dafür nimmst du einfach die richtung des balls in ° minus die Richtung der Wand in ° und hast den Aufprallwinkel. dann ziehst du praktisch 90° ab, machst n - davor, zählst wieder 90° dazu und drehst das mit der Wand wieder zurück.. also vereinfach ungefähr so:
neueballrichtun=-ballrichtung+2*wanddrehung+180
hoffe ich hab mich nicht verrechnet oder verdacht? irgendwie kommt mir das komisch vor.. _________________ "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 |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 12.06.2005, 22:21 Titel: |
|
|
Wie bestimmte ich denn z.b. den Winkel von
LINE (100,100)-(230,230) ? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 12.06.2005, 22:45 Titel: |
|
|
ATN((y2-y1)/(x2-x1))
=>
ATN((230-100)/(230-100))
=>
ATN(1)
=>
45° aber im Bogenmaß angegeben. Also 4/pi = 1,ebbes _________________ "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 |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 13.06.2005, 17:40 Titel: |
|
|
Hm gut das wäre dann der Winkel zur Geraden mit der Steigung 0.
Aber um das ganze etwas dynamischer wirken zu lassen soll die Kugel nun ohne Schwerkraft und Energieverlust in einem Vieleckigen Raum bewegt werden bzw. sich bewegen nach dem prinzip Einfallswinkel = Ausfallswinkel.
Bild:
Da ist mir das Problem aufgetreten, dass ich da erstmal den Winkel berechnen muss und das nicht ausschließlich mit ATN sondern wahlweise mit SIN oder COS ebenso.
Wäre es da nicht klug sich vorher eine Datei anlegen zu lassen wo alle Geradengleichungen der Banden vorhanden sind? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 13.06.2005, 20:01 Titel: |
|
|
Jaein, du kannst auch beim Level laden einfach die Geraden auslesen und speichern.. das geht auch. _________________ "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 |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 13.06.2005, 20:23 Titel: |
|
|
na gut...das ist ja erstmal nicht von so großer Bedeutung, mit wäre es erstmal wichtiger den Winkel zwischen der Flugbahn des Balles und der Aufprallbande berechnen zu können um dann die neue Richtung bestimmen zu können.
Dabei gibt es ja das Problem das nicht nur TAN sondern ja auch SIN und COS in Frage kommen, da die Banden unterschiedliche Steigungen haben. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 13.06.2005, 20:43 Titel: |
|
|
Schau Dir sonst noch einmal meine Billard-Simulation an - dort habe ich exakt all das mit dem verlustfreien Stoss und dem Vieleck bereits implementiert. Dort werden übrigens Textdateien verwendet. Dabei habe ich dort den Ansatz des Praktikers genommen (früher arbeitete ich beruflich mit CAD), wo die Angabe von Eckpunkten viel benutzerfreundlicher ist als Geradengleichungen berechnen zu müssen (in der internen Verarbeitung werden aber wohl die Parameter der Geradengleichungen berechnet). Alle Parameter werden in meiner Version von einer Textdatei eingelesen (das .ZIP enthält übrigens diverse Beispielszenen).
Ich bin seinerzeit bei meiner Version sogar so weit gegangen, dass der Benutzer das Koordinatensystem selber wählen kann, mein Programm passt es durch Skalieren so in den Bildschirm, dass es so gross wie möglich dargestellt werden kann, ohne dass etwas abgeschnitten wird.
Ebenfalls noch etwas Besonderes in meiner Version: Ich berechne dort die Umlenkungen vollkommen ohne Trigonometrie, d.h. nur reine Algebra mit +, -, *, / und SQR(). Dazu werden die Koordinaten in ein lokales, abgedrehtes Koordinatensystem umgerechnet (jeweils mit u und v bezeichnet in den SUB-Implementierungen) unter Zuhilfenahme von Einheitsvektoren. Stichwort an dieser Stelle: Additionstheorem! _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 16.06.2005, 21:01 Titel: |
|
|
Nun ja das erweist sich insofern als schwierig da ich die Vekorrechnung noch nicht beherrsche bzw. gelernt hab Komm nach'n Ferien erstmal inne 12.
Nochmal ne Frage zu ATN(y2-y1)/(x2-x1).
Das ist ja nichts weiter als der Winkel der Steigung der Gerade.
Jedoch frage ich mich wie das Dreieck welches meiner Vermutung nach von QB gebildet wird um den Winkel zu berechnen, aussieht.
Wo hat es an der Geraden die Hypotenuse usw. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 17.06.2005, 09:24 Titel: |
|
|
(x1|y1) ist der Punkt an dem der Winkel ist, (x2|y1) der wo der Rechte winkel ist und die Tangente geht von (x1|y1) nach (x2|y2).
Also im einfachsten Fall ist (x1|y1) unten Link, (x1|y2) unten rechts mit Rechtem Winkel und (x2|y2) oben rechts. _________________ "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 |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 17.06.2005, 17:43 Titel: |
|
|
ah verstehe.
Ist die Vektorrechnung auf mein Programm bezogen schwer?
Vielleicht könnte jemand einen Code posten wo die neue Geschwindigkeit bzw. Steigung der Kugel mit Hilfe von Vektoren berechnet wird und zwar aus folgenden Werten:
Einfalls/Ausfallswinkel 30°
Vorherige Steigung der Kugel = 1 (x+1; y+1 pro Schleife)
Steigung der Bande die getroffen wird = -0.5
Die Werte beziehen sich hierbei auf das QB Koordinatensystem.
@dreael: Dein Code beinhaltet zwar alles was man dazu braucht doch verstehe ich ihn nicht so recht. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 17.06.2005, 18:40 Titel: |
|
|
ähm, wenn die Bandensteigung -.5 ist und die Kugel mit Steigung 1 da rumfliegt macht das keinen Einfallswinkel von 30°.. _________________ "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 |
|
 |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 17.06.2005, 19:52 Titel: |
|
|
schon klar der Winkel ist ausgedacht...sollte nur als Beispiel dienen und das nur deswegen weil ich den Rechenweg bräuchte.
Also wäre es möglich die neue Steigung der Kugel per Vektorrechnung zu berechnen?
Was gäbe es andernfalls für eine Möglichkeit an die neue Steigung zu kommen wenn mal Einfallswinkel, alte Steigung und den Aufprallpunkt hat? |
|
Nach oben |
|
 |
|