三角函数计算不需要 import math; 看来 Asymptote 的计算功能还是挺强的。
1 import markers;
2 size(4cm, 0);
3 currentpen = linewidth(bp);
4
5 //------- define function -------
6 // 返回与 角aob 平行的单位向量
7 pair avg_angle(pair a, pair o, pair b) {
8 pair m=a-o, n=b-o;
9 real m_agl = m.y==0 ? 0 : atan(m.y/m.x);
10 real n_agl = n.y==0 ? 0 : atan(n.y/n.x);
11
12 real agl = (m_agl + n_agl) / 2;
13 pair avg_unit = (cos(agl), sin(agl));
14 return avg_unit;
15 }
16 //-------------------------------
17
18 pair A=(20,25), B=(100,5), C=(80,106); // 随意定义的角
19
20 draw(B--A--C);
21 draw(A--(60*avg_angle(B, A, C)+A), currentpen+red+dashed);
22
23 //----- label & dot -------------24 label("A", A, SW);
25 label("B", B, N);
26 label("C", C, S);
27 dot(A, linewidth(3bp)+red);
28 dot(B, linewidth(3bp)+red);
29 dot(C, linewidth(3bp)+red);
30 //-------------------------------
31
32 //--------- markers ------------
33 markangle(B,A,C);
34 /* import markers;
35 void markangle(picture pic=currentpicture, Label L="",
36 int n=1, real radius=0, real space=0,
37 pair A, pair O, pair B, arrowbar arrow=None,
38 pen p=currentpen, margin margin=NoMargin,
39 marker marker=nomarker);
40 */

没有评论:
发表评论