Tikz:旋转一个圆圈

Tikz:旋转一个圆圈

在下面的代码中,我在倾斜的平面上放置了一个圆圈。

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\begin{document}  

\begin{tikzpicture}
\def\iangle{atan(4/5)}
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 4);
\draw (O)--coordinate[pos=0.5] (mid) (A);

\begin{scope}[rotate=\iangle]
    \draw[fill=yellow] (mid) circle [radius=1cm, yshift=1cm];
\end{scope}    
\end{tikzpicture}
\end{document}

enter image description here 尽管这已经是最简单的方法了,但有没有更直接的方法,也许不需要scope?我问这个问题是因为如果形状是正方形,我只需旋转形状并移动就可以了。

此外,为什么node下面的代码没有给出相同的结果:

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\def\iangle{atan(4/5)}
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 4);
\draw (O)--coordinate[pos=0.5] (mid) (A);

\begin{scope}[rotate=\iangle]
    %\draw[fill=yellow] (mid) circle [radius=1cm, yshift=1cm];
    \node[draw, circle, minimum size=2cm,  yshift=1cm] at (mid) {};
\end{scope}
\end{tikzpicture}
\end{document}

enter image description here

答案1

看看

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\def\iangle{atan(4/5)}
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 4);
\draw (O)--coordinate (mid) (A);
%
    \node[draw, circle, minimum size=2cm, rotate=\iangle, yshift=1cm] at (mid) {};
\end{tikzpicture}
\end{document}

就是你要找的 :)

enter image description here

答案2

如果没有需要旋转的内容(例如文本),则可以使用计算border anchor来定位圆形节点。这样就不需要知道此节点的大小。

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\coordinate (A) at (5,4);
\draw 
  let \p1=(O), \p2=(A),
      \n1={atan2(\y2-\y1,\x2-\x1)},
      \n2={ifthenelse(abs(\n1)<=90,\n1-90,\n1+90}
  in  (O)--(A)
  node[pos=.5,draw,fill=yellow,minimum width=2cm,circle,anchor={\n2},outer sep=0pt]{}
;
\end{tikzpicture}
\end{document}

enter image description here


范围内的变换不会自动应用于节点。但您也可以为形状启用此变换:添加transform shapescope选项中。

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\def\iangle{atan(4/5)}
\coordinate (O) at (0, 0);
\coordinate (A) at (5, 4);
\draw (O)--coordinate[pos=0.5] (mid) (A);

\begin{scope}[rotate=\iangle,transform shape]
    \node[draw, circle, minimum size=2cm,yshift=1cm] at (mid) {};
\end{scope}
\end{tikzpicture}
\end{document}

相关内容