AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nachbarn in 3 Dimensionen

Ein Thema von inherited · begonnen am 13. Sep 2007 · letzter Beitrag vom 14. Sep 2007
Antwort Antwort
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#1

Nachbarn in 3 Dimensionen

  Alt 13. Sep 2007, 21:52
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
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Nachbarn in 3 Dimensionen

  Alt 13. Sep 2007, 21:56
Mach es doch noch einfacher.Result := Sqrt(Sqr(x2-x1) + Sqr(y2-y1) + Sqr(z2-z1)) = 1;
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Nachbarn in 3 Dimensionen

  Alt 13. Sep 2007, 22:02
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.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Nachbarn in 3 Dimensionen

  Alt 13. Sep 2007, 22:03
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;
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Nachbarn in 3 Dimensionen

  Alt 13. Sep 2007, 22:20
Danke Dir!
Aber warum hat meine Methode nicht funktioniert?
Da Grübel ich morgen nochmal drüber nach
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Nachbarn in 3 Dimensionen

  Alt 13. Sep 2007, 22:46
Ich kann auch keinen Fehler bei dir entdecken.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Nachbarn in 3 Dimensionen

  Alt 13. Sep 2007, 23:08
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
Christian
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Nachbarn in 3 Dimensionen

  Alt 14. Sep 2007, 12:03
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?
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...
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Nachbarn in 3 Dimensionen

  Alt 14. Sep 2007, 12:35
Hallo Nikolai,

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
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Nachbarn in 3 Dimensionen

  Alt 14. Sep 2007, 13:41
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
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  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 18:38 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