Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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}
share|improve this question

1 Answer 1

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

share|improve this answer
    
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 1 at 14:40
    
I guess the calculation would be x=x mod 11 and y = (x+2) mod 11 for y. While –  Chris Apr 1 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 1 at 15:30

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.