DMUG-Archiv 2009

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Aufgabe::Cantornummerierung

Herr Welke hat gesagt (priv. comm.)

(* S. Welke, 14.3.2009 *)
Remove[Cantor, InverseCantor]
(* Mit dir = 0 bzw. dir = 1 wechselt man die Richtung. *)
Cantor[{x_: Integer, y_: Integer}, dir_: 0] :=
(x + y)*(x + y + 2)/2 + (-1)^(x + y + dir)*(x - y)/2;

InverseCantor[k_Integer?NonNegative, dir_Integer:0] :=
 {#1, #2 - #1} &[#/2 + (-1)^(# + dir) (k - # - #^2/2), #] &[
  Floor[(Sqrt[1 + 8 k] - 1)/2]]

man kann auch sagen

cantorInverseD[k_Integer?NonNegative, dir_:-1] :=
 {Min[k - 2 (1 + #) (1 + # + dir/2),
      2 (2 + #) (2 + # + dir/2) - k - 1] &[
    Floor[(Sqrt[1 + 8 k] - 4 - dir)/4]],
   Min[k - 2 (1 + #) (1 + # - dir/2),
      2 (2 + #) (2 + # - dir/2) - k - 1] &[
    Floor[(Sqrt[1 + 8 k] - 4 + dir)/4]]} /; (dir == -1 || dir == 1)


Gruss
Udo.


Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html