如何在两个圆圈之间画一条线?

如何在两个圆圈之间画一条线?

我想使用 Asymptote 创建一个图形,该图形由很多圆圈组成,圆圈之间有线条。让我用两个圆圈举一个小例子。

pair a1=(4.5,2);
pair a2=(0,0);
real r=0.25;

path c1=circle(a1,r);
path c2=circle(a2,r);

draw(c1);
draw(c2);

现在,我尝试了几种方法来画一条简单但漂亮的线:

draw(a1--a2, arrow=MidArrow(size=8));
draw(c1--c2, arrow=MidArrow(size=8));
draw(a1+(0,-r)--a2+(0,r), arrow=MidArrow(size=8));

它们都没有给出我想要的结果。第一个在圆圈内有线段,第二个没有从逻辑位置开始线条,第三个解决方案看起来不自然。我想要的是直线a1--a2,即两个圆圈之间的最短线条,但没有圆圈内的线段。

有没有办法将这条线的r两边缩短?这样我就不必计算线a1--a2与圆相交的精确坐标,因为我希望能够移动圆。

答案1

类似这样的事?

其组合删除了位于firstcut(p, c1).after路径的部分p它与c1和 的交点,删除位于 的lastcut(q, c2).before路径部分 q它与 的交点c2。请参阅 Asympote 的主手册,第 35 页。

unitsize(2cm);
pair a1=(4.5,2);
pair a2=(0,0);
real r=0.25;

path c1=circle(a1,r);
path c2=circle(a2,r);

draw(c1);
draw(c2);
//draw(a1--a2, arrow=MidArrow(size=8));
draw(lastcut(firstcut(a1--a2, c1).after, c2).before, arrow=MidArrow(size=8));

在此处输入图片描述

答案2

@Franck 有一个很好的答案,但也许更简单的解决方案是先画箭头,然后画并填充圆圈。

unitsize(1cm);
pair a1=(4.5,2);
pair a2=(0,0);
real r=0.25;

path c1=circle(a1,r);
path c2=circle(a2,r);

draw(a1--a2, arrow=MidArrow(size=8));

filldraw(c1, white);
filldraw(c2, white);

在此处输入图片描述

相关内容