给定多边形(规则或不规则,凸形或凹形),我想以给定的半径将其圆角;我们说“ x”。我有绘制给定2个点的圆弧的代码,但是如何找到圆弧的起点和终点?

我所拥有的只是代表多边形每个角的点的列表。 br />
这是一个简单的示例:我有一个人物角的顶点列表(1)。
图(2)是我所需要的,因此我可以画圆角来圆角。

PS:我正在使用.netdxf API(https:/ /github.com/haplokuon/netDxf)



#1 楼

由于您正在使用CAD软件,因此可能需要一些精确的结果。这里有一个可行的算法:

对于每一边:


计算线段的方程。
计算每个圆角的圆方程。
计算线段和每个圆之间的交点。
两个交点是线段的新端点。

这不适用于边小于边的情况。圆角半径。在这种情况下,您可以根据线段的长度减小圆角的半径。

#2 楼

好的,Xenapior和Reynolds一起拥有正确的想法。但是缺少解释,因此这里有一张图片来解释这一切以及一些进一步的思考。首先,让我们从绘制图像开始(是的,我知道那是他们在学校说的要您做的,但没有人这样做)。



从图像中我们可以看到有两个相等的直角三角形$ V_2,A,C $和$ V_1,B,C $。在这个三角形中,有一个未知数,我们可以定义圆角半径$ r $,我们也知道直角为90°。线$ V_1-V_2 = \ vec a $和线$ V_2-V_3 = \ vec b $之间的夹角很容易计算,因为向量之间的夹角为

$$ \ cos(\ beta)= \ frac {\ vec a·\ vec b} {| \ vec a |·| \ vec b |} $$

如果向量已经是正常的,则可以简化。因此,三角形的三个事物是已知的,这意味着所有事物都是已知的。因此,如果您知道用于计算点$ A $,$ B $和$ C $的舍入半径。所以最后:

a = normalize(V2-V1);
b = normalize(V2-V3);
halfang = acos(dot(a, b))/2.;
// skip center if you iuse splines
C = V2 - r / sin(halfang) * normalize((a+b)/2);
A = V2 - r/tan(halfang)*a;
B = V2 - r/tan(halfang)*b;


您可以使用三角恒等式对此进行一些简化。或者,如果您使用有理B样条曲线,则可以跳过C的计算

注意:这只是一种可能的公式

#3 楼

顶点的切割长度为x * ctan(t / 2),其中t是该顶点的角度。