Warum führen diese beiden TikZ-Anweisungen zu unterschiedlichen Ergebnissen?

Warum führen diese beiden TikZ-Anweisungen zu unterschiedlichen Ergebnissen?

Ich spiele mit Schnittpunkten herum, um eine Illustration für eine Vorlesung über Optik zu zeichnen. Ich habe jedoch ein paar Probleme, wie das folgende Beispiel zeigt:

%!TEX encoding = UTF-8 Unicode
%!TEX program = lualatex
\documentclass[11pt,a4paper,fleqn,pdftex]{report}
\usepackage[dvipsnames, table]{xcolor}
\usepackage[utf8]{luainputenc} 
\usepackage[latin,english]{babel}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{shapes.geometric}

\begin{document}
    \begin{figure}[!h]
   \centering
   \begin{tikzpicture}
      \coordinate (M2) at (0,3);
      \def\angleM{10}
% >>>>>>>>>>>>>>>>
      \draw[color=Red, thick] (M2) --  (intersection cs: first line={(M2)--++(90 - \angleM:-8)}, second line={(45:-4)--(45:4)}) circle (2pt);
      \draw[color=Red, thick] (intersection cs: first line={(M2)--++(90 - \angleM:-8)}, second line={(45:-4)--(45:4)}) circle (2pt) -- (M2);
% <<<<<<<<<<<<<<<<
      \draw[thick] (M2) ++(1,0) -- ++(-2,0) node[left]{$M_2$};
      \fill[pattern=north east lines] (M2) ++(1,0) rectangle ++(-2,0.2);
      \draw[very thick] (45:-2) -- (45:2);
   \end{tikzpicture}
\end{figure}
\end{document}

In diesem Beispiel sollten die beiden Linien zwischen % >>>>>…und % <<<<…die gleichen Linien zeichnen, was aber nicht der Fall ist, wie Sie hier sehen können:

Überschneidung

Obwohl die Anweisungen fast gleich sind (nur die Zeichenrichtung ist unterschiedlich), überlappen sich die Linien nicht wie vorgesehen. Was kann ich tun, um dies zu vermeiden?

Antwort1

Dies scheint ein Rundungsproblem zu sein. Dieses Problem und das inTikZ berechnet Schnittpunkte nichtdeuten darauf hin, dass es einige Probleme mit dem Schnittpunkt-Koordinatensystem gibt (tatsächlich wird es im PGF-Handbuch nicht erwähnt, sondern nur ein Beispiel für seine Verwendung präsentiert).

Als Workaround können Sie die intersectionsBibliothek laden und dann

\path
  [name path=line1] (M2) -- ++(90 - \angleM:-8) 
  [name path=line2] (45:-4) -- (45:4); 
\draw[Red,thick,name intersections={of=line1 and line2}] 
  (intersection-1) circle (2pt) -- (M2);

Dies ist nur etwas länger als die Verwendung von intersection cs, aber Sie werden nicht durch unterschiedliche Ergebnisse aufgrund von Rundungsproblemen beunruhigt. Ein vollständiges Beispiel, das beide Ansätze nebeneinander zeigt:

%!TEX encoding = UTF-8 Unicode
%!TEX program = lualatex
\documentclass[11pt,a4paper,fleqn,pdftex]{report}
\usepackage[dvipsnames, table]{xcolor}
\usepackage[utf8]{luainputenc} 
\usepackage[latin,english]{babel}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{intersections}

\begin{document}

   \begin{tikzpicture}[baseline]
      \coordinate (M2) at (0,3);
      \def\angleM{10}
% >>>>>>>>>>>>>>>>
      \draw[color=Red, thick] (M2) --  (intersection cs: first line={(M2)--++(90 - \angleM:-8)}, second line={(45:-4)--(45:4)}) circle (2pt);
      \draw[color=Red, thick] (intersection cs: first line={(M2)--++(90 - \angleM:-8)}, second line={(45:-4)--(45:4)}) circle (2pt) -- (M2);
% <<<<<<<<<<<<<<<<
      \draw[thick] (M2) ++(1,0) -- ++(-2,0) node[left]{$M_2$};
      \fill[pattern=north east lines] (M2) ++(1,0) rectangle ++(-2,0.2);
      \draw[very thick] (45:-2) -- (45:2);
   \end{tikzpicture}\qquad
%
   \begin{tikzpicture}[baseline]
      \coordinate (M2) at (0,3);
      \def\angleM{10}

      \path
        [name path=line1] (M2) -- ++(90 - \angleM:-8) 
        [name path=line2] (45:-4) -- (45:4); 
      \draw[Red,thick,name intersections={of=line1 and line2}] 
        (intersection-1) circle (2pt) -- (M2);

      \draw[thick] (M2) ++(1,0) -- ++(-2,0) node[left]{$M_2$};
      \fill[pattern=north east lines] (M2) ++(1,0) rectangle ++(-2,0.2);
      \draw[very thick] (45:-2) -- (45:2);
   \end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen