
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:
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 intersections
Bibliothek 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}