2

I have the code for rectangle ABCD and two of its diagonals. I am trying to draw rays from adjacent vertices C and D, each of which is perpendicular to a diagonal, label the intersection of the two rays P, and draw a line segment through P to line segment CD that is perpendicular to CD.

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,intersections,quotes,backgrounds}


\begin{document}

\begin{tikzpicture}
\coordinate (A) at (-0.5,-0.75);
\coordinate (B) at (-0.5,0.5);
\coordinate (C) at (1,0.5);
\coordinate (D) at (1,-0.75);

\path[fill=yellow] (A) -- (B) -- (C) -- (D) -- cycle;

\path (C) -- ($(C)!1.5cm!90:(A)$);
\path (D) -- ($(D)!1.5cm!-90:(B)$);

\draw[draw=red!50, line width=0.1pt, name path=ray1] (A) -- (C);
\draw[draw=red!50, line width=0.1pt, name path=ray2] (B) -- (D);

%\coordinate [name intersections={of=ray1 and vertical,by={P}}] ;

\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]below left:$A$}] at (A) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]above left:$B$}] at (B) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]above right:$C$}] at (C) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]below right:$D$}] at (D) {};
\end{tikzpicture}
\end{document}
  • You need an \end{document} ;). – cfr Apr 30 '15 at 22:54
3

May be like this.

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,intersections,quotes,backgrounds}


\begin{document}

\begin{tikzpicture}
\coordinate (A) at (-0.5,-0.75);
\coordinate (B) at (-0.5,0.5);
\coordinate (C) at (1,0.5);
\coordinate (D) at (1,-0.75);

\path[fill=yellow] (A) -- (B) -- (C) -- (D) -- cycle;

\path[draw,name path=ray1] (C) -- ($(C)!1.5cm!90:(A)$);
\path[draw,name path=ray2] (D) -- ($(D)!1.5cm!-90:(B)$);

\draw[draw=red!50, line width=0.1pt] (A) -- (C);
\draw[draw=red!50, line width=0.1pt] (B) -- (D);

\coordinate [name intersections={of=ray1 and ray2,by={P}}] ;

\node[circle,fill,inner sep=1.5pt,outer sep=0pt,label={right:$P$}] at (P) {};
\draw (P) -- ($(D)!(P)!(C)$);

\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]below left:$A$}] at (A) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]above left:$B$}] at (B) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]above right:$C$}] at (C) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]below right:$D$}] at (D) {};
\end{tikzpicture}
\end{document}

enter image description here

  • (+1) Interesting. Haven't ever used ($(D)!1.5cm!-90:(B)$) or ($(D)!(P)!(C)$). (Just looked them up.) – cfr Apr 30 '15 at 23:30
  • Thanks. I know. That's what the TikZ manual said just now when I looked it up ;). – cfr Apr 30 '15 at 23:42
  • @Harish Kumar I prefer your code because you keep most of my code. Doing so is particularly helpful because I can easily determine where I am misusing commands. – user143462 May 1 '15 at 1:19
  • @Harish Kumar I see that one reason that I couldn't plot P correctly is that I had "vertical" instead of "ray2"! I also see that you replaced \path (C) -- ($(C)!1.5cm!90:(A)$); with \path[draw,name path=ray1] (C) -- ($(C)!1.5cm!90:(A)$); and that you replaced \path (D) -- ($(D)!1.5cm!-90:(B)$); with \path[draw,name path=ray2] (D) -- ($(D)!1.5cm!-90:(B)$); to get point P as the intersection of ray1 and ray2. This is more efficient code than what I was using. – user143462 May 1 '15 at 1:31
  • @Harish Kumar By the way, I removed the draw option from the commands to draw ray1 and ray2 and added \draw (C) -- (P) -- (D); at the end of the code to simply have a triangle sharing its base with the right side of the rectangle. – user143462 May 1 '15 at 1:37
4

Something like this? Mine is different, I think, from Harish Kumar's so I will post even though he answered first. Note that with my method, the second intersection point is the one you want, so I named the first one Q just so the second would be P.

