如何旋转使用 TikZ 中的 [use path=\name] 选项创建的路径?

如何旋转使用 TikZ 中的 [use path=\name] 选项创建的路径?

如何在 tikz 中复制路径并围绕其中点旋转副本?

我想复制圆圈内的线(如下图所示,使用 MWE),然后垂直(或任何我想要的角度)穿过原始线绘制它。

非常感谢您的帮助,Pseudonym123

在此处输入图片描述

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[scale=0.3]
\path[name path=circle,draw] (0,0) circle [radius=5cm];
\path[name path=line127] (3,0) -- ++(127:10);
\path[name intersections={of=circle and line127}]
    (intersection-1);
\path[save path=\name](3,0) -- (intersection-1);
\path[draw,rotate=90,use path=\name];%<--- this part isn't rotating
\end{tikzpicture}
\end{document}

答案1

如果您只需要在坐标(而不是节点)之间旋转直线,我建议自定义to path实际起点calc。这样您仍然可以沿路径放置节点。

我将overlay其放在不可见的位置line127,以便边界框不会更新,并通过 命名交叉点,\tikzset因为不需要使用\path

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{intersections, calc}
\tikzset{
  rotate straight line/.default=90,
  rotate straight line/.style={
    to path={
      coordinate (@middle@) at ($(\tikztostart)!.5!(\tikztotarget)$)
      ($(@middle@)!1!#1:(\tikztostart)$)--($(@middle@)!1!#1:(\tikztotarget)$)
      \tikztonodes}}}
\begin{document}
\begin{tikzpicture}[scale=0.3]
\path[name path=circle,  draw]    (0,0) circle [radius=5cm];
\path[name path=line127, overlay] (3,0) -- ++(127:10);
\tikzset{name intersections={of=circle and line127}}

\draw[help lines] (3,0) --                          (intersection-1);
\draw             (3,0) to[rotate straight line]    (intersection-1);
\draw[red]        (3,0) to[rotate straight line=45] (intersection-1);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案2

我不明白 Qrrbrbirlbel 的问题。使用软件包tkz-euclide (我是初学者),我想出了这个。

在此处输入图片描述

    \documentclass[border=3mm]{standalone}
    \usepackage{tkz-euclide}
    \begin{document}
    \begin{tikzpicture}[scale=0.3]
        \tkzDefPoints{0/0/P,3/0/A}
        \coordinate (B) at ($(A)+(127:10)$);% we can use tikz

        %       (AB)  is  your line127
        \tkzDefCircle[R](P,5) \tkzGetPoint{C}
        \tkzDrawCircles(P,C)

        \tkzInterLC[near](A,B)(P,C) \tkzGetPoints{d}{D}
        \tkzDrawSegment(A,D)% D is the intersection point

        \tkzDefMidPoint(A,D) \tkzGetPoint{M}
        %\tkzDrawPoints(A,D,M)

        \tkzDefPointBy[rotation in rad= center M angle -pi/2](A) \tkzGetPoint{A'}
        \tkzDefPointBy[rotation in rad= center M angle -pi/2](D) \tkzGetPoint{D'}
        %\tkzDrawPoints(A',D')
        \tkzDrawSegment(A',D')
        %\tkzLabelPoints(A,D,M,A',D')
        \end{tikzpicture}
    \end{document}

答案3

这是一个使用的解决方案spath3库(它最近在 CTAN 上更新,因此您可能需要更新您的发行版)。此库允许您保存路径,然后对其进行操作,包括应用变换。键transform上的选项use允许您在重新使用路径之前指定要应用于路径的变换,spath cs坐标系允许您指定沿路径的坐标。因此,使用rotate around键,做您想做的事情并不难。

\documentclass{article}
%\url{https://tex.stackexchange.com/q/664167/86}
\usepackage{tikz}
\usetikzlibrary{
  intersections,
  spath3
}
\begin{document}
\begin{tikzpicture}[scale=0.3]
\path[name path=circle,draw] (0,0) circle [radius=5cm];
\path[name path=line127] (3,0) -- ++(127:10);
\path[name intersections={of=circle and line127}]
    (intersection-1);
\path[draw,red,spath/save=name](3,0) -- (intersection-1);
\path[draw,blue,
  spath/use={
    name,
    transform={
      rotate around={90:(spath cs:name .5)}
    }
  }
];%<--- this part isn't rotating
\end{tikzpicture}
\end{document}

我还绘制了原始路径,以便您可以看到它按照您的要求执行:

旋转路径

答案4

这更像是一个评论而不是一个答案。

对于路径,复制/拷贝、围绕某个点旋转等都是通常路径操作;并且可以在普通的 Asymptote 中用口号“顺其自然“, 看简单代码下面。即使之前不了解 Asymptote 编程,也可以阅读并理解它。

spath3库增强了 TikZ 的path操作(参见 Andrew 的回答)。即使不使用此库,仍可以在纯 TikZ 中使用一些棘手的代码完成任务。在我看来,这并不是 TikZ 的真正缺陷;这只是 TikZ 简化绘图方式的方式。

在此处输入图片描述

% https://www.overleaf.com/read/pjqpgyztmwcf
\documentclass{standalone}
\usepackage{asymptote}
\begin{document}
\begin{asy}
// http://asymptote.ualberta.ca/
size(6cm);
path cir=circle((0,0),5);
pair A=(3,0), B=A+10dir(127);
path line1=A--B;
pair C=intersectionpoint(cir,line1); 
pair M=(A+C)/2;
dot(M,blue);
// choose 90 for perpendicular one
real al=90, be=45;    
path line2=rotate(al,M)*(A--C);
path line3=rotate(be,M)*(A--C);

draw(cir);
draw(line1,lightblue+.8pt+opacity(.5));
draw(A--C,blue);
draw(line2,red);
draw(line3,orange);
\end{asy}
\end{document}

相关内容