如何在 Asymptote 中用测量值标记角度?

如何在 Asymptote 中用测量值标记角度?

在 Asymptote 中,有没有一种简单的方法可以用测量值标记角度?我发现 AoPS 有olympiad包裹,但它只提供了一种标记角度的方法,而不是用其测量值来标记它们。使用上述包,我设法创建了此图像:

图表

很糟糕。我该如何简单地标记该角度?让您了解我是 Asymptote 的初学者也可能会有所帮助。

以下是上图的代码:

import olympiad;

size(15cm);
markscalefactor = 0.5;

draw((0, 0) -- (22, 63) -- (22, 0) -- cycle);
path angle = anglemark((22, 0), (0, 0), (22, 63));
draw(angle);
draw(rightanglemark((0, 0), (22, 0), (22, 63)));
label("$70^{\circ}$", angle, E);
label("75 m", (0, 0) -- (22, 63), E);

答案1

或者,您可以使用模块markangle中的函数geometry,该函数包含在一组基础Asymptote模块中:

settings.tex="pdflatex";
import geometry;
import fontsize;defaultpen(fontsize(8pt));
texpreamble("\usepackage{lmodern}"+"\usepackage{amsmath}"
+"\usepackage{amsfonts}"+"\usepackage{amssymb}");

void perpMark(picture pic=currentpicture, 
       pair M, pair O, pair B, real size=5, 
       pen p=currentpen, filltype filltype = NoFill){
  perpendicularmark(pic, M,unit(unit(O-M)+unit(B-M)),size,p,filltype);
}

size(6cm);
pair A=(0,0), B=(12,0), C=(7,9), D=(C.x,0);

real alpha=aTan(abs(C-D)/abs(A-D));
real beta=aTan(abs(C-D)/abs(B-D));

pen p=deepblue+0.6bp;
real w=0.6bp;
markangle(Label("$\alpha$",Relative(0.5)),n=1,radius=-10,C,A,B,red+w);
markangle(Label("$\beta$ ",Relative(0.5)),n=2,radius=-8,A,B,C,deepgreen+w);
markangle(rotate(45+alpha/2)*Label("$90^\circ-\alpha$",Relative(0.5)),n=3,radius=-8,D,C,A,blue+w);
perpMark(D,A,C,gray(0.5)+w,Fill(palegreen));

draw(A--B--C--cycle,deepblue);
draw(D--C,gray(0.5)+w);

dot(A--B--C--D,UnFill);

label("$A$",A,plain.SW);
label("$B$",B,plain.SE);
label("$C$",C,plain.NW);
label("$D$",D,plain.S);

在此处输入图片描述

答案2

您的数据似乎不清楚(22,63,75,70)!您可以根据您的情况调整以下代码。不需要其他包。

一些解释:aTan以度为单位给出值;atan以弧度为单位给出值;使用精度数字和 C 语言环境string(real x, int digits=realDigits)将实数转换为字符串。因此,给出具有 4 个精度数字的值。xstring(angleA,digits=4)angleA

Asymptote 允许用户高度自定义,也就是说有多种绘制方式。例如,

draw(arc(A,.9,180,180-angleA),red);

可以替换为

draw(arc(A,A+.3*(O-A),B,CW),red);

在此处输入图片描述

//http://asymptote.ualberta.ca/
unitsize(1cm);
real a=3, b=4;
pair O=(0,0), A=(a,0), B=(0,b);
real angleA=aTan(b/a); // in degrees

draw(box(O,(.4,.4)),red);
draw(arc(A,.9,180,180-angleA),red);
string Atext=string(angleA,digits=4)+"$^{\circ}$";
label(scale(.5)*Atext,A+.6dir(180-angleA/2),blue);
draw(O--A--B--cycle);

label("$O$",O,SW);
label("$A$",A,SE);
label("$B$",B,NW);
shipout(bbox(5mm,invisible));

更新:这只是为了好玩。我经常创建自己的角度标记命令。该命令rightanglemark返回一条路径。它可以是draw、 或 或fill,并filldraw带有适当的用途。

在此处输入图片描述

unitsize(1.2cm);

// right angle mark as a path
path rightanglemark(pair A, pair C, pair B, real size=.3){
pair Ca=C+size*unit(A-C);
pair Cb=C+size*unit(B-C);   
pair Cab=Ca+Cb-C;
return Ca--Cab--Cb;
}

real a=3, b=4;
real c=sqrt(a^2+b^2);
pair O=(0,0), A=(-c/2,0), B=(c/2,0);
real angleA=aTan(b/a), angleB=90-angleA; // in degrees
pair C=c/2*dir(2*angleA);
draw(circle(O,c/2),lightmagenta);

//draw(rightanglemark(A,C,B),red);  // to draw angle
//fill(rightanglemark(A,C,B)--C--cycle,palegreen);  // >>>to fill angle
filldraw(rightanglemark(A,C,B)--C--cycle,palegreen,red); // >>>to fill and draw angle


draw(arc(A,.4,0,angleA),red);
draw(arc(B,.4,180,180-angleB),red);
draw(arc(B,.45,180,180-angleB),red);

string Atext=string(angleA,digits=4)+"$^{\circ}$";
string Btext=string(angleB,digits=4)+"$^{\circ}$";
label(scale(.6)*Atext,A+.8dir(angleA/2),blue);
label(scale(.6)*Btext,B+.8dir(180-angleB/2),blue);

draw(Label("$a=$ "+string(a),Relative(.5),Rotate(B-C)),B--C);
draw(Label("$c=$ "+string(c),Relative(.5)),A--B);
draw(Label("$b=$ "+string(b),Relative(.5),Rotate(C-A)),C--A);

label("$A$",A,W);
label("$B$",B,E);
label("$C$",C,N);
dot(O,lightmagenta);

shipout(bbox(5mm,invisible));

答案3

使用tzplot

在此处输入图片描述

\documentclass[tikz]{standalone} 

\usepackage{tzplot}

\begin{document}

\begin{tikzpicture}[scale=.1,font=\scriptsize]
\tzcoors(0,0)(A){A}[-135](63,0)(B){B}[0](0,22)(C){C}[135];
\tzpolygon(A)(B){75m}[a](C);
% simple angle marks with labels
\tzanglemark(A)(C)(B){70\textdegree}(5cm)
\tzrightanglemark(B)(A)(C){90\textdegree}[pos=.5,red](5cm)
\tzanglemark[double](A)(B)(C){$\theta$}(5cm)
\end{tikzpicture}

\end{document}

相关内容