![]() |
Abfrage ob sich Images überschneiden?
Hallo, ich suche ganz dringend eine Abfrage (Befehl/Code) um herauszufinden, ob sich 2 Images verschiedener Größe überschneiden/treffen.
Beispiel: Ein Ball(Image1) trifft von oben herunter auf einen sich bewegenden Gegenstand (Image2) Ich kann schlecht alle Koordinaten abfragen, gibt es dafür eine allg. Befehlsstruktur o.Ä.? Bzw: Wie mach ich solch eine Abfrage? Bitte schnell antworten, danke! |
Re: Abfrage ob sich Images überschneiden?
hi,
also bei zwei Rechtecke reicht es wenn du die Echpunkte der Rechtecke abfrägst ! bei einem Ball (rund) kannst du es auch so machen, solange das Rechteck immer senkrecht oder wagrecht ist ! cu, stefan2005 |
Re: Abfrage ob sich Images überschneiden?
Naja Problem ist, dass der 2. Gegenstand (IMage2) sich ja waagerecht bewegt.
Und das andere Image bewegt sich ja nur nach unten. Somit muss er auftreffen, aber evtl. ja auch nicht 100% direkt auf die Eckpunkte sondern nur überschneidend...ein wenig verschoben, aber noch drauf. |
Re: Abfrage ob sich Images überschneiden?
Bei zwei Bällen berechnest Du einfach die Entfernung zwischen den beiden Mittelpunkten und schaust ob diese kleiner
als die Summe der beiden Durchmesser sind.
Delphi-Quellcode:
type TBall=record
MPunkt:TPoint; radius:integer; end; var Ball1, Ball2:TBall function getroffen:boolean; begin if sqrt(sqr(Ball1.MPunkt.x-Ball2.MPunkt.x)+sqr(Ball1.Mpunkt.y-Ball2.MPunkt.y))<(Ball1.radius+Ball2.radius) then recult:=true else result:=false; end; |
Re: Abfrage ob sich Images überschneiden?
|
Re: Abfrage ob sich Images überschneiden?
Zitat:
|
Re: Abfrage ob sich Images überschneiden?
Tut mir leid hab mich falsch ausgedrückt, es sind 2 Images, 2 Rechtecke also! Tut mir leid, wie gehts damit?
Edit: Habs gesehen...InsectRect...ich schau mal, danke sehr! |
Re: Abfrage ob sich Images überschneiden?
Wollte es jetzt so machen:
Delphi-Quellcode:
Fehlermeldung: [Error] Unit1.pas(131): Undeclared identifier: 'Width'
procedure TForm1.Timer2Timer(Sender: TObject);
var schnittmenge, image1, image2: TRect; begin image1 := Rect(Image1.left,Image1.Top, Image1.left+Image1.Width,Image1.Top+Image1.Height); image2 := Rect(Image2.Left, Image2.Top, Image2.Left+Image2.Width,Image2.Top+Image2.Height); if intersectrect(Schnittmenge, image1, image2) then begin kollision; timer2.Enabled:=false; end; end; Hö? wie kann das sein? Btw...gibts dazu ein einfaches!?!?! beispiel? Hab beispielprogramm gefunden, aber ist mir zu hoch! Sorry! |
Re: Abfrage ob sich Images überschneiden?
Nix da mit Width!
Delphi-Quellcode:
Der Typ TRect definiert ein Rechteck.
Unit Types type TRect = packed record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end; So ungefähr: :)
Delphi-Quellcode:
Dasselbe bei Image1.height!
Image1.Right := Image1.left+Rechteckbreite;
Ach, jetzt sehe ich deinen eigentlichen Fehler: Du hast die Image-Komponente IMAGE1 und deinen Record IMAGE1 genannt ....so wird das natürlich nix. Benenne mal deine beiden Records nach z.B. img1 und img2 um.....dann gehts und du kannst Image1.left+Image1.width dann auch so stehenlassen. Alternativ geht auch das: (Fördert aber nicht die Übersichtlichkeit.)
Delphi-Quellcode:
.
. . image1 := Rect(Form1.Image1.left,Form1.Image1.Top, Form1.Image1.left+Form1.Image1.Width,Form1.Image1.Top+Form1.Image1.Height); . . . MfG GM |
Re: Abfrage ob sich Images überschneiden?
Moin!
TImage.BoundsRect MfG Muetze1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 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-2025 by Thomas Breitkreuz