15

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?

17

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.

| improve this answer | |
  • 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
  • 1
    No need to split it in two lines. \node {A} ++(30:2) node {B}; – hpekristiansen Jan 14 '18 at 8:49
12

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}
| improve this answer | |
5

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}
| improve this answer | |
  • @Estrada: I guess that your way is the simplest one – Black Mild Jan 14 '18 at 8:14
1

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}
| improve this answer | |

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.