Dibuja el toro plano.

Dibuja el toro plano.

Quiero graficar una curva sobre el toro plano, pero no en todo el R^2plano, sino en el cuadrado [0,1]x[0,1].

Para ello, he creado un "do... while" con sólo los datos iniciales de la pendiente racional. Esto es:

let m=p/q
let fx(u)=m(1-u) and fy(u)=(1-u)/m
x=0
DO
y=fx(x)
draw (x,0) -- (1,y);
x=fy(y)
draw (0,y) -- (x,1);
WHILE (x=1)

Pido disculpas por los grandes errores en mi código. Acabo de escribir mi idea ya que no sé cómo hacerlo en LaTeX, usandoTikZPor ejemplo. ¿Cómo puedo hacerlo?

Ya lo hice manualmente, pero no es lo más óptimo. Se supone que intentar poner m=3/4genera lo siguiente:

Ingrese la descripción de la imagen aquí

No quiero codificar donde tengo que trazar todo manualmente como el siguiente:

\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[red] (0,0) -- (1,3/4);
\draw[red] (0,3/4) -- (1/3,1);
\draw[red] (1/3,0) -- (1,1/2);
\draw[red] (0,1/2) -- (2/3,1);
\draw[red] (2/3,0) -- (1,1/4);
\draw[red] (0,1/4) -- (1,1);
\draw (0,0) -- (1,0) -- (1,1) -- (0,1) -- (0,0) -- (1,0);
\end{tikzpicture}
\end{document}

Respuesta1

Aquí tienes una opción. Definí un comando \flattoruscon tres argumentos:

  1. (opcional) El lado del cuadrado en la imagen de TikZ, en cm. Puse 4 como valor predeterminado, pero, por supuesto, puedes cambiarlo fácilmente.
  2. El número de columnas en las que se dividirá el cuadrado.
  3. El número de filas en las que se dividirá el cuadrado.
\documentclass{article}
\usepackage{tikz}
\newcounter{mx}
\newcounter{my}
\newlength{\squareside}
\newcommand*{\flattorus}[3][4]{%
    \setcounter{mx}{#2}
    \setcounter{my}{#3}
    \addtocounter{mx}{-1}
    \addtocounter{my}{-1}
    \setlength{\squareside}{#1 cm}

    \begin{tikzpicture}[x=\dimexpr\squareside/#2, y=\dimexpr\squareside/#3]
        \draw[thick] (0,0) rectangle (#2,#3);
        \foreach \x in {0, ..., \value{mx}}
            \foreach \y in {0, ..., \value{my}}{
                \draw (\x,\y) -- ++(0,1);
                \draw (\x,\y) -- ++(1,0);
                \draw[red, thick] (\x,\y) -- ++(1,1);
            };
        \node[below left] at (0,0) {0};
        \node[below] at (#2,0) {1};
        \node[left] at (0,#3) {1};
        \foreach \x in {1, ..., \value{mx}}
            \node[below] at (\x,0) {\x/#2};
        \foreach \y in {1, ..., \value{my}}
            \node[left] at (0,\y) {\y/#3};
    \end{tikzpicture}
}
\begin{document}
\flattorus{3}{4}
\flattorus{5}{2}
\flattorus[2]{2}{3}
\end{document}

Respuesta2

@Vincent (+1) publicó una buena solución, pero ya estaba en proceso, así que pensé en publicarla como alternativa.

Aquí hay una macro \flattorusque toma dos argumentos (y un argumento opcional adicional) para dibujar el toro plano. \flattorus[<scale factor>]{y}{x}Dibuja la línea de pendiente y/xsobre el toroide. La escala predeterminada es 2, lo que produce un cuadrado con una longitud de lado de 2 cm.

Por ejemplo, \flattorus{3}{4}\qquad\flattorus{5}{3}produce:

ingrese la descripción de la imagen aquí

y \flattorus[6]{10}{11}produce

ingrese la descripción de la imagen aquí

\documentclass{article}

\usepackage{tikz}

\newcommand{\flattorus}[3][2]{\begin{tikzpicture}[scale=#1]
    \foreach \k[evaluate=\k as \j using int(\k-1)] in {2,...,#2}{
        \draw[gray!30] ({(\j)/#2},0)node[black, below]{$\frac{\j}{#2}$}--++(0,1);}
    \foreach \k[evaluate=\k as \j using int(\k-1), evaluate=\k as \p using #2*#3] in {2,...,#3}{\xdef\xy{\p}
        \draw[gray!30] (0,{(\j)/#3})node[black, left]{$^{\j}\!/\!_{#3}$}--++(1,0);}
    \foreach \k[evaluate=\k as \j using int(\k-1), evaluate=\k as \x using frac(\k*#3/\xy), evaluate=\k as \y using frac(\k*#2/\xy)] in {1,...,\xy}{
        \draw[red, thick]({frac(\j*#3/\xy)},{frac(\j*#2/\xy)})--({\x+less(\x,1/\xy)},{\y+less(\y,1/\xy)});}
    \draw (0,0)node[below left]{0}--(1,0)node[below]{1}--(1,1)--(0,1)node[left]{1}--cycle;
    \end{tikzpicture}}

\begin{document}

\flattorus{3}{4}\qquad\flattorus{5}{3}

\flattorus[6]{10}{11}

\end{document}

Respuesta3

Pruebe este código:

\documentclass[10pt,a4paper]{article}

\usepackage{tikz}
\begin{document}
    \begin{tikzpicture}[scale=10]
        \draw[gray!30,xstep=.3333,ystep=.25] (0,0) grid (1,1);
        
        \draw[red,line width=2pt] (0,0) -- (1,3/4);
        \draw[red,line width=2pt] (0,3/4) -- (1/3,1);
        \draw[red,line width=2pt] (1/3,0) -- (1,1/2);
        \draw[red,line width=2pt] (0,1/2) -- (2/3,1);
        \draw[red,line width=2pt] (2/3,0) -- (1,1/4);
        \draw[red,line width=2pt] (0,1/4) -- (1,1);
        \foreach \x in {0,1/3,2/3,1}
        \draw (\x,.02)--(\x,-.02) node[below] {\bfseries $\x$};
        \foreach \y in {0,1/4,1/2,3/4,1}
        \draw (.02,\y)--(-.02,\y) node[left] {\bfseries $\y$};  
    \end{tikzpicture}
\end{document}

Producción:

ingrese la descripción de la imagen aquí

información relacionada