Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kollision zweier Ellipsen? (https://www.delphipraxis.net/93688-kollision-zweier-ellipsen.html)

igel457 9. Jun 2007 16:39


Kollision zweier Ellipsen?
 
Hallo,

ich möchte überprüfen, ob zwei Ellipsen miteinander kollidieren. Für Kugeln geht das ja ganz einfach:
Delphi-Quellcode:
collide := sqr(m1.x-m2.x)+sqr(m1.y-m2.x) <= sqr(r1 + r2);
Aber wie geht das für Ellipsen? Meine Überlegung ist die Ellipsen praktisch wieder zu Kugeln zurückzustrecken - da die Ellipsen aber mit verschiedenen Seitenverhältnisen sein können, haut das, was bei "Punkt in Ellipse" noch wunderbar klappt, nicht so richtig hin. Hat jemand eine Idee?

Danke,
Igel457

OldGrumpy 9. Jun 2007 17:03

Re: Kollision zweier Ellipsen?
 
Kevin Lindsey hat dazu auf seiner Website eine Riesensammlung an Geometriefunktionen - leider zwar nur in Java, aber die Umsetzung dürfte sich vom Aufwand her sicherlich in Grenzen halten :) Lohnt sich bestimmt, nen Blick reinzuwerfen.

igel457 9. Jun 2007 18:42

Re: Kollision zweier Ellipsen?
 
Erstmal vielen dank für den Link.
Das scheint aber durchaus ein wenig komplizierter zu sein - Ich denke, dass ich einfach mit einigen Punkten der Außenlinie überprüfe, ob eine Kollision stattfindet - das ist zwar nich so akkurat, aber für meine Spriteengine sollte es allemals reichen. Wenn jemand aber noch eine einfache (sprich nicht unbedingt mehr als 30 Zeilen) Lösung hat, die auch noch schnell funktioniert, bin ich für diese natürlich nach wie vor offen :-).

Nochmal Danke für die Hilfe,
igel457

Hawkeye219 9. Jun 2007 19:03

Re: Kollision zweier Ellipsen?
 
Hallo Andreas,

du könntest noch den Weg über das WinAPI gehen. Zunächst mit MSDN-Library durchsuchenCreateEllipticRgn oder MSDN-Library durchsuchenCreateEllipticRgnIndirect zwei Regionen für die Ellipsen erstellen und anschließend mit MSDN-Library durchsuchenCombineRgn und dem Modus RGN_AND den Durchschnitt beider Regionen ermitteln. Ob dies für deine Engine schnell genug ist, vermag ich allerdings nicht zu sagen.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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