4

enter image description here

How to draw a line from the point X perpendicular to AB in the ground plane OAB?

Is there a simple mechanism or do I have to use something like tikz-3d?

\documentclass[margin=5pt, tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\pgfmathsetmacro{\a}{5}%  
\pgfmathsetmacro{\b}{5}%  
\begin{tikzpicture}[font=\footnotesize,]

\coordinate[label=left:$O$] (O) at (0,0,0); 
\coordinate[label=below:$B$] (B) at (\b,0,0); 
\coordinate[label=below:$A$] (A) at (0,0,\a); 
\coordinate[label=below:$X$] (X) at ($(A)!0.4!(B)$); 

\draw[] (A) -- (B);
\draw[help lines] (O) -- (A);
\draw[help lines] (O) -- (B);

\draw[red] (X) -- ($(X)!1 cm!-90:(A)$);


\begin{scope}[-latex, shift={(-0.5*\a,0.5*\a,0)}]
\foreach \P/\s/\Pos in {(1,0,0)/x/below, (0,1,0)/y/left, (0,0,2)/z/right} 
\draw[] (0,0,0) -- \P node[\Pos, pos=0.9,inner sep=2pt]{$\s$};
\end{scope}
\end{tikzpicture}
\end{document}
8

Let u = cross(OA,OB) and v = (B) - (A), then direction vector of the line that you want is found by cross(u,v). By calculating, we have cross(u,v)= {-a^2 b, 0, -a b^2}. I use {a,0,b} as direction vector of the line. Then I write the equation of the line through X and has direction vector, I get the point Y = (\b/4 -\a,0,3*\a/4-\b) on this line. The line though two points X and Y. I add the projection point H of the point O on the line AB. Note that, XY is parallel to OH.

\documentclass[margin=5pt, tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\pgfmathsetmacro{\a}{5}%  
\pgfmathsetmacro{\b}{5}%  
\begin{tikzpicture}[font=\footnotesize,]

\coordinate[label=left:$O$] (O) at (0,0,0); 
\coordinate[label=below:$B$] (B) at (\b,0,0); 
\coordinate[label=below:$A$] (A) at (0,0,\a); 
\coordinate[label=below:$X$] (X) at (\b/4,0,3*\a/4); 
\coordinate[label=below:$Y$] (Y) at (\b/4 -\a,0,3*\a/4-\b); 
\coordinate[label=below:$H$] (H) at ({\a*\a*\b/(\a*\a+\b*\b)}, 0, {\a*\b*\b/(\a*\a+\b*\b)});
\draw[] (A) -- (B);
\draw[help lines] (O) -- (A);
\draw[help lines] (O) -- (B);
\draw[red] (Y) -- (X) ;
\draw[blue] (O) -- (H) ;
\begin{scope}[-latex, shift={(-0.5*\a,0.5*\a,0)}]
\foreach \P/\s/\Pos in {(1,0,0)/x/below, (0,1,0)/y/left, (0,0,2)/z/right} 
\draw[] (0,0,0) -- \P node[\Pos, pos=0.9,inner sep=2pt]{$\s$};
\end{scope}
\end{tikzpicture}
\end{document}

enter image description here

In the above code, The coordinates of the point H is found by Maple soft. Based on this answer, you don't need find it.

    \documentclass[tikz,border=1 mm,12pt]{standalone}
\usepackage{fouriernc}
\usetikzlibrary{3dtools} 
\tikzset{intersection of line trough/.code args={#1 and #2 with plane
        containing #3 and normal #4}{%
        \pgfmathsetmacro{\ltest}{abs(TD("#2o#4")-TD("#1o#4"))}%
        \ifdim\ltest pt<0.01pt            
        \message{Plane and line are parallel!^^J}
        \pgfmathsetmacro{\myd}{0}
        \else
        \pgfmathsetmacro{\myd}{(TD("#3o#4")-TD("#1o#4"))/(TD("#2o#4")-TD("#1o#4"))}%
        \fi
        \pgfmathsetmacro{\myP}{TD("#1+\myd*#2-\myd*#1")}%
        \pgfkeysalso{insert path={%
                (\myP)
        }}
}}

\begin{document}
\pgfmathsetmacro{\a}{5}%  
\pgfmathsetmacro{\b}{5}%  
\begin{tikzpicture}
\path 
(0,0,0) coordinate (O)
 (\b,0,0) coordinate (B)
 (0,0,\a)  coordinate (A)
 ({\a*\a*\b/(\a*\a+\b*\b)}, 0, {\a*\b*\b/(\a*\a+\b*\b)}) coordinate (H')
 [
 3d coordinate={(myn)=(A)-(B)}
 ];
 \path[intersection of line trough={(A) and (B) with plane containing
    (O) and normal (myn)}] 
 coordinate (H);
 \foreach \p in {A,B,O,H}
 \draw[fill=black] (\p) circle (1.5pt);
 \foreach \p/\g in {A/135,B/90,O/180}
 \path (\p)+(\g:3mm) node{$\p$};
  \draw (A) -- (B) -- (O) -- cycle;
  \path[red] foreach \X in {H}
  {(\X) node[above] {$\X$} (\X') node[below] {$\X'$}};
  \draw (O) -- (H);
\end{tikzpicture}
\end{document}

enter image description here

  • 1
    Very good! :) ;) – cis Dec 13 '19 at 13:34
  • 2
    Are you aware of the problems of /utils/exec? I see more and more people using it, because it was popularized by tallmarmot, but it doesn't actually work all that well. – Henri Menke Dec 14 '19 at 6:05
  • @HenriMenke I copied the code at above link. I don't know it doesn't actually work all that well really. In this case, it works true. Thank you very much. – minhthien_2016 Dec 14 '19 at 6:11

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.