AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Kugel/Kreis prallt von Eck/Kante ab
Thema durchsuchen
Ansicht
Themen-Optionen

Kugel/Kreis prallt von Eck/Kante ab

Ein Thema von Florian H · begonnen am 11. Okt 2006 · letzter Beitrag vom 30. Dez 2008
Antwort Antwort
Seite 6 von 6   « Erste     456   
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#51

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 19. Okt 2006, 14:15
achso...
die Richtungsvariablen nicht als Integer zu deklarieren stand für mich von vornerein fest!

es ging mir darum alle Pixel zu erfassen, die den Kreis berühren und der Richtung zugewandt sind
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#52

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 30. Dez 2008, 01:27
Hallo,

ich bin gerade ziemlich verwirrt.

Ich habe offensichtlich damals nicht mehr auf den Beitrag geantwortet, geschweige denn ihn als erledigt markiert.

Und gerade habe ich ihn zufällig nach fast einer Stunde google-Suche zu dem Thema gefunden, weil ich gerade bei einem auch schon etwas älteren Programm von mir, das ich wieder ausgegraben habe, vor exakt dem Problem stehe - wohl dasselbe Programm wie damals.

Jedenfalls habe ich hier ja eine prima Lösung und ärgere mich, dass ich vorhin exakt den Gedanken zu schnell wieder verworfen habe.

Auch wenns 1,5 Jahre später ist: Danke an alle für eure Antworten, zumindest die ersten 5-6 waren ja noch aufs eigentliche Thema bezogen
Werde mich jetzt an die Implementierung machen, dann kann ich hoffentlich bald ins Bett.

Edit: Ich glaube, ich bin doch zu doof, oder es ist zu spät. Aber jetzt kriege ich das mit dem Abprallwinkel nicht so richtig gebacken.
Also wie die Kugel an der schiefen Gerade abprallt. Habe da alles mögliche mit Winkeln und Skalarprodukten probiert, aber nur seltsame Resultate erzielt.
Habe also die Geschwindigkeit der Kugel (Richtungsvektor) und den Normalenvektor der Gerade vom Kugelmittelpunkt zum Kollisions-Eck des Quadrates. Nur wie die jetzt zusammen verwurstelt werden, damit ein richtiger Ergebnis-Richtungsvektor rauskommt, ist mir grade nicht klar.
Florian Heft
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#53

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 30. Dez 2008, 03:03
sollte

richtungsvektor vorher - 2* normierter Richtungsvektor mittelpunkt->kollisionspunkt)

nicht das richtige Ergebnis liefern?
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#54

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 30. Dez 2008, 11:15
Zitat von dino:
sollte

richtungsvektor vorher - 2* normierter Richtungsvektor mittelpunkt->kollisionspunkt)

nicht das richtige Ergebnis liefern?
Danke schonmal für deine Antwort!

Ich habe das mal getestet, aber entweder habe ich es falsch verstanden (was mich nicht wundern würde, offenbar reicht eine Woche Semesterferien, um jeglichen Zugang zur Mathematik zu verlieren ), oder es stimmt noch nicht ganz.

Im Anhang mal ein Bild: Der Ball kommt horizontal angeflogen und trifft so auf die rechte obere Kante, dass der Richtungsvektor (Mittelpunkt->Kollisionspunkt) "im 45°-Winkel steht", normiert also (1,1) entspricht.
Der Ball müsste dann, wie hier erörtert wurde, an dessen Normalenvektor abprallen, also senkrecht nach oben rollen (gelber Vektorpfeil).
Laut deiner Formel (und meiner Interpretation) bewegt er sich aber nach schräg rechts oben (Richtungsvektor (3,-2) ), was ja ansich nicht sein kann.

Woran liegt's?
Miniaturansicht angehängter Grafiken
kollision_205.png  
Florian Heft
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#55

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 30. Dez 2008, 14:06
ich dachte alle vektoren sind und bleiben normiert (das heisst, dass die norm gleich 1 ist, was der fall ist, wenn bei einem vektor die komponenten quadriert, addiert, gewurzelzieht 1 ergibt also auch wenn man nur quadriert und addiert)

aber wenn ich die Vektoren normiere klappt das auch nicht

ich denk nochmal drüber nach
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#56

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 30. Dez 2008, 14:28
Ein Kumpel hat jetzt tatsächlich eine funktionierende Lösung gewusst, die ich euch natürlich nicht vorenthalten will:

Zitat:
also zunaechst mal normierst du den geschwindigkeitsvektor (vx,vy), so dass er norm 1 hat (also vx^2+vy^2=1 ist).

dann ist das skalarprodukt aus geradenrichtungsvektor g = (gx,gy) und geschwindigkeitsvektor v = (vx,vy) gegeben durch <v,g> = vx*gx+vy*gy

vektorrechnung: die projektion von v auf g ist <v,g>*g (wenn v norm 1 hat)

