在下面的代码中,我在倾斜的平面上放置了一个圆圈。
\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}
尽管这已经是最简单的方法了,但有没有更直接的方法,也许不需要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}
答案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}
就是你要找的 :)
答案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}
范围内的变换不会自动应用于节点。但您也可以为形状启用此变换:添加transform shape
到scope
选项中。
\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}