![]() |
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 |
Re: Zusammenstoß von Kugeln
Bitte poste die Bilder nächstes mal als JPG :mrgreen:
Ich denk da würden sich einige Modem-User freuen... ;-) |
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? |
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 |
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. |
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. |
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 ;) |
Re: Zusammenstoß von Kugeln
Zitat:
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: |
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:
|
Re: Zusammenstoß von Kugeln
Ok dank eurer Hilfe bin ich nun soweit :
Delphi-Quellcode:
Aber vbuf ist am Ende immer (0,0) :shock: und die Bahnen der Kugeln verändern sich deshalb nicht
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); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 Uhr. |
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