渐近线:绘制折线

渐近线:绘制折线

我已经开始使用asymptote并且非常喜欢它作为 的替代品TikZ。我怀念的是TikZ的功能,它说“在从到 的(A)!0.5!42:(B)线段上走一半,然后逆时针旋转 到度”。我可以想象在 中有通过几何图元实现这一点的方法。但是,我还希望有一种惯用的方法来实现它。有什么想法/参考吗?AB42asymptote

答案1

到目前为止,Asymptote 还没有内置函数来处理该部分修改器(旋转并采取部分路程)。但是,我们可以轻松地为该任务创建一个新的 Asymptote 命令!TikZ 和 Asymptote 代码都提供了以供比较。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage[inline]{asymptote}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw[violet!50,thin] (0,0) grid (6,5);
\path 
(1,1) coordinate (A) node[left]{$A$}
(5,3) coordinate (B) node[right]{$B$}
($(A)!.7!20:(B)$) coordinate (C) node[above left]{$C$}
% for comparison
([rotate around={20:(A)}]B) coordinate (Bt) node[right]{$B'$}
%($(A)!.7!(Bt)$) coordinate (C) node[right]{$C$}
;
\draw[dashed] (A)--(Bt);
\draw (A)--(B);
\draw[red] (A)--(C);
\fill (C) circle(1.5pt);
\end{tikzpicture}
\hspace{5mm}
\begin{asy}
unitsize(1cm);
import math; // for grid
add(grid(6,5,purple+white));
pair RnP(pair A, pair B, real deg=0, real pos){
pair Bt=rotate(deg,A)*B;
pair C=pos*Bt+(1-pos)*A;
return C;
}  

pair A=(1,1), B=(5,3);
pair Bt=rotate(20,A)*B;
pair C=RnP(A,B,20,.7);

draw(A--Bt,dashed);
draw(A--B);
draw(A--C,red);
label("$A$",A,W);
label("$B$",B,E); label("$B'$",Bt,E);
label("$C$",C,NW);
dot(C);
\end{asy}
\end{document}

PS:我们可以用更短的代码编写函数

pair RnP(pair A, pair B, real deg=0, real pos){
return (1-pos)*A+pos*(rotate(deg,A)*B);
}  

或(根据交换律),

pair RnP(pair A, pair B, real deg=0, real pos){
return rotate(deg,A)*(pos*B+(1-pos)*A);
}  

相关内容