数学计算三角线串上的线宽

Math to calculate line thickness on triangulated line strings

我正在创建我自己的 2D 绘画引擎,它能够描边和填充路径。我在连接线段的角时遇到问题。

我的做法是计算每条线段的法线,在拐角处,我使用相邻两条边的平均法线。为了计算线条粗细的顶点,我使用线段坐标和 subtract/add 平均法线乘以线条粗细的一半。

在草图上,这意味着我计算浅蓝色法线(我也将它们用于自由线末端,除非它是一个循环)并计算角的两个平均值,即红色正常(绿色为负版)。

我用 1/2 厚度(橙色形状)缩放法线以获得顶点。

虽然 red/green 法线的方向没问题,但角的大小计算不正确。

这看起来很不错,但还不够好:根据拐角的角度,线条比要求的粗细 thinner/thicker。

所以取平均值似乎是不够的。

它是这样的:看看角落看起来有多糟糕......谁能给我一些改进的建议?

p.s。无需告诉我使用第 3 方库而忘记这个问题

你对数学的描述不清楚,但我认为你要找的因素是两条边之间夹角的正弦值之一(你可以用叉积得到)。

注意接近零或 pi 的角度; 在遇到这些角度之前决定你想做什么。

我使用 ripi2 的答案从尝试获得正确的法线长度切换到计算拉伸边缘的交点并将线剪裁到该交点。

这确实有效!尽管 Beta 的答案可能更好,因为它看起来计算量较小。稍后我可能会研究一下。

结果看起来不错: