答案1
最简单的方法可能取决于asymptote
您已经编写的代码。如果您不关心切割的确切角度,那么您可以subpath
像这样创建椭圆的一部分。
unitsize(1inch);
real a = 1.0;
real b = 0.8;
pair f = (sqrt(a*a - b*b), 0);
path ell = scale(a,b)*unitcircle;
path sector = subpath(ell, 2.5, 2.9);
filldraw(sector--f--cycle, yellow);
draw(ell);
draw(sector, 1+red);
dot(f, 6+red);
如果您想要指定扇区的精确角度,那么您可以使用intersect
从焦点以所需角度射出的光线绘制椭圆。
unitsize(1inch);
real a = 1.0;
real b = 0.8;
pair f = (sqrt(a*a - b*b), 0);
real angle1 = 90;
real angle2 = 180;
path ell = scale(a,b)*unitcircle;
path sector = subpath(ell,
intersect(ell, f--f+rotate(angle1)*(10,0))[0],
intersect(ell, f--f+rotate(angle2)*(10,0))[0]);
filldraw(sector--f--cycle, yellow);
draw(ell);
draw(sector, 1+red);
dot(f, 6+red);