# Angles in three dimensional space

I'd like to make the markings of the angles of a triangle, in three dimensional space, automatically, using the \tdplotdrawpolytopearc.

I tried something like:

\documentclass{article}

\usepackage{tikz}

\usepackage{tikz-3dplot}

\begin{document}

\tdplotsetmaincoords{80}{110}

\begin{tikzpicture}[tdplot_main_coords,>=stealth']

\coordinate (A) at (3,1,1);

\coordinate (B) at (8,7,1);

\coordinate (C) at (3,6,3);

\draw[-] (A) -- (B) -- (C) -- cycle;

\tdplotdefinepoints(C)(A)(B);
\tdplotdrawpolytopearc[thick]{0.6}{}{$\alpha$}

\tdplotdefinepoints(A)(B)(C);
\tdplotdrawpolytopearc[thick]{0.6}{}{$\beta$}

\tdplotdefinepoints(B)(C)(A);
\tdplotdrawpolytopearc[thick]{0.6}{}{$\gamma$}

\end{tikzpicture}

\end{document}


But the command \tdplotdefinepoints(B)(A)(C); does not work.

It works only if the vertices are described explicitly, as in

\tdplotdefinepoints(8,7,1)(3,6,3)(3,1,1);

In the plane, I don't have ploblem. See this solutions.

Could someone please offer some help?

It will help a lot.

But now I have another problem. In my case a point is calculated from others. For example, we can take the midpoint, $M$, $0.5*(B) + 0.5*(C)$ on the side BC. How to mark the angle between the sides AC and AM?

Something like

\ptdedef\temp{\noexpand\tdplotdefinepoints(\ptC)(\ptB)($0.5*(A)+0.5*(B)$);} \temp


did not work.

-

I think the answer is: impossible. \tdplotdefinepoints needs to have three coordinates x, y and z

\def\tdplotdefinepoints(#1,#2,#3)(#4,#5,#6)(#7,#8,#9){%
\pgfmathsetmacro{\tdplotvertexx}{#1}
\pgfmathsetmacro{\tdplotvertexy}{#2}
\pgfmathsetmacro{\tdplotvertexz}{#3}  \pgfmathsetmacro{\tdplotax}{#4}
\pgfmathsetmacro{\tdplotay}{#5}  \pgfmathsetmacro{\tdplotaz}{#6}
\pgfmathsetmacro{\tdplotbx}{#7}  \pgfmathsetmacro{\tdplotby}{#8}
\pgfmathsetmacro{\tdplotbz}{#9}
}


TikZ saves the node A in 2D and two points in the plane may have different coordinates in 3D.

A workaround

\documentclass{article}

\usepackage{tikz}

\usepackage{tikz-3dplot}
\makeatletter
\let\ptdedef\protected@edef

\begin{document}

\tdplotsetmaincoords{80}{110}

\begin{tikzpicture}[tdplot_main_coords,>=stealth']

\def\ptA{3,1,1}
\def\ptB{8,7,1}
\def\ptC{3,6,3}

\coordinate (A) at (3,1,1);
\coordinate (B) at (8,7,1);
\coordinate (C) at (3,6,3);

\draw[-] (A) -- (B) -- (C) -- cycle;

\ptdedef\temp{\noexpand\tdplotdefinepoints(\ptC)(\ptA)(\ptB);} \temp
\tdplotdrawpolytopearc[thick]{1}{below}{$\alpha$}

\ptdedef\temp{\noexpand\tdplotdefinepoints(\ptA)(\ptC)(\ptB);} \temp
\tdplotdrawpolytopearc[thick]{1}{right}{$\beta$}

\ptdedef\temp{\noexpand\tdplotdefinepoints(\ptB)(\ptC)(\ptA);} \temp
\tdplotdrawpolytopearc[thick]{1}{above left}{$\gamma$}

\end{tikzpicture}

\end{document}


Todo

A good idea is to define a macro \tdplotdefinepoints* for example, to work with macros (\ptA, etc.).

Another idea is to create a macro to define the coordinate A, B etc. and at the same time \ptA etc.

-

We can draw the mark of an angle, considering a whole circle and then making the intersection with the triangle. I also wrote a small macro to draw right angles.

Without the use of the command \tdplotdefinepoints, we have much more freedom.

%---------------------------------------------------------------------
\documentclass[]{article}
\usepackage{tikz,calc}
\usepackage{tikz-3dplot}

%------ Macro to draw right angles --------------------------------------------
%--- parameters (A,B,C,t,s):
%--- A, B, C are points in the space, and t and s are numbers between 0 and 1.
%--- t is the fraction of the segment AB, and s is the fraction of the segment BC used to build the right angle at the angle ABC.
%------------------------------------------------------------------------------

\newcommand\drawrightangle[5]{
\draw[-] ($#2 - #4*#2 + #4*#1$)  -- ($#2 - #4*#2 + #4*#1 - #5*#2 + #5*#3$) -- ($#2 - #5*#2 + #5*#3$);
}

\begin{document}

\tdplotsetmaincoords{80}{110}

\begin{tikzpicture}[tdplot_main_coords,>=stealth']

\coordinate (A) at (6,0,3);
\coordinate (B) at (6,0,0);
\coordinate (C) at (4,4,0);

\draw[-] (A) node[above] {A} -- (B) node[below] {B} -- (C) node[below] {C} -- cycle;

\drawrightangle{(A)}{(B)}{(C)}{0.14}{0.1};

\begin{scope}
\clip (A) -- (B) -- (C) -- cycle;
\end{scope}

\begin{scope}
\clip (A) -- (B) -- (C) -- cycle;
\end{scope}

\begin{scope}
\clip (A) -- (B) -- (C) -- cycle;
\end{scope}

\end{tikzpicture}

\end{document}

-
Welcome to TeX.sx! A tip: If you indent lines by 4 spaces, they'll be marked as a code sample. You can also highlight the code and click the "code" button (with "{}" on it). –  Caramdir Jul 9 '12 at 20:17

@Joseph Wright @Alain Mattheus

I modified my old code. Now it allows the points are calculated with the help of "calc".

\documentclass{report}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\centerline{
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,0);
\coordinate (C) at (3,2);
%--------------------
\begin{scope}
\clip (A) -- ($(B)!0.5!(C)$) -- (B) -- cycle;
\draw[fill=blue] ($(B)!0.5!(C)$) circle (0.3cm);
\end{scope}
%----------------
\begin{scope}
\clip (A) -- (C) -- (B) -- cycle;
\draw[fill=red] (C) circle (0.25cm);
\end{scope}
%----------------
\draw[-] (A) node[left] {$A$} -- (B) node[right] {$B$} -- (C) node[above] {$C$} -- cycle;
\draw[-] (A) -- ($(B)!0.5!(C)$) node[right] {$M$};
%-------------------------------------------------------
%-------------------------------------------------------
\coordinate (P) at (6,-1);
\coordinate (Q) at (9,1);
\coordinate (R) at (7,2);
%--------------------
\begin{scope}
\clip ($(P)!0.5!(R)$) -- ($(P)!0.5!(Q)$) -- ($(Q)!0.5!(R)$) -- cycle;
\draw[fill=green] ($(P)!0.5!(Q)$) circle (0.3cm);
\end{scope}
%----------------
\begin{scope}
\clip (P) -- (R) -- (Q) -- cycle;
\draw[fill=yellow] (R) circle (0.25cm);
\end{scope}
%----------------
\draw[-] (P) node[left] {$P$} -- (Q) node[right] {$Q$} -- (R) node[above] {$R$} -- cycle;
\draw[-] ($(P)!0.5!(R)$) -- ($(P)!0.5!(Q)$) -- ($(Q)!0.5!(R)$) -- cycle;
%-------------------------------------------------------
%-------------------------------------------------------
\draw[] (5,-4) circle (2cm);
%----------------
\begin{scope}
\clip ($(5,-4)+(240:2)$) -- (5,-4) -- ($(5,-4)+(-45:2)$) -- cycle;
\draw[-] (5,-4) circle (0.25cm) node[below,xshift=1pt,yshift=-6pt] {$2\alpha$};
\end{scope}
%----------------
\begin{scope}
\clip ($(5,-4)+(240:2)$) -- ($(5,-4)+(100:2)$) -- ($(5,-4)+(-45:2)$) -- cycle;
\draw[-] ($(5,-4)+(100:2)$) circle (0.25cm);
\end{scope}
%----------------
\begin{scope}
\clip ($(5,-4)+(240:2)$) -- ($(5,-4)+(100:2)$) -- ($(5,-4)+(-45:2)$) -- cycle;
\draw[-] ($(5,-4)+(100:2)$) circle (0.31cm) node[below,xshift=2pt,yshift=-9pt] {$\alpha$};
\end{scope}
%----------------
\draw[-] ($(5,-4)+(240:2)$) -- (5,-4) -- ($(5,-4)+(-45:2)$);
\draw[-] ($(5,-4)+(240:2)$) -- ($(5,-4)+(100:2)$) -- ($(5,-4)+(-45:2)$) -- cycle;
\end{tikzpicture}}

\end{document}


-