\documentclass[tikz,border=5pt]{standalone}
\usetikzlibrary{calc,intersections,quotes,backgrounds}

\begin{document}
  \tikzset{
    my circle/.style={outer sep=0pt, circle, fill, inner sep=1.5pt},
    my ray/.style={draw=red!50, line width=.1pt}
  }

  \begin{tikzpicture}
    \coordinate (A) at (-0.5,-0.75);
    \coordinate (B) at (-0.5,0.5);
    \coordinate (C) at (1,0.5);
    \coordinate (D) at (1,-0.75);

    \path[fill=yellow] (A) -- (B) -- (C) -- (D) -- cycle;

    \pgfmathsetmacro\myresult{atan(1.5/1.25)}
    \path [my ray, name path=ray1] (A) -- (C) -- +(-\myresult:1);
    \path [my ray, name path=ray2] (B) -- (D) -- +(\myresult:1);

    \path [name intersections={of=ray1 and ray2, by={Q,P}}] (P) node [right] {P} ;
    \draw (P) -- (C |- P);

    \node[my circle,label={[fill=white]below left:$A$}] at (A) {};
    \node[my circle,label={[fill=white]above left:$B$}] at (B) {};
    \node[my circle,label={[fill=white]above right:$C$}] at (C) {};
    \node[my circle,label={[fill=white]below right:$D$}] at (D) {};
  \end{tikzpicture}
\end{document}

rays and intersections

  • Good that you cleaned up the code. :-). I am lazy! – user11232 Apr 30 '15 at 23:38
  • @cfr Your code gives me what I want, but I do not know what some of your commands, like \pgfmathsetmacro\myresult{atan(1.5/1.25)}, does. I really wanted to know what was wrong with my code. Harish Kumar found the mistake. – user143462 May 1 '15 at 1:41
  • @user143462 It calculates tan-1 for 1.5/1.25. For a right-angled triangle, tan of the angle equals the ratio of the opposite side to the adjacent. If you have the ratio, tan-1 figures out the angle. So that just calculates the angle you need to draw the ray in. I just did it the way that made sense to me i.e. which occurred to me given my knowledge of TikZ. I guess it made sense to me to draw the rays as single paths. – cfr May 1 '15 at 1:45
1

For whom it interests, here is a MetaPost solution, to be processed with LuaLaTeX.

The intersection point P is computed thanks to the following instruction, making use of the handy intersectionpoint operator of MetaPost between two paths.

P = (C--A) rotatedaround (C,90) intersectionpoint (D--B) rotatedaround (D,-90);

The perpendicular to CD through P is simply obtained by joining P to the middle point of segment CD.

Q = .5[C,D]; … draw P--Q; 

I have also added right angle markings, thanks to the anglebetween macro which is part of MetaPost's Metafun format.

\documentclass[border=2mm]{standalone}
\usepackage{luamplib}
  \mplibsetformat{metafun}
  \mplibtextextlabel{enable}
\begin{document}
  \begin{mplibcode}
    u := 2cm; pair A, B, C, D, P, Q; 
    A = u*(-.5,-.75); B = u*(-.5,.5); C = u*(1,.5); D = u*(1,-.75); Q = .5[C,D];
    path rectangle; rectangle = A--B--C--D--cycle;
    P = (C--A) rotatedaround (C,90) intersectionpoint (D--B) rotatedaround (D,-90);
    beginfig(1);
      fill rectangle withcolor yellow; 
      pickup pencircle scaled .1bp;
      drawoptions(withcolor red);
      draw B--D; draw A--C;
      draw C -- 1.5[C,P]; draw D -- 1.5[D,P];
      drawoptions(withcolor black);
      freelabeloffset := 5bp;
      forsuffixes M = A, B, C, D, P:
        drawdot M withpen pencircle scaled 3bp;
        freelabel("$" & str M & "$", M, center rectangle);
      endfor
      draw P--Q;
      anglemethod := 2; anglelength := 4bp;
      draw anglebetween(C--A, C--P, "");
      draw anglebetween(D--B, D--P, "");
      draw anglebetween(Q--C, Q--P, "");
    endfig;
  \end{mplibcode}
\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.