Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nachbarn in 3 Dimensionen (https://www.delphipraxis.net/99554-nachbarn-3-dimensionen.html)

inherited 13. Sep 2007 21:52


Nachbarn in 3 Dimensionen
 
Hi,
ich versuche mit folgender FUnktion herauszufinden, ob das Feld mit den Koordinaten x2;y2;z2 ein Nachbar des Feldes x1;y1;z1 ist

Delphi-Quellcode:
function IsNeighbor(x1,y1,z1,x2,y2,z2: Integer): Boolean;
begin
  result:=false;
  if (x1=x2) and (y1=y2) and (z1=z2) then
    exit;
  result:= ((x2 in [x1-1..x1+1]) and (y2 in [y1-1..y1+1]) and (z2 in [z1-1..z1+1]));
end;
Aber irgendwie scheint da immer false bei rauszukommen.
beispielwerte:
x2:1 x1:2
y2:0 y1:0
z2:1 z1:1

Eigentlich müsste da doch true bei rauskommen :gruebel:

Dax 13. Sep 2007 21:56

Re: Nachbarn in 3 Dimensionen
 
Mach es doch noch einfacher.
Delphi-Quellcode:
Result := Sqrt(Sqr(x2-x1) + Sqr(y2-y1) + Sqr(z2-z1)) = 1;

inherited 13. Sep 2007 22:02

Re: Nachbarn in 3 Dimensionen
 
Das funktioniert zwar wunderbar für horizontale und vertikale nachbarn, nicht jedoch für schräg liegende. die müssen auch mit rein.
Trotzdem danke.

Dax 13. Sep 2007 22:03

Re: Nachbarn in 3 Dimensionen
 
Delphi-Quellcode:
temp := Sqr(x2-x1) + Sqr(y2-y1) + Sqr(z2-z1);
Result := temp > 0 and temp <= 2;
Edit: ne, anders..
Delphi-Quellcode:
temp := Sqr(x2-x1) + Sqr(y2-y1) + Sqr(z2-z1);
Result := temp > 0 and temp <= 3;

inherited 13. Sep 2007 22:20

Re: Nachbarn in 3 Dimensionen
 
Danke Dir!
Aber warum hat meine Methode nicht funktioniert?
Da Grübel ich morgen nochmal drüber nach :gruebel:

Dax 13. Sep 2007 22:46

Re: Nachbarn in 3 Dimensionen
 
Ich kann auch keinen Fehler bei dir entdecken.

Kedariodakon 13. Sep 2007 23:08

Re: Nachbarn in 3 Dimensionen
 
Sobald du im negativen Bereich bist, bricht der die Funktion ab...
Sprich bei deinem Beispiel bei y1 = y2 = 0, da endet die Funktion beim 0 in [ -1, 0, 1 ]

Warum das so ist ka, meine Vermutung ist, dass Mengentypen immer bei 0 anfangen und -1 damit die untere Grenze verletzt...
Aber da müste er eigentlich dein ganzes Konstrukt schon von vornerein anmekern...

Bye Christian

inherited 14. Sep 2007 12:03

Re: Nachbarn in 3 Dimensionen
 
Offensichtlich hast du hinsichtlich der unteren Grenze recht.
Aber warum steht davon nichts in der Delphi-Hilfe und warum meckert der COmpiler das dann nicht an? :gruebel:
Edit: Ok, bei einem Ausruck wie "in [-1..42]" meckert er es sofort an. Ich finde der Compiler könnte bei typisierten Variablen dann wenigstens eine Warnung ausgeben...

Hawkeye219 14. Sep 2007 12:35

Re: Nachbarn in 3 Dimensionen
 
Hallo Nikolai,

Zitat:

Zitat von Hilfe von Delphi 2006
Die möglichen Werte eines Mengentyps sind Teilmengen des Basistyps, einschließlich der leeren Menge. Der Basistyp darf aus maximal 256 Werten bestehen. Die Ordinalpositionen der Werte müssen zwischen 0 und 255 liegen.

Woher sollte der Compiler den Wert des Funktionsparameters kennen, um eine entsprechende Warnung auszugeben?

Gruß Hawkeye

inherited 14. Sep 2007 13:41

Re: Nachbarn in 3 Dimensionen
 
Moin,

den Teil muss ich in der Hilfe übersehen haben, hab doch extra nachgeschaut :?
Und wissen soll er es ja garnicht, er soll mich nur warnen wenn ich Typen angebe die <0 werden können


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