Stopping a line at a certain point in tikz
You can just use dash pattern
. It is true that you need to adjust the on
and off
dimensions by hand, but this code does not overdraw anything.
\documentclass[tikz,border=3mm]{standalone}
% Commands:
\newcommand{\yggDra}[3]{
\draw[ultra thick, xscale=#1, yscale=#2, rotate=#3,
dash pattern=on 13pt off 5pt on 51pt off 5pt on 66pt off 6pt on 76pt off 6pt on 35pt] ({cos(-44.8)*3.92},{sin(-44.8)*3.92})
.. controls ({cos(-55)*4},{sin(-55)*4}) and ({cos(-75)*2.5},{sin(-75)*2.5}) .. ({cos(-89)*3.9},{sin(-89)*3.9})
.. controls ({cos(-75)*4.2},{sin(-75)*4.2}) and ({cos(-60)*3.1},{sin(-60)*3.1}) .. ({cos(-44)*3.2},{sin(-44)*3.4})
.. controls ({cos(-55)*4.5},{sin(-55)*4.5}) and ({cos(-75)*3.7},{sin(-75)*3.7}) .. ({cos(-87)*3.3},{sin(-87)*3.3}) .. controls ({cos(-90)*3.26},{sin(-90)*3.26}) .. ({cos(-93)*3.3},{sin(-93)*3.3});
}
\begin{document}
\begin{tikzpicture}
\yggDra{1}{1}{0}
\yggDra{-1}{1}{0}
\yggDra{1}{-1}{0}
\yggDra{-1}{-1}{0}
\yggDra{1}{-1}{90}
\yggDra{-1}{-1}{-90}
\yggDra{1}{-1}{-90}
\yggDra{-1}{-1}{90}
\end{tikzpicture}
\end{document}
New answer
As Paul Gaborit points out, it is necessary to flip some passages. This is done either with the flip crossing/.list={}
key, or with the \flipcrossings{}
macro, which amounts to the same thing. It takes a trained eye to notice!
Indeed, your original basic drawing is this one:
The drawing obtained without returning some passages is :
When you switch to draft mode=crossings
, you find the numbers to return and you find those listed by Paul Gaborit: \flipcrossings{2,3,38,39,50,51,20,21,33,34,54,55,66,67,15,16}
The final result is the same as the one you wanted to obtain at the beginning.
\documentclass[border=5mm]{standalone}
% Usepackage:
\usepackage{pgfplots}
\usetikzlibrary{calc,knots}
%\usepackage{allrunes}
% Commands:
\newcommand{\yggDra}[3]{
\strand[ultra thick, xscale=#1, yscale=#2, rotate=#3]
({cos(-44.8)*3.92},{sin(-44.8)*3.92})
.. controls ({cos(-55)*4},{sin(-55)*4}) and ({cos(-75)*2.5},{sin(-75)*2.5}) .. ({cos(-89)*3.9},{sin(-89)*3.9})
.. controls ({cos(-75)*4.2},{sin(-75)*4.2}) and ({cos(-60)*3.1},{sin(-60)*3.1}) .. ({cos(-44)*3.2},{sin(-44)*3.4})
.. controls ({cos(-55)*4.5},{sin(-55)*4.5}) and ({cos(-75)*3.7},{sin(-75)*3.7}) .. ({cos(-87)*3.3},{sin(-87)*3.3}) .. controls ({cos(-90)*3.26},{sin(-90)*3.26}) .. ({cos(-93)*3.3},{sin(-93)*3.3});
}
%\newcommand{\whiteSpace}[1]{
%\draw[white, ultra thick, rotate=#1]
%(0.4,-3.308) -- (0.6,-3.35)
%(0.3,-3.395) -- (0.5,-3.45)
%(1.11,-3.41) -- (0.99,-3.52)
%(1.29,-3.41) -- (1.155,-3.52)
%(2.24,-2.9) -- (2.2,-3.0)
%(2.358,-2.89) -- (2.32,-3.0)
%(1.55,-2.91) -- (1.75,-2.9)
%(1.45,-3.025) -- (1.75,-3.0127)
%;
%\draw[white, ultra thick, rotate=#1, xscale=-1]
%(0.4,-3.308) -- (0.6,-3.35)
%(0.3,-3.395) -- (0.5,-3.45)
%(1.11,-3.41) -- (0.99,-3.52)
%(1.29,-3.41) -- (1.155,-3.52)
%(2.24,-2.9) -- (2.2,-3.0)
%(2.358,-2.89) -- (2.32,-3.0)
%(1.55,-2.91) -- (1.75,-2.9)
%(1.45,-3.025) -- (1.75,-3.0127)
%;
%}
\begin{document}
\begin{tikzpicture}
\begin{knot}[consider self intersections,end tolerance=.4pt,
flip crossing/.list={2,3,38,39,50,51,20,21,33,34,54,55,66,67,15,16},
% draft mode=crossings
]
%\flipcrossings{2,3,38,39,50,51,20,21,33,34,54,55,66,67,15,16}
\yggDra{1}{1}{0}
\yggDra{-1}{1}{0}
\yggDra{1}{-1}{0}
\yggDra{-1}{-1}{0}
\yggDra{1}{-1}{90}
\yggDra{-1}{-1}{-90}
\yggDra{1}{-1}{-90}
\yggDra{-1}{-1}{90}
%\whiteSpace{0}
%\whiteSpace{90}
%\whiteSpace{180}
%\whiteSpace{270}
\end{knot}
\end{tikzpicture}
\end{document}
Translated with www.DeepL.com/Translator (free version)
Oldanswer
The knots
package included in spath3 written by @LoopSpace allows you to do what you want automatically. Here is the adaptation of your code with this package.
\documentclass[border=5mm]{standalone}
% Usepackage:
\usepackage{pgfplots}
\usetikzlibrary{calc,knots}
%\usepackage{allrunes}
% Commands:
\newcommand{\yggDra}[3]{
\strand[ultra thick, xscale=#1, yscale=#2, rotate=#3]
({cos(-44.8)*3.92},{sin(-44.8)*3.92})
.. controls ({cos(-55)*4},{sin(-55)*4}) and ({cos(-75)*2.5},{sin(-75)*2.5}) .. ({cos(-89)*3.9},{sin(-89)*3.9})
.. controls ({cos(-75)*4.2},{sin(-75)*4.2}) and ({cos(-60)*3.1},{sin(-60)*3.1}) .. ({cos(-44)*3.2},{sin(-44)*3.4})
.. controls ({cos(-55)*4.5},{sin(-55)*4.5}) and ({cos(-75)*3.7},{sin(-75)*3.7}) .. ({cos(-87)*3.3},{sin(-87)*3.3}) .. controls ({cos(-90)*3.26},{sin(-90)*3.26}) .. ({cos(-93)*3.3},{sin(-93)*3.3});
}
%\newcommand{\whiteSpace}[1]{
%\draw[white, ultra thick, rotate=#1]
%(0.4,-3.308) -- (0.6,-3.35)
%(0.3,-3.395) -- (0.5,-3.45)
%(1.11,-3.41) -- (0.99,-3.52)
%(1.29,-3.41) -- (1.155,-3.52)
%(2.24,-2.9) -- (2.2,-3.0)
%(2.358,-2.89) -- (2.32,-3.0)
%(1.55,-2.91) -- (1.75,-2.9)
%(1.45,-3.025) -- (1.75,-3.0127)
%;
%\draw[white, ultra thick, rotate=#1, xscale=-1]
%(0.4,-3.308) -- (0.6,-3.35)
%(0.3,-3.395) -- (0.5,-3.45)
%(1.11,-3.41) -- (0.99,-3.52)
%(1.29,-3.41) -- (1.155,-3.52)
%(2.24,-2.9) -- (2.2,-3.0)
%(2.358,-2.89) -- (2.32,-3.0)
%(1.55,-2.91) -- (1.75,-2.9)
%(1.45,-3.025) -- (1.75,-3.0127)
%;
%}
\begin{document}
\begin{tikzpicture}
\begin{knot}[consider self intersections,end tolerance=.4pt,
flip crossing/.list={2,3,38,39,50,51,20,21,33,34,54,55,66,67,15,16}
%draft mode=crossings
]
%\flipcrossings{2,3,38,39,50,51,20,21,33,34,54,55,66,67,15,16}
\yggDra{1}{1}{0}
\yggDra{-1}{1}{0}
\yggDra{1}{-1}{0}
\yggDra{-1}{-1}{0}
\yggDra{1}{-1}{90}
\yggDra{-1}{-1}{-90}
\yggDra{1}{-1}{-90}
\yggDra{-1}{-1}{90}
%\whiteSpace{0}
%\whiteSpace{90}
%\whiteSpace{180}
%\whiteSpace{270}
\end{knot}
\end{tikzpicture}
\end{document}