AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Algorithmus gesucht: Abstand von zwei Hexagons
Thema durchsuchen
Ansicht
Themen-Optionen

Algorithmus gesucht: Abstand von zwei Hexagons

Ein Thema von Codewalker · begonnen am 16. Aug 2008 · letzter Beitrag vom 17. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#1

Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 16. Aug 2008, 23:24
Hallo zusammen.

Ich grübele seit Tagen über einem Problem und habe das Gefühl, ich sehe den Wald vor lauter Bäumen nicht. Ich suche eine Möglichkeit, in einem Spielfeld mit sechseckigen Spielfeldern (á lá Siedler von Catan) den Abstand zwischen zwei beliebigen Hexagons zu bestimmen (in Feldern, nicht in Pixeln).

Im angehangenen Screenshot sieht man (zwar klein, aber zu sehen) die Nummerierung der Felder (also X und Y-Koordinaten). Ich würde gerne nur aus den Nummern zweier Felder den Abstand zwischen diesen beiden Feldern bestimmen (in Feldern).

Beispiel: Wieviel Felder muss ich "laufen" um von 0,0 zu 13,17 zu kommen?

Bin für jede Idee/Code/etc. dankbar.

(Benötige ich für die Programmierung der Wegfindung - schon irgendwie merkwürdig )

Grüße
Miniaturansicht angehängter Grafiken
screenshot_945.jpg  
Thomas
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 16. Aug 2008, 23:26
Screenshot?
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 16. Aug 2008, 23:31
Möhp, ich wollte extra dran denken. Ist wohl schon zu spät am Abend
Danke für den Hinweis
Thomas
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 17. Aug 2008, 00:23
Vielleicht so...
Delphi-Quellcode:
function Schritte(X1, Y1, X2, Y2:integer):integer;
var X, Y:integer;
begin
  if (X1 <= 0) or (X2 <= 0) or (Y1 <= 0) or (Y2 <= 0) then
    raise Exception.Create('Die Werte müssen alle größer Null sein.');
  X:=abs(X1 - X2);
  Y:=abs(Y1 - Y2);
  if X = 0 then
    Result:=Y
  else if Y = 0 then
    Result:=X
  else begin
    if (X > 1) and (Y > 1) then
      dec(X);
    Result:=X + Y;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 17. Aug 2008, 10:01
Hi Omata. Das sieht schon sehr gut aus . Da ich die Felder beginnend mit 0 nummeriere musste ich noch jeweils +1 auf die Feldbezeichnung addieren.
Wenn ich jetzt aber vom Feld (0,2) auf das Feld (6,1) gehen will, liefert deine Funktion 7 - richtig wäre aber 6 Felder.
Ist suche schon danach, aber vielleicht hast du eine Idee, woran es liegt.
Thomas
  Mit Zitat antworten Zitat
cmrudolph

Registriert seit: 14. Aug 2006
29 Beiträge
 
Delphi 7 Professional
 
#6

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 17. Aug 2008, 10:25
Wenn mir kein Fehler unterlaufen ist, dann funktioniert dieser Quellcode:

Delphi-Quellcode:
function Schritte(X1, Y1, X2, Y2:Integer): Integer;
var
  X,Y: Integer;
begin
  if (X1 < 0) or (X2 < 0) or (Y1 < 0) or (Y2 < 0) then
    raise Exception.Create('Die Werte müssen alle größer oder gleich Null sein.');

  X:=abs(X1 - X2);
  Y:=abs(Y1 - Y2);
  
  Result:=X;
  
  if (Y*2 > X) then begin
    inc(X,X mod 2);
    dec(Y,X div 2);
    inc(Result,Y);
  end;
end;
Edit: an Index beginnend bei 0 angepasst
Edit 2: Exit entfernt
Edit 3: Code funktioniert noch nicht 100%ig - Beispiel: 2-2 9-6
Edit 4: Fix
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 17. Aug 2008, 10:31
Leider auch nur fast. Wenn du als Ausgangspunkt z.B. 0,0 nimmst und nach 0,11 gehst - dann muss man 12 Felder laufen, die Funktion liefert aber nur 11. Evtl. muss man ja Unterscheiden, ob man von einer geraden in eine ungerade Reihe wechselt. Ich versuch das mal...

Edit: Ich habe am Ende noch folgendes eingefügt:

Delphi-Quellcode:
  if Odd(X1) <> Odd(X2) then
   Inc(Result,1);
Damit ist es bisher korrekt, außer bei zwei direkt benachbarten Feldern. Da kommt dann 2 statt 1 raus - aber das ist auch noch zu machen
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 17. Aug 2008, 10:37
So funktioniert es (auch mit 2-2 9-6 ). Wenn von Euch kein Veto mehr kommt (meine Test klappen alle) würde ich den doch glatt für die CodeLib vorschlagen (daher neuer Beitrag). Danke an Euch beide für Mühe und Zeit, ihr seid spitze

Delphi-Quellcode:
function Schritte(X1, Y1, X2, Y2:Integer): Integer;
var
  X,Y: Integer;
begin
  if (X1 < 0) or (X2 < 0) or (Y1 < 0) or (Y2 < 0) then
    raise Exception.Create('Die Werte müssen alle größer oder gleich Null sein.');

  X:=abs(X1 - X2);
  Y:=abs(Y1 - Y2);
 
  Result:=X;
 
  if (Y*2 > X) then begin
    inc(X,X mod 2);
    dec(Y,X div 2);
    inc(Result,Y);
  end;
  if (Odd(X1) <> Odd(X2)) and (Result <> 1) then
   Inc(Result,1);
Thomas
  Mit Zitat antworten Zitat
cmrudolph

Registriert seit: 14. Aug 2006
29 Beiträge
 
Delphi 7 Professional
 
#9

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 17. Aug 2008, 10:38
Edit:
gut, wenn der Code so läuft
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Algorithmus gesucht: Abstand von zwei Hexagons

  Alt 17. Aug 2008, 11:30
Hallo,

ich würde ein anderes Koordinatensystem wählen. Zwei horizontal benachbarte Waben sollten eine Abszissendifferenz dX von 2 haben und zwei vertikal benachbarte Waben eine entsprechende Ordinatendifferenz dY.

Dann sollte gelten:

Code:
D = dy/2             | dX = 0
D = dx              | dY = 0 
D = dx + (dy - dx/2) | dY > dX
D = dy + (dx - dy)  | dX >= dY
Getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:30 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