# Position a node a certain distance away from another node at a certain angle in TikZ?

Like the title says, is it possible to position a node a certain distance away from another node at a certain angle from that node?

Yes, TikZ can use polar coordinates. Not sure exactly what is the best way of defining the second node, here is one way.

\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (A) {A};
\path (A) ++(30:2) node (B) [draw,fill=blue!20] {B};
\end{tikzpicture}
\end{document}


In (30:2) 30 is the angle, 2 the distance. 0° is to the right, positive direction is counterclockwise, so node B will be above and to the right of A.

• Gnashing teeth - just beat me to it... – Brent.Longborough Sep 7 '11 at 19:14
• Is it possible to use the \node command instead of \path? Or at least include a style in \path? – gablin Sep 7 '11 at 19:31
• @gablin: I'm no expert, but I wasn't able to think of a way to do it with \node. But you can still do stuff like \path (A) ++(30:2) node (B) [draw,fill=blue!20] {B}; to style the node, if that was what you wanted. – Torbjørn T. Sep 7 '11 at 19:37
• @Torbjorn T: Yup, that's what I wanted. Thanks! =) – gablin Sep 8 '11 at 9:37
• No need to split it in two lines. \node {A} ++(30:2) node {B}; – hpekristiansen Jan 14 '18 at 8:49

TikZ allows you to specify positions and vectors in polar coordinates. Here's an example:

\begin{tikzpicture}
\node at (0,0) (a) {A node};
\node at (120:1cm) (b) {B node};
\path (a) ++(-45:2cm) node (c) {C node};
\end{tikzpicture}


You can shift node position B regarding to another node A from an angle and a radius in the following way:

\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (A) {A};
\node (B) at ([shift=({240:1 cm})]A) {B};
\end{tikzpicture}
\end{document}

• @Estrada: I guess that your way is the simplest one – Black Mild Jan 14 '18 at 8:14

There is another way to define a node using node coordinate system:

\usetikzlibrary{calc}
\begin{tikzpicture}
\node[draw] (A) {A};
\node[draw,circle]
(node cs:name=B) at ($(node cs:name=A)+(30:2)$) {B};
\end{tikzpicture}