Dibuja líneas paralelas cada una con una longitud fija.

Dibuja líneas paralelas cada una con una longitud fija.

Estoy intentando crear líneas paralelas en tikz. Aunque puedo crear esas líneas, parece que no puedo controlar la longitud de esas líneas, que quiero que se detengan en la cara del cuadro rojo.

mi codigo es

\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}

Mi salida es

ingrese la descripción de la imagen aquí

¿Alguna idea sobre cómo controlar la longitud y el punto final de la línea paralela?

Respuesta1

Suponiendo que las líneas paralelas son ortogonales al "detector", entonces se pueden usar los modificadores de proyección (consulte "La sintaxis de los modificadores de proyección" en el manual), que se dibujan en azul a continuación. Dejé las líneas discontinuas originales para comparar.

\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}

ingrese la descripción de la imagen aquí

Respuesta2

Para una solución rápida y sucia, sugeriría usar coordenadas polares para mantener las líneas paralelas. Luego puedes usar el segundo parámetro para aproximar la longitud necesaria para alcanzar el detector:

\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}

ingrese la descripción de la imagen aquí

información relacionada