Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Abfrage ob sich Images überschneiden? (https://www.delphipraxis.net/42367-abfrage-ob-sich-images-ueberschneiden.html)

arne99 17. Mär 2005 21:31


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!

stefan2005 17. Mär 2005 21:36

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

arne99 17. Mär 2005 21:45

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.

atreju2oo0 17. Mär 2005 21:50

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;

gmarts 17. Mär 2005 21:54

Re: Abfrage ob sich Images überschneiden?
 
Hi
Ich werfe mal für die Mathematikfaulen Hier im Forum suchen IntersectRect in die Runde. ;)

MfG GM

atreju2oo0 17. Mär 2005 22:06

Re: Abfrage ob sich Images überschneiden?
 
Zitat:

Zitat von gmarts
Hi
Ich werfe mal für die Mathematikfaulen Hier im Forum suchen IntersectRect in die Runde. ;)

MfG GM

Das ist natürlich ne sehr elegante Lösung, aber bei Kreisen hilft das nicht weiter, oder?

arne99 17. Mär 2005 22:10

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!

arne99 17. Mär 2005 22:25

Re: Abfrage ob sich Images überschneiden?
 
Wollte es jetzt so machen:

Delphi-Quellcode:
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;
Fehlermeldung: [Error] Unit1.pas(131): Undeclared identifier: 'Width'

Hö? wie kann das sein?

Btw...gibts dazu ein einfaches!?!?! beispiel?
Hab beispielprogramm gefunden, aber ist mir zu hoch! Sorry!

gmarts 18. Mär 2005 11:43

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:
Image1.Right := Image1.left+Rechteckbreite;
Dasselbe bei Image1.height!

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

Muetze1 18. Mär 2005 12:42

Re: Abfrage ob sich Images überschneiden?
 
Moin!

TImage.BoundsRect

MfG
Muetze1


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