TikZ를 사용하여 그린 작은 매듭에 교차점이 나타나지 않음

TikZ를 사용하여 그린 작은 매듭에 교차점이 나타나지 않음

TikZ로 매듭을 그려보려고 합니다. 나는 이것을 가지고 있습니다 :

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{knots}
\begin{document}
$\begin{tikzpicture}[domain=-2:2, scale=0.3]
\begin{knot} [clip width=4]
\strand (0,2) to [out=down, in=down, looseness=1.8] (1.5,0);
\strand (1.5,0) to [out=up, in=up, looseness=1.8] (0,-2);
\end{knot}
\draw[dashed] (0,0) circle (2cm);
\end{tikzpicture}$
\end{document}

요점은 각 교차점(예: 0이 아닌 클립 너비)에서 눈에 보이는 "상단 및 하단"이 필요하다는 것입니다. 위의 예에서는 교차점이 제대로 작동하지 않습니다. 그러나 다음과 같이 다른 (더 큰) 매듭을 그리는 경우:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{knots}
\begin{document}
$\begin{tikzpicture}[domain=-2:2, scale=0.3]
\begin{knot} 
\strand (-1.3,1.3) to [out=right, in=right, looseness=2.2] (-1.3,-1.3);
\strand (1.3,1.3) to [out=left, in=left, looseness=2.2] (1.3,-1.3);
\end{knot}
\draw[dashed] (0,0) circle (2cm);
\end{tikzpicture}$
\end{document}

모든 것이 괜찮습니다. 이 이상한 동작의 원인은 무엇입니까?

답변1

문제는 교차점이 두 가닥의 끝 부분에 너무 가까워서 "끝 공차" 거리 테스트에 실패하기 때문에 발생할 가능성이 높습니다. 이에 대한 자세한 내용은 아래에서 확인하세요.


매듭 패키지는 가능한 모든 교차점을 확보하기 위해 몇 가지 복잡한 작업을 수행합니다. 때로는 이것이 너무 복잡해서 더 광범위한 루틴 중 일부를 끌 수 있는 옵션이 있으며 일부는 기본적으로 활성화되어 있지 않습니다. 작업을 수행하려면 환경 ignore endpoint intersections=false에 option 옵션을 추가해야 합니다 knot.

\begin{knot}선택적 환경의 시작 부분과 시작 부분 사이에 공백이 있어서는 안 됩니다 .

\documentclass{article}
%\url{http://tex.stackexchange.com/q/217719/86}
\usepackage{tikz}
\usetikzlibrary{knots}
\begin{document}
\begin{tikzpicture}[domain=-2:2, scale=0.3]
\begin{knot}[
  clip width=4,
  ignore endpoint intersections=false,
]
\strand (0,2) to [out=down, in=down, looseness=1.8] (1.5,0);
\strand (1.5,0) to [out=up, in=up, looseness=1.8] (0,-2);
\end{knot}
\draw[dashed] (0,0) circle (2cm);
\end{tikzpicture}
\end{document}

여기서 무슨 일이 일어나고 있는지 조사하면서 라이브러리에서 한두 가지 버그를 발견하고 업데이트했습니다.github 버전.

업데이트 날짜: 2014-12-15여기서 제가 의아했던 점 중 하나는이 특정 교차점은 엔드포인트가 아니기 때문에 관련된 테스트의 영향을 받았으며 이것이 결코 엔드포인트가 되지 않도록 코드 ignore endpoint intersections를 계획했다고 생각했습니다 knot(경로가 여러 조각으로 분할될 때 발생할 수 있음). 즉, 끝점 테스트에서는 가닥 끝에 너무 가깝다고 간주되는 교차점을 무시합니다. 댓글의 대체 솔루션으로 인해 게임이 중단되었습니다. 은 scale=0.3다이어그램을 너무 작게 만들어 다이어그램 내부의 거의 모든 점이 가닥 끝점의 기본 허용오차 내에 있습니다(경로가 두 가닥으로 분할되기 때문에 에 끝점이 있습니다 (1.5,0). 또한 다음이 가능하다는 점에 유의하십시오). 여기에서는 키를 사용하여 단일 가닥을 사용 consider self intersections하지만 여전히 끝점 문제가 있습니다.) 위의 솔루션은 "가닥의 끝에 가까워졌습니까?"를 끄는 방식으로 작동합니다. 시험. 대안은 허용오차를 줄여 테스트를 더욱 엄격하게 만드는 것입니다. 다행히도 원래 패키지를 작성할 때 그 점을 생각했고(그 이후로는 잊어버렸지만!) end tolerance=<dimen>테스트를 개선할 수 있는 열쇠가 있습니다. 따라서:

\begin{tikzpicture}[domain=-2:2, scale=.3]
\begin{knot}[
  clip width=4,
  end tolerance=1pt,
]
\strand (0,2) to [out=down, in=down, looseness=1.8]
(1.5,0);
\strand (1.5,0) to [out=up, in=up, looseness=1.8]
(0,-2);
\end{knot}
\draw[dashed] (0,0) circle (2cm);
\end{tikzpicture}

또한 작동합니다.

답변2

이것은 작동하지만 왜 그런지 모르겠습니다.

\documentclass[tikz, border=5pt, mult, varwidth]{standalone}
\usetikzlibrary{knots}
\begin{document}
  \begin{tikzpicture}[domain=-2:2, scale=0.3]
    \begin{knot} [clip width=4]
      \strand (0,2) to [out=down, in=down, looseness=1.8] (1.5,0);
      \strand (1.5,0) to [out=up, in=up, looseness=1.8] (0,-2);
      \strand (1.5,0) to [out=up, in=up, looseness=1.8] (0,-2);
    \end{knot}
    \draw[dashed] (0,0) circle (2cm);
  \end{tikzpicture}
\end{document}

매듭이 있는

또는 knot=colourknot gap=factor스타일을 사용하십시오.

\documentclass[tikz, border=5pt, mult, varwidth]{standalone}
\usetikzlibrary{knots}
\begin{document}
  \begin{tikzpicture}[domain=-2:2, scale=0.3, knot gap=7]
      \draw [knot=black] (0,2) to [out=down, in=down, looseness=1.8] (1.5,0) ;
      \draw [knot=black] (1.5,0) to [out=up, in=up, looseness=1.8] (0,-2);
    \draw[dashed] (0,0) circle (2cm);
  \end{tikzpicture}
\end{document}

다시 매듭을 지었다

관련 정보