如何相对于 Asymptote 中的特定点旋转?

如何相对于 Asymptote 中的特定点旋转?

Asymptote 手册第 47 页说明该rotate命令“围绕 z 旋转角度”如下:

变换旋转(真实角度,对 z=(0,0));

我想利用此功能n围绕假设的参考点排列圆圈,使得每个圆圈都是其相邻圆圈相对于该点的旋转版本theta。结果在视觉上将类似于:

在此处输入图片描述

这是我尝试过的。

\documentclass{article}  
\usepackage{asymptote}  

\begin{document}
\begin{asy}
    size(5cm);
    path p = circle((0,3),1);
    for(int i=0; i<=10; ++i)
    {
        draw(
            p*rotate(
                (i*pi/18),(0,0)
                )
            );
    }
\end{asy}

\end{document}

但是,编译结果如下:*没有匹配的函数'运算符(路径,变换)'

答案1

据我所知,改变顺序就足够了。(我希望你不介意我切换到ayspictureB,你只需要用进行编译pdflatex -shell-escape。)

\documentclass{article}  
\usepackage{asypictureB}  

\begin{document}
\begin{asypicture}{name=robo}
    size(5cm);
    path p = circle((0,3),1);
    for(int i=0; i<=10; ++i)
    {
        draw(
            rotate(
                (i*pi/18),(0,0)
                )*p
            );
    }
\end{asypicture}

\end{document}

在此处输入图片描述

为了得到与屏幕截图类似的效果,请提供单位。(它出现对我来说,否则单位将被视为 pt,而角度约定似乎与 Ti 一样不幸Z,尽管我认为情况并非如此。至少如果我使用度数,结果是一致的。)

\documentclass{article}  
\usepackage{asypictureB}  

\begin{document}
\begin{asypicture}{name=robo}
    size(5cm);
    path p = circle((0,3cm),1cm);
    for(int i=0; i<=10; ++i)
    {
        draw(
            rotate(
                (i*10),(0,0)
                )*p
            );
    }
\end{asypicture}

\end{document}

在此处输入图片描述

答案2

如果您直接使用 asy 运行此示例,则实际上不需要 asypictureB(或更现代的 asymptote.sty 包)甚至 LaTeX 命令。

指定 size(5cm); 的目的是让您不必指定单位。如果您以厘米为单位,则可以指定 unitize(1cm);。这是一个简化版本,以 10 度为单位旋转 9 个增量:

size(5cm);
path p=circle((0,3),1);
for(int i=0; i < 10; ++i)
  draw(rotate((i*10),(0,0))*p);

相关内容