将细线段转换为Arc

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将细线段转换为Arc相关的知识,希望对你有一定的参考价值。

我有一个组成下面给出的数字的所有点(List <Vector2(x, y)>)的列表。

我想将构成弧的细线段(灰色部分)转换为弧形,因此生成的图形只有弧形和线条。

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

谢谢!

enter image description here

答案

如果,如图所示,直线比弧线上的细小段要长得多,只需检测弧的起点和终点,然后选择一个中间点。您将从这三个点的外接圆获得弧,并使用一点三角法。

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

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

另一答案

我是这样做的:

curve radius

  1. 采取/检测3点p0(x0,y0),p1(x1,y1),p2(x2,y2) 正如Yves Daoust所暗示的那样。如果您的弧是矢量形式,那么只需要开始p0并结束整个事物的p2点以及中间p1附近的任何顶点。
  2. 从创建的2个线段中点投射2条垂直线 在图像中是那些红线。所以2D中的线条是: pa(t1) = (p0+p1)/2 + t1*(y1-y0,x0-x1) pb(t2) = (p1+p2)/2 + t2*(y2-y1,x1-x2)
  3. 计算交点 所以只需解决线性系统: (p0+p1)/2 + t1*(y1-y0,x0-x1) = (p1+p2)/2 + t2*(y2-y1,x1-x2) 得到的点c是弧中心。半径是r=|p1-c|

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

AtCoder ARC076F Exhausted? 霍尔定理+线段树

Atcoder arc080E Young Maids(线段树+优先队列)

如何将 [[ivar retain] autorelease] 转换为 ARC?

使用 XCode 5.0.2 将问题从非 ARC 迁移到 ARC

如何使用 OpenCV 将细线提取为单独的轮廓/连接组件?

题解 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)