damit ist das Lot von v auf g das orthogonale komplement dazu also v-<v,g>*g

das Lot musst Du nun 2x subtrahieren um zu spiegeln, also vneu = v - 2*(v-<v,g>*g)

dann waere für den fall dass v und g senkrecht sind vneu = -v, also einfach zurueck

Florian Heft
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#57

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 30. Dez 2008, 15:08
deckt sich das mit dem, was ich hier gerade ausgerechnet hab?

also zunächst richtungsvektor vorher und vektor mittelpunkt->kollisionspunkt normieren

dann:

vorher=(v1,v2)
Kollision=(k1,k2)
Ergebnis=(v1-2*Wurzel[v1²k1²+v2²k2²]*k1,v2-2*Wurzel[v1²k1²+v2²k2²]*k2)

oder wenn man nicht vorher normiert:

vorher=(v1,v2)
Kollision=(k1,k2)
Ergebnis=((v1/Wurzel[v1²+v2²])-2*Wurzel[(v1²/[v1²+v2²])(k1²/[k1²+k2²])+(v2²/[v1²+v2²])(k2²/[k1²+k2²])]*(k1/Wurzel[k1²+k2²]),(v2/Wurzel[v1²+v2²])-2*Wurzel[(v1²/[v1²+v2²])(k1²/[k1²+k2²])+(v2²/[v1²+v2²])(k2²/[k1²+k2²])]*(k2/Wurzel[k1²+k2²]))

  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#58

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 30. Dez 2008, 15:16
Zitat von dino:
nun das sind aber sehr sehr viele Punkte...
Deswegen braucht Kollisionberechnung in der Regel auch viel Rechenzeit, bei Spielen wird die Karte (oder was auch immer dein Spielbereich ist) deswegen in der Regel in Gebiete aufgeteil und die Objekte in diesen geordnet gespeichert, so dass bei der Berechnung nur die Punkte im selben Gebiet überprüft werden müssen.

Nachteile:
-keine Kollisionsberechnung, wenn deine Kugel mit überaschend hoher Geschwindigkeit von einem in ein anderes Gebiet übergeht, sowas muss man dann erst noch überprüfen.
-mit Objekten deren Mittelpunkt sich in verschiedenen Gebieten befindet, die aber aufgrund ihrer Größe trotzdem kolidieren müssten, siehts auch schwierig aus

Bei vielen (3D-)Spielen konnt man früher übrigens diese Unterteilung daran erkennen, dass nur eine bestimmte Anzahl Gebiete hinter dem Spieler noch gezeichnet wurde und danach ausgeblendet. Allerdings überprüft man da nun in der Regel einfach erst die Sichtbarkeit.
  Mit Zitat antworten Zitat
dino

Registriert seit: 15. Jul 2006
Ort: Bad Münstereifel
627 Beiträge
 
Delphi 5 Professional
 
#59

Re: Kugel/Kreis prallt von Eck/Kante ab

  Alt 30. Dez 2008, 15:20
Zitat:
also zunaechst mal normierst du den geschwindigkeitsvektor (vx,vy), so dass er norm 1 hat (also vx^2+vy^2=1 ist).

dann ist das skalarprodukt aus geradenrichtungsvektor g = (gx,gy) und geschwindigkeitsvektor v = (vx,vy) gegeben durch <v,g> = vx*gx+vy*gy

vektorrechnung: die projektion von v auf g ist <v,g>*g (wenn v norm 1 hat)

damit ist das Lot von v auf g das orthogonale komplement dazu also v-<v,g>*g

das Lot musst Du nun 2x subtrahieren um zu spiegeln, also vneu = v - 2*(v-<v,g>*g)

dann waere für den fall dass v und g senkrecht sind vneu = -v, also einfach zurueck
vorher(geschwindigkeitsvektor v?)=(v1,v2)
Kollision(geradenrichtungsvektor g?)=(k1,k2)

Skalarprodukt:

v1*k1+v2*k2

projektion auf vorher:

(k1*(v1*k1+v2*k2),k2*v1*k1+v2*k2)

Lot ist dann

( v1-k1*(v1*k1+v2*k2) , v2-k2*(v1*k1+v2*k2) )

Ergebnis = ( v1-2*(v1-k1*(v1*k1+v2*k2)) , v2-2*(v2-k2*(v1*k1+v2*k2)) )

oder auch

Ergebnis = ( 2*(k1*(v1*k1+v2*k2))-v1 , 2*k2*(v1*k1+v2*k2))-v2 )

ist wohl so garnicht das selbe wie

(v1-2*Wurzel[v1²k1²+v2²k2²]*k1,v2-2*Wurzel[v1²k1²+v2²k2²]*k2)

wobei er wahrscheinlich recht hat

oh man ich bin im 3. Semester MAthematik und baue hier nur blödsinn
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 6   « Erste     456   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz