8

I have a graph that consists of x and y from Z/11. Is it possible to programmatically draw the lines that have a slope of 2?

Like from (0,0) to (5,10) and (6,12) would become (6,1) because of modulo 11. Just like the graph below.

Z/11

For that graph I use the following code. But I have to manually calculate the start and end points.

    \begin{tikzpicture}
    \coordinate (Origin)   at (0,0);
    \coordinate (XAxisMin) at (0,0);
    \coordinate (XAxisMax) at (11,0);
    \coordinate (YAxisMin) at (0,0);
    \coordinate (YAxisMax) at (0,11);

    \draw [thick, gray,-latex] (XAxisMin) -- (XAxisMax);% Draw x axis
    \draw [thick, gray,-latex] (YAxisMin) -- (YAxisMax);% Draw y axis

    \foreach \x in {0,1,...,10}{% Two indices running over each
      \foreach \y in {0,1,...,10}{% node on the grid we have drawn 
        \node[draw,circle,inner sep=1pt,fill] at (\x,\y) {};
            % Places a dot at those points
      }
    }

    \draw [thin, blue,-latex] (Origin) -- (5,10);
      \draw [thin, blue,-latex] (6,1) -- (10,9);
\end{tikzpicture}
Chris
  • 181
  • 1
  • 3

1 Answers1

16

You can use the Mod(<num>,<base>) function to get the modulus, but I didn't understand if you want it in the for each loop or not so here is for the loop

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \coordinate (Origin)   at (0,0);
    \coordinate (XAxisMin) at (0,0);
    \coordinate (XAxisMax) at (11,0);
    \coordinate (YAxisMin) at (0,0);
    \coordinate (YAxisMax) at (0,11);

    \draw [thick, gray,-latex] (XAxisMin) -- (XAxisMax);% Draw x axis
    \draw [thick, gray,-latex] (YAxisMin) -- (YAxisMax);% Draw y axis

    \foreach \x in {0,1,...,10}{% Two indices running over each
      \foreach \y[evaluate=\y as \yi using {Mod(\y,11)}] in {0,1,...,15}{
        \node[draw,circle,inner sep=1pt,fill] at (\x,\y) {};
        \draw (0,0) -- (\x,\yi);
            % Places a dot at those points
      }
    }
\end{tikzpicture}
\end{document}

enter image description here

I hope I understood it correctly,

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \coordinate (Origin)   at (0,0);
    \coordinate (XAxisMin) at (0,0);
    \coordinate (XAxisMax) at (11,0);
    \coordinate (YAxisMin) at (0,0);
    \coordinate (YAxisMax) at (0,11);

    \draw [thick, gray,-latex] (XAxisMin) -- (XAxisMax);% Draw x axis
    \draw [thick, gray,-latex] (YAxisMin) -- (YAxisMax);% Draw y axis

\draw  (0,0)  \foreach \x in {1,...,11}{
                \foreach \y in {1,...,11}{
                  node[draw,circle,inner sep=1pt,fill] at (\x-1,\y-1) {}
                  -- ({Mod(\x,11)},{Mod(2*\x,11)})
                }
              };
\end{tikzpicture}
\end{document}

enter image description here

percusse
  • 157,807
  • Hi. That is already pretty nice. But it should calculate from a starting point and then continue until it gets back to the starting point.. (0,0) --> (1,2) --> (2,4) --> (3,6) --> (4,8) --> (5,10) --> (6,1) --> (7,3) --> (8,5) --> (9,7) --> (10,9) --> (0,0). This behaviour is due to the modulo with a slope of 2. – Chris Apr 01 '14 at 14:40
  • I guess the calculation would be x=x mod 11 and y = (x+2) mod 11 for y. While – Chris Apr 01 '14 at 14:44
  • It is almost perfect yes. The line (0,0) -> (10,9) should not exist and (5,10) --> (6,1) should also not exist. Plus the line that starts at (6,1) should go all the way down to the x axis.. (5.5,0) would it be.. – Chris Apr 01 '14 at 15:30