AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Abfrage ob sich Images überschneiden?
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage ob sich Images überschneiden?

Ein Thema von arne99 · begonnen am 17. Mär 2005 · letzter Beitrag vom 18. Mär 2005
Antwort Antwort
Benutzerbild von arne99
arne99

Registriert seit: 11. Jan 2005
Ort: Hamburg
158 Beiträge
 
Turbo Delphi für Win32
 
#1

Abfrage ob sich Images überschneiden?

  Alt 17. Mär 2005, 22:31
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!
Arne
  Mit Zitat antworten Zitat
stefan2005

Registriert seit: 30. Sep 2003
Ort: Puchheim
250 Beiträge
 
Delphi 6 Personal
 
#2

Re: Abfrage ob sich Images überschneiden?

  Alt 17. Mär 2005, 22:36
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
  Mit Zitat antworten Zitat
Benutzerbild von arne99
arne99

Registriert seit: 11. Jan 2005
Ort: Hamburg
158 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Abfrage ob sich Images überschneiden?

  Alt 17. Mär 2005, 22:45
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.
Arne
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Abfrage ob sich Images überschneiden?

  Alt 17. Mär 2005, 22:50
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;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von gmarts
gmarts

Registriert seit: 4. Apr 2004
Ort: Templin
290 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Abfrage ob sich Images überschneiden?

  Alt 17. Mär 2005, 22:54
Hi
Ich werfe mal für die Mathematikfaulen Hier im Forum suchen IntersectRect in die Runde.

MfG GM
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Click;
end;
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Abfrage ob sich Images überschneiden?

  Alt 17. Mär 2005, 23:06
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?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von arne99
arne99

Registriert seit: 11. Jan 2005
Ort: Hamburg
158 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Abfrage ob sich Images überschneiden?

  Alt 17. Mär 2005, 23:10
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!
Arne
  Mit Zitat antworten Zitat
Benutzerbild von arne99
arne99

Registriert seit: 11. Jan 2005
Ort: Hamburg
158 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Abfrage ob sich Images überschneiden?

  Alt 17. Mär 2005, 23:25
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!
Arne
  Mit Zitat antworten Zitat
Benutzerbild von gmarts
gmarts

Registriert seit: 4. Apr 2004
Ort: Templin
290 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Abfrage ob sich Images überschneiden?

  Alt 18. Mär 2005, 12:43
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:
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
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Click;
end;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Abfrage ob sich Images überschneiden?

  Alt 18. Mär 2005, 13:42
Moin!

TImage.BoundsRect

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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