将微小的线段转换为弧线
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|
。
【讨论】:
以上是关于将微小的线段转换为弧线的主要内容,如果未能解决你的问题,请参考以下文章