![]() |
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:
Aber irgendwie scheint da immer false bei rauszukommen.
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; beispielwerte: x2:1 x1:2 y2:0 y1:0 z2:1 z1:1 Eigentlich müsste da doch true bei rauskommen :gruebel: |
Re: Nachbarn in 3 Dimensionen
Mach es doch noch einfacher.
Delphi-Quellcode:
Result := Sqrt(Sqr(x2-x1) + Sqr(y2-y1) + Sqr(z2-z1)) = 1;
|
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. |
Re: Nachbarn in 3 Dimensionen
Delphi-Quellcode:
Edit: ne, anders..
temp := Sqr(x2-x1) + Sqr(y2-y1) + Sqr(z2-z1);
Result := temp > 0 and temp <= 2;
Delphi-Quellcode:
temp := Sqr(x2-x1) + Sqr(y2-y1) + Sqr(z2-z1);
Result := temp > 0 and temp <= 3; |
Re: Nachbarn in 3 Dimensionen
Danke Dir!
Aber warum hat meine Methode nicht funktioniert? Da Grübel ich morgen nochmal drüber nach :gruebel: |
Re: Nachbarn in 3 Dimensionen
Ich kann auch keinen Fehler bei dir entdecken.
|
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 |
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... |
Re: Nachbarn in 3 Dimensionen
Hallo Nikolai,
Zitat:
Gruß Hawkeye |
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 13:46 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