
Я пытаюсь создать параллельные линии в tikz
. Хотя я могу создавать эти линии, похоже, я не могу контролировать длину этих линий, которые я хочу, чтобы они остановились на лицевой стороне красного ящика.
Мой код
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=0.5]
%target
\draw[fill=gray!30,gray!30] (0,3)rectangle(2,-3);
%tracks
\draw[->,thick] (-2,2)--(0,2);
\draw[->,dashed] (0,2)--(-3,-3);
\draw[->,thick] (-2,1)--(2,1);
\draw[->,dashed] (2,1)-- +($(-3,-3)-(0,2)$);
\draw[->,thick] (-2,-1)--(2,-1);
\draw[->,dashed] (2,-1)-- +($(-3,-3)-(0,2)$);
\draw[->,thick] (-2,-2)--(0,-2);
\draw[->,dashed] (0,-2)-- +($(-3,-3)-(0,2)$);
%detector
\draw[red, rotate around={60:(-1,-3)}] (-3,0) rectangle (-2,-6);
\end{tikzpicture}
\end{document}
Мой вывод:
Есть идеи, как контролировать длину и конечную точку параллельной линии?
решение1
Если предположить, что параллельные линии ортогональны "детектору", то можно использовать модификаторы проекции (см. "Синтаксис модификаторов проекции" в руководстве), которые нарисованы синим цветом ниже. Я оставил исходные пунктирные линии для сравнения.
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[scale=0.5]
%target
\draw[fill=gray!30,gray!30] (0,3) rectangle(2,-3);
%detector
\draw[red, rotate around={60:(-1,-3)}]
(-3,0) rectangle (-2,-6)
(-2,0) coordinate (a)
(-2,-6) coordinate (b);
%tracks
\draw[->,thick] (-2,2)--(0,2);
\draw[->,dashed] (0,2)--(-3,-3);
\draw[->,thick] (-2,1)--(2,1);
\draw[->,dashed] (2,1)-- +($(-3,-3)-(0,2)$);
\draw[->,thick] (-2,-1)--(2,-1);
\draw[->,dashed] (2,-1)-- +($(-3,-3)-(0,2)$);
\draw[->,thick] (-2,-2)--(0,-2);
\draw[->,dashed] (0,-2)-- +($(-3,-3)-(0,2)$);
\draw [blue, solid, ->] (0,2) -- ($(a)!(0,2)!(b)$);
\draw [blue, solid, ->] (2,1) -- ($(a)!(2,1)!(b)$);
\draw [blue, solid, ->] (2,-1) -- ($(a)!(2,-1)!(b)$);
\draw [blue, solid, ->] (0,-2) -- ($(a)!(0,-2)!(b)$);
\end{tikzpicture}
\end{document}
решение2
Для грубого и быстрого исправления я бы предложил использовать полярные координаты, чтобы линии оставались параллельными. Затем вы можете использовать второй параметр, чтобы приблизительно рассчитать необходимую длину для попадания в детектор:
\begin{tikzpicture}[scale=0.5]
%target
\draw[fill=gray!30,gray!30] (0,3)rectangle(2,-3);
%tracks
\draw[->,thick] (-2,2)--(0,2);
\draw[->,dashed] (0,2)--+(240:5.8);
\draw[->,thick] (-2,1)--(2,1);
\draw[->,dashed] (2,1)-- +(240:5.9);
\draw[->,thick] (-2,-1)--(2,-1);
\draw[->,dashed] (2,-1)-- +(240:4.2);
\draw[->,thick] (-2,-2)--(0,-2);
\draw[->,dashed] (0,-2)-- +(240:2.3);
%detector
\draw[red, rotate around={60:(-1,-3)}] (-3,0) rectangle (-2,-6);
\end{tikzpicture}