Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zwei Quader vergleichen (https://www.delphipraxis.net/109226-zwei-quader-vergleichen.html)

shmia 26. Feb 2008 16:22


zwei Quader vergleichen
 
Ich habe zwei Quader jeweils mit Länge, Breite und Höhe und möchte nun wissen, ob Quader A vollständig in Quader B hineinpasst.

Beispiel:
Quader A: Länge: 20 Breite: 40 Höhe: 5
Quader B: Länge: 45 Breite: 20 Höhe: 5

Also passt A vollständig in B; man muss ihn nur drehen.

Wie könnte man das ermitteln, ohne in If-Abfragen zu ertrinken ?

marabu 26. Feb 2008 16:42

Re: zwei Quader vergleichen
 
Hallo Andreas,

eine spontane Idee: Sortiere die Dimensionierung absteigend und vergleiche paarweise auf kleiner-oder-gleich für "passt rein".

Freundliche Grüße

bluesbear 26. Feb 2008 19:26

Re: zwei Quader vergleichen
 
Zitat:

Zitat von shmia
Wie könnte man das ermitteln, ohne in If-Abfragen zu ertrinken ?

Spontane Idee von mir: Die Fälle der Reihe nach reduzieren. Wenn das Volumen von A größer ist als das von B, passt A garantiert nicht in B rein. Wenn die längste Kannte von A länger ist als die längste Kante von B, auch nicht. Was könnte A noch für Eigenschaften haben, die verhindern könnten, daß er in B reinpasst?
Das Problem ließe sich sicher auch mathematisch lösen, aber lineare Algebra war noch nie meine Stärke.

Dax 26. Feb 2008 19:32

Re: zwei Quader vergleichen
 
Nunja, marabu hat schon recht: wenn für jede Seite Bi aus sort(B) für die Seite Ai aus sort(A) gilt, dass Ai <= Bi, dann passt A in B...

bluesbear 26. Feb 2008 19:47

Re: zwei Quader vergleichen
 
Zitat:

Zitat von Dax
Nunja, marabu hat schon recht: wenn für jede Seite Bi aus sort(B) für die Seite Ai aus sort(A) gilt, dass Ai <= Bi, dann passt A in B...

Achso! Jetzt habe ich erst verstanden, was er gemeint hat. Stimmt! Ich glaube, ich denke da sehr "haptisch". Ich hatte mir das als LEGO vorgestellt... :wink:

shmia 27. Feb 2008 12:27

Re: zwei Quader vergleichen
 
Ich denke mal, das Vorsortieren der Dimensionen ist wohl am Besten.
Hab's jetzt so gelöst (aber noch nicht getestet):
Delphi-Quellcode:
function CompareBoxes(a1,a2,a3,b1,b2,b3:Currency): Integer;
  procedure SwapCurreny(var a, b : Currency);
  var
    t : Currency;
  begin
    t := a; a:= b; b := t;
  end;

  procedure Sort3(var x,y,z:Currency);
  begin
    if x > y then SwapCurreny(x,y);
    if x > z then SwapCurreny(x,z);
    if y > z then SwapCurreny(y,z);
  end;
begin
  Sort3(a1,a2,a3);
  Sort3(b1,b2,b3);
  if (a1 = b1) and (a2 = b2) and (a3 = b3) then
    Result := 0    // Quader sind gleich
  else if (a1 <= b1) and (a2 <= b2) and (a3 <= b3) then
    Result := 1    // Quader a ist in Quader b enthalten
  else if (a1 >= b1) and (a2 >= b2) and (a3 >= b3) then
    Result := -1    // Quader b ist in Quader a enthalten
  else
    Result := 2;   // Quader a und b durchdringen sich
end;

marabu 27. Feb 2008 12:37

Re: zwei Quader vergleichen
 
Eventuell musst du deinen Sortieralgorithmus nochmal überdenken.

EDIT: Wird schon schief gehen, ich hatte den call-by-reference in SwapCurrency() übersehen ...


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