asymptote 内置了求取复系数的一元二次方程的例程:
故考虑直接求取 f(z) = (z-a)(z-b)(z-c) 的导数 f(z) = 3z^{2} - 2(a + b + c) + (ab + bc + ca) 的两个根,然后根据椭圆的定义,求出椭圆的半长轴即可。
代码如下:
// settings.render=8; settings.outformat="png";
settings.outformat="pdf";
unitsize(1cm); dotfactor = 3;
import geometry; defaultpen(/* fontsize(8pt) */linewidth(0.8pt));
/*======== 定义(Define)/计算(Calculate) =========*/
// f(z) = (z-a)*(z-b)*(z-c)
pair a = (-3,0), b = (2,-2), c = (0,4);
point A = a, B = b, C = c; triangle t = triangle(A, B, C);
// f'(z) = 3*z^3 - 2*(a+b+c)*z + (a*b + b*c + c*a)
pair[] f1f2 = quadraticroots((pair)3, -2(a+b+c), (a*b+b*c+c*a));
point F1 = f1f2[0], F2 = f1f2[1];
point Ma = midpoint(t.BC);
// Ma 是椭圆 ell 上的点,根据椭圆定义得到 |MaF1| + |MaF2| = 2a
real a = (length(Ma-F1) + length(Ma-F2)) / 2;
ellipse ell = ellipse(F1, F2, a);
/*======== 绘制(Draw) =========*/
draw(t); draw(ell); dot(F1); dot(F2);
label("$A$", A, SW); label("$B$", B, SE);
/*======== 标注(Label) =========*/
label("$C$", C, N);
label("$F_{1}$", F1, W); label("$F_{2}$", F2, E); 
































问 如何绘制斯坦纳内切椭圆?