Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Überprüfen ob ein rectangle ein anderes überlappt (https://www.delphipraxis.net/157461-ueberpruefen-ob-ein-rectangle-ein-anderes-ueberlappt.html)

fox67 13. Jan 2011 14:58

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Zitat:

Alle Antworten beziehen sich immer auf Koordinaten, diese haben keine Bindung zu einem Canvas, Image was auch immer. Wenn Du etwas malen willst hast Du auch schon Koordinaten.
Wenn Du vor dem Malen auf eine Kollision prüfen willst, verwende die genannten Funktionen um zu prüfen ob Du mit den Koordinaten mit denen Du malen möchtest ein "Problem" bekommst.
Oder meinst Du etwas ganz anderes ....
Also ich habe zwei Tcanvas rectangle das eine kann der spieler steuern dass andere versucht den anderen zu fangen und deshalb versuche ich zu überprüfen ob eins der canvas das andere überlappt

DeddyH 13. Jan 2011 15:00

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Du hast 2 Rechtecke, nicht Canvas.Rectangle :!: Diese Rechtecke werden ja wohl über 4 Punkte definiert. Nun nimmst Du diese 4 Punkte und wandelst sie mittels der Rect-Function in 2 TRect, die Du der Berechnung übergeben kannst.

Bummi 13. Jan 2011 15:32

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Meinst Du, Du haste zwei Images oder Shapes oder ähnliches welche Du hin und her schubst, falls ja dann Posting #5, ansonsten versteht hier niemand was Du nicht verstehst.

stahli 13. Jan 2011 15:40

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Ich kann mich vielleicht noch eher in Anfänger hineindenken: :-D

Du hast zwei Möglichkeiten:
Entweder, Du setzt 2 Komponenten (z.B. TImage oder testweise TPanel, eines rot, eines grün) auf ein Formular oder auf ein Panel, deren Position Du dann mit Left und Top änderst (dann brauchst Du Dich mit einem Canvas nicht herumschlagen, da die Komonenten automatisch gezeichnet werden)

-oder-

Du nimmst Dir irgendeine Komponente und zeichnest auf dessen Canvas zwei bunte Rechtecke (das ist etwas umständlicher, da Du diese Bereiche bei Verschiebungen löschen und versetzt neu zeichnen musst; auch das Steuern mit der Maus oder Tastatur ist etwas aufwendiger).

In BEIDEN Fällen kannst Du aber nicht automatisch prüfen, ob es Überschneidungen gibt. Du musst die 2 Bereiche in TRect-Variablen speichern (egal, was nun tatsächlich auf dem Bildschirm passiert) und kannst die zwei TRect auf Überscneidungen prüfen...

blauweiss 13. Jan 2011 17:47

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Zitat:

Zitat von Bummi (Beitrag 1074515)
Meinst Du, Du haste zwei Images oder Shapes oder ähnliches welche Du hin und her schubst, falls ja dann Posting #5, ansonsten versteht hier niemand was Du nicht verstehst.

Posting des Jahres :-D Bummi, ich liebe Deinen Schreibstil einfach :thumb:

DeddyH 13. Jan 2011 17:57

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Zitat:

Zitat von blauweiss (Beitrag 1074530)
ich liebe Deinen Schreibstil einfach :thumb:

Auf einem Canvas.Rectangle sähe das aber bestimmt anders aus :mrgreen:

Bummi 13. Jan 2011 20:10

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Zitat:

Canvas.Rectangle
ein No-go in diesem Thread, da wird sicher noch jemand fragen wie man da Kollisionen erkennen kann...

hoika 13. Jan 2011 20:28

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Hallo,

Google-Suche ist kaputt ?

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Steht doch alles schön da ...


Heiko

Bummi 13. Jan 2011 20:34

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
:wall::wall: wusst ich's doch :dance:
@hoika
Du hast den Threadverlauf nicht verfolgt,oder...

Memnarch 14. Jan 2011 10:51

AW: Überprüfen ob ein rectangle ein anderes überlappt
 
Blöde frage ABER:

Code:
function RectInRect(const Rect1, Rect2: TRect): Boolean;
begin
  Result := (Rect1.Left >= Rect2.Left) and
            (Rect1.Right <= Rect2.Right) and
            (Rect1.Top >= Rect2.Top) and
            (Rect1.Bottom <= Rect2.Bottom);
end;
//oder
function OverlapRect(const Rect1, Rect2: TRect): Boolean;
begin
  Result := (Rect1.Left < Rect2.Right) and
            (Rect1.Right > Rect2.Left) and
            (Rect1.Top < Rect2.Bottom) and
            (Rect1.Bottom > Rect2.Top);
end;
Kann es nicht sein das obige funktionen beide nicht zum ziel führen? Die overlap zum beispiel erfordert doch das ALLE4 punkte des ersten im zweiten Rect liegen. Overlap heißt für mich aber auch das schon ein punkt im Anderen rechteck genügt o.O(ebend überlappend/überschneidend)

Korrektes Overlapping müsste doch so aussehen(oder nicht?):

Code:
function IsOverlapping(ARect1, ARect2: TRect): Boolean;
begin
  Result := NOT((ARect1.Left > ARect2.Right) OR (ARect1.Right < ARect2.Left) OR (ARect1.Top < ARect2.Bottom) OR (ARect1.Bottom > ARect2.Top));
end:
MFG
Memnarch


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Seite 3 von 4     123 4      

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