Entwickler-Ecke

Multimedia / Grafik - Kollisionsprüfung


frankyboy - Sa 12.04.03 18:59
Titel: Kollisionsprüfung
Hallo,

kann mir jemand einen Tipp geben, wie man (relativ einfach) prüfen kann, ob ein Kreis gegen ein Rechteck stößt. Das ganze soll auf einer TImage-Komponente durchgeführt werden.
Ich habe jetzt schon ewig rumprobiert, hatte auch schon einige (meiner Meinung nach :wink: ) geniale Ideen, aber beim Testen hat es immer nur teilweise funktioniert. :(

Ich bin für Tipp (aber auch für Komplettlösungen :lol: )dankbar
Frankyboy


Aya - Mo 14.04.03 09:38

Hi,

ich hab zwar keine lösung für dein Problem direkt, aber nen kleinen tipp evtl... ;)

Schau mal hier:
http://www.gametutorials.com/download/OpenGL/SpherePolyCollision_OGL.zip

Das ist ein Tutorial in dem gezeigt wird wie man prüft ob eine Kugel mit einem Polygon kollidiert... (allerdings in C++, aber is ja egal.. die rechnung is die gleiche) vieleicht schaffst du es dir daraus das ganze für 2D abzuleiten, ansonsten... tu einfach so als wäre bei dir alles 3D ;)

Au'revoir,
Aya~


frankyboy - Mo 14.04.03 12:27

Erstmal Danke für die Hilfe,

ich werde mal schauen, ob ich da was passendes für mich rausziehen kann.

MfG Frankyboy

PS: Ich bin für weitere Tipps offen, Falls ich mir diesem nicht zu Rande komme :wink:


Sunreader - Mo 14.04.03 17:26

Kann das rechteck schräg sein oder nur ein standart teil?

Sonst würde ich es irgendwieso probieren:

//erst prüfen, ob der kreismittelpunkt näher als der radius an einem eckpunkt liegt:
if ((x1- kx)^2 + (y1- ky)^2 < kr) or ((x2- kx)^2 + (y1- ky)^2 < kr) or ((x1- kx)^2 + (y2- ky)^2 < kr) or ((x2- kx)^2 + (y2- ky)^2 < kr) then

//dann prüfen ob der kreis links und rechts einen kleineren abstand als der radius von dem rechteck hat und wizschen den x und y koordinaten des eckes liegt
if ((abs(x1-kx)< kr) or (abs(x2-kx)< kr)) and ((y1>ky) and (y2<ky)) then

//...und dasselbe in y- richtung
if ((abs(y1-kx)< kr) or (abs(y2-kx)< kr)) and ((x1>ky) and (x2<ky)) then

weiß nich genau ob das klappt, so würde ich es auf jeden fall versuchen...
_________________________________________
x1,x2,y1,y2 sind rechteckskoordinaten, kx und ky kreismittelpunktskoordinaten und kr der radius.


Sunreader - Mo 14.04.03 17:28

bei der ersten if-zeile muss es natürlich immer kr*kr heissen, sonst funktioniert der pytagoras ja nicht...


frankyboy - Mo 14.04.03 20:06

Erstmal vielen Dank für die Hilfe. Ich glaube, dass ich es jetzt schaffe. :D

MfG Frankyboy