Tkz-Euclide Get Altitude Point without Drawing

Is it possible to only get the coordinate without drawing? (Or is there any other shortcut without using tkz-euclide?

\documentclass[tikz,border=10pt]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,4);
\coordinate (C) at (4,2);

\draw(A)--(B);
\tkzDrawAltitude[color=blue](A,B)(C) \tkzGetPoint{D}

\fill[red] (A) circle (2pt);
\fill[red] (B) circle (2pt);
\fill[red] (C) circle (2pt);
\fill[blue] (D) circle (2pt);

\end{tikzpicture}
\end{document}


• Possibly relevant: tex.stackexchange.com/questions/103284/… Commented Feb 26, 2019 at 15:42
• If you want to use tkz-euclide you can try \tkzDefPointsBy[projection=onto A--B](C){D}.
– Kpym
Commented Feb 26, 2019 at 16:30

Yes, calc has these projections. Their syntax is described in section 13.5.5 The Syntax of Projection Modifiers of the pgfmanual.

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,4);
\coordinate (C) at (4,2);

\draw(A)--(B);
\draw[blue] ($(A)!(C)!(B)$) coordinate (D) -- (C);

\fill[red] (A) circle (2pt);
\fill[red] (B) circle (2pt);
\fill[red] (C) circle (2pt);
\fill[blue] (D) circle (2pt);

\end{tikzpicture}
\end{document}


With tkz-euclide the correct code is :

\documentclass[tikz,border=10pt]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(4,4){B}
\tkzDefPoint(4,2){C}
\tkzDrawSegment(A,B)
\tkzDefPointsBy[projection=onto A--B](C){D}.
\tkzDrawPoints[color=red](A,B,C)
\tkzDrawPoints[color=blue](D)
\tkzLabelPoints(A,B,C,D)
\end{tikzpicture}
\end{document}


An alternative to marmot's nice answer. \pgfmathanglebetweenpoints command gives angle of a line. Using this command and intersections library, one can get the coordinates without drawing.

\documentclass[tikz,border=10pt]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usetikzlibrary{calc,intersections}
\newcommand{\pgfextractangle}[3]{%
\pgfmathanglebetweenpoints{\pgfpointanchor{#2}{center}}
{\pgfpointanchor{#3}{center}}
\global\let#1\pgfmathresult
}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,4);
\coordinate (C) at (4,2);
\path[draw, name path=line1](A)--(B);
\pgfextractangle{\angle}{A}{B}
\fill[red] (A) circle (2pt);
\fill[red] (B) circle (2pt);
\fill[red] (C) circle (2pt);
\path [name path=line2] (C)--++(\angle+90:3); % Add 90 degree to calculated angle for orthogonality.
\path[name intersections={of=line1 and line2,by={D}}];
\fill[blue] (D) circle (2pt);
\end{tikzpicture}
\end{document}