Delphi-PRAXiS
Seite 4 von 7   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zusammenstoß von Kugeln (https://www.delphipraxis.net/24921-zusammenstoss-von-kugeln.html)

xineohp 30. Jun 2004 19:24

Re: Zusammenstoß von Kugeln
 
Liste der Anhänge anzeigen (Anzahl: 2)
so, ich hab das ganze mal durchgerechnet/gezeichnet:

Die pysikalische Seite hab ich mir nicht angeschaut, aber rein mathematisch müsste es so hinhauen.
Die Bilder beziehen sich auf die Billiard-Page, die auf der ersten Seite dieses Threads genannt wurde.

EDIT: bmp --> jpg

Markus 30. Jun 2004 19:26

Re: Zusammenstoß von Kugeln
 
Bitte poste die Bilder nächstes mal als JPG :mrgreen:

Ich denk da würden sich einige Modem-User freuen... ;-)

braingrenade 30. Jun 2004 19:55

Re: Zusammenstoß von Kugeln
 
Wow vielen Dank !

Nun hab ich meinen Fehler gefunden, ich hatte das VektorD = VektorB - VektorA vergessen,
aber leider versteh ich was an deinem Bild nicht, nähmlich wie kann ich VektorA=VektorD/|VektorD|*a ausrechnen ,ich kann ja nicht einfach den Vektor durch eine Zahl teilen oder?

supermuckl 30. Jun 2004 20:05

Re: Zusammenstoß von Kugeln
 
Liste der Anhänge anzeigen (Anzahl: 1)
hatte mal nen kugel stoß simulations proggi gemacht um zu testen wie das geht ( 2D )
für n billard proggi

xineohp 30. Jun 2004 20:07

Re: Zusammenstoß von Kugeln
 
moin,

das ist ein bisschen Vektorrechnung ;)

Ein Vektor vermittelt folgende Informationen: Richtung, Betrag (und Angriffspunkt).
Wenn man einen VektorX hat, dann ist VektorX / |VektorX| der sogenannte Einheitsvektor zu X.
Der Einheitsvektor hat immer die Länge 1, d.h. |Einheitsvektor|=1. Der Vektor wird damit auf seine Richtung reduziert.

Multipliziert man nun im gegebenen Fall den Einheitsvektor von VektorD mit der Strecke a so erhält man den Vektora.

xineohp 30. Jun 2004 20:13

Re: Zusammenstoß von Kugeln
 
Im zweiten Link auf Seite 1 wird das Ganze übrigens im Kapitel Einheitsvektoren behandelt. Die dazugehörige Funktion nennt sich dort "Normalize".

PS: Du kannst einen Vektor beliebig mit einem Skalar(=normale Zahl) multiplizieren/dividieren. Problematisch wirds erst wenn du zwei Vektoren mit einander verarbeiten willst ... normale Multiplikation gibt es da nicht, sondern nur das sogenannte Skalarprodukt.

dizzy 30. Jun 2004 20:16

Re: Zusammenstoß von Kugeln
 
Man kann Vektoren natürlich nurch eine reelle Zahl dividieren. Ist ja nicht anderes wie eine Multiplikation mit dem Kehrwert der Zahl.
Mann nennt diese Zahl dann auch "Skalar", da sie den Vektor "skaliert" (in seiner Länge verändert). Dividiert man nun einen Vektor durch seine Länge ist der Ergebnisvektor 1 Einheit lang.
Bei einer normalen Zahl wäre das ja auch z.B.: 5/|5| = 1; da |5| = 5. Somit hätte man quasi einen 1-dimensionalen Vektor auf die Länge 1 "normiert".

Das nur als kleinen Einwurf ;)

dizzy 30. Jun 2004 20:21

Re: Zusammenstoß von Kugeln
 
Zitat:

Zitat von xineohp
normale Multiplikation gibt es da nicht, sondern nur das sogenannte Skalarprodukt.

...und das Kreuzprodukt (nur im R³), das dyadische Produkt, im R² das komplexe Produkt, und im 4-dimensionalen Raum das Quaternionen- oder hyperkomplexe Produkt.
Zu dem lässt sich das Skalarprodukt auf Matrizenrechnung zurückführen, wo man sieht, dass es theoretisch unendlich viele verschiedene Skalarprodukte gibt, aber für normal sterbliche eigentlich ausschließlich das triviale von Bedeutung ist. :zwinker:

xineohp 30. Jun 2004 20:31

Re: Zusammenstoß von Kugeln
 
:roll: Ich dachte halt das Skalarprodukt würde hier erstmal reichen ... außerdem hatte ich das ganze andere Zeugs noch nicht im Unterricht :mrgreen:

braingrenade 30. Jun 2004 20:47

Re: Zusammenstoß von Kugeln
 
Ok dank eurer Hilfe bin ich nun soweit :
Delphi-Quellcode:
      vbuf := subvectors(chspr[i].v,chspr[i2].v) ;

       alpha := arccos(dotproduct(chspr[i].v,vbuf)/((magnitude(chspr[i].v)*magnitude(vbuf))));
       lengthv := cos(alpha)*magnitude(chspr[i].v);
       v1 := scalevector(normalize(vbuf),lengthv);

       alpha := arccos(dotproduct(chspr[i2].v,vbuf)/((magnitude(chspr[i2].v)*magnitude(vbuf))));
       lengthv := cos(alpha)*magnitude(chspr[i2].v);
       v2 := scalevector(normalize(vbuf),lengthv);

       vbuf := addvectors(v1,v2); // vbuf ist am Ende immer (0,0), v1 und v2 sind "Gegenvektoren"

       chspr[i].v := subvectors(chspr[i].v,vbuf);
       chspr[i2].v := addvectors(chspr[i2].v,vbuf);
Aber vbuf ist am Ende immer (0,0) :shock: und die Bahnen der Kugeln verändern sich deshalb nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr.
Seite 4 von 7   « Erste     234 56     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz