
평면 토러스에 곡선을 그래프로 표시하고 싶지만 전체 R^2
평면이 아닌 정사각형에 그래프를 그리려고 합니다 [0,1]x[0,1]
.
이를 위해 유리기울기의 초기 데이터만으로 "do...while"을 생성했습니다. 이것은:
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)
내 코드의 큰 실수에 대해 사과드립니다. 나는 LaTeX에서 어떻게 해야할지 모르기 때문에 내 아이디어를 다음과 같이 썼습니다.TikZ예를 들어. 내가 어떻게 해?
이미 수동으로 수행했지만 가장 최적은 아닙니다. put을 시도하면 m=3/4
다음과 같은 결과가 출력됩니다.
다음과 같이 모든 것을 수동으로 플롯해야 하는 코드를 작성하고 싶지 않습니다.
\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}
답변1
여기에 옵션이 있습니다. 저는 세 가지 인수를 사용하여 명령을 정의했습니다 \flattorus
.
- (선택 사항) TikZ 그림에서 정사각형의 측면(cm)입니다. 기본값으로 4를 넣었는데, 물론 쉽게 변경할 수도 있습니다.
- 정사각형을 분할할 열 수입니다.
- 정사각형을 분할할 행 수입니다.
\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}
답변2
@Vincent(+1)가 멋진 솔루션을 게시했지만 이는 이미 작업 중이므로 대안으로 게시하겠다고 생각했습니다.
\flattorus
다음은 평평한 토러스를 그리기 위해 두 개의 인수(및 하나의 추가 선택적 인수)를 사용하는 매크로입니다 . 토러스에 \flattorus[<scale factor>]{y}{x}
경사선을 그립니다 . y/x
기본 배율은 2이며 한 변의 길이가 2cm인 정사각형을 생성합니다.
예를 들어 \flattorus{3}{4}\qquad\flattorus{5}{3}
다음을 생성합니다.
그리고 \flattorus[6]{10}{11}
생산한다
\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}
답변3
다음 코드를 사용해 보세요:
\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}
산출: