将微小的线段转换为弧线

Posted

技术标签:

【中文标题】将微小的线段转换为弧线【英文标题】:Convert tiny line-segments to Arc 【发布时间】:2017-12-17 18:04:49 【问题描述】:

我有一个构成下图的所有点 (List <Vector2(x, y)>) 的列表。

我想将构成弧线的微小线段(灰色部分)转换为弧线,以便生成的图形只有弧线和线。

要绘制弧线,我需要起点和终点。找到它们的好方法是什么?

谢谢!

【问题讨论】:

【参考方案1】:

如果像你的图一样,直线比沿弧线的小段长得多,只需检测弧线的起点和终点,然后选择一个中间点。你会从这三个点的外接圆上得到圆弧,加上一点三角函数。

在更复杂的情况下(不同半径的弧的混合),您可以考虑将切线的方向绘制为曲线横坐标的函数。 (从附近的两个点估计角度。)

在这样的图中,直线显示为水平线,圆弧显示为斜线。您可以使用 Douglas-Peucker 算法分解图。

【讨论】:

【参考方案2】:

我是这样做的:

    取/检测 3 个点 p0(x0,y0),p1(x1,y1),p2(x2,y2)

    正如 Yves Daoust 所建议的那样。如果您的弧线是矢量形式,那么只需从整个事物的起点p0 和终点p2 以及来自/靠近中间p1 的任何顶点。

    从创建的 2 条线段中点投射 2 条垂直线

    图像中的那些红线。所以二维中的线条是:

    pa(t1) = (p0+p1)/2 + t1*(y1-y0,x0-x1)
    pb(t2) = (p1+p2)/2 + t2*(y2-y1,x1-x2)
    

    计算交点

    所以只要解决线性系统:

    (p0+p1)/2 + t1*(y1-y0,x0-x1) = (p1+p2)/2 + t2*(y2-y1,x1-x2)
    

    结果点c 是圆弧中心。半径为r=|p1-c|

【讨论】:

以上是关于将微小的线段转换为弧线的主要内容,如果未能解决你的问题,请参考以下文章

iOS中的动画线段

HDU3974 Assign the task(多叉树转换为线段+线段树区间染色)

coreldraw的所有工具的详细作用?

vba在cad中画直线和圆弧多段线

从 R + sf 中的 GPS 点创建线段

3D场景鼠标点选择物体