将细线段转换为Arc
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将细线段转换为Arc相关的知识,希望对你有一定的参考价值。
我有一个组成下面给出的数字的所有点(List <Vector2(x, y)>
)的列表。
我想将构成弧的细线段(灰色部分)转换为弧形,因此生成的图形只有弧形和线条。
要绘制弧线,我需要起点和终点。什么是找到它们的好方法?
谢谢!
答案
如果,如图所示,直线比弧线上的细小段要长得多,只需检测弧的起点和终点,然后选择一个中间点。您将从这三个点的外接圆获得弧,并使用一点三角法。
在更复杂的情况下(不同半径的弧的混合),您可以考虑构建切线方向的曲线图作为曲线横坐标的函数。 (估算两个附近点的角度。)
在这样的图中,直线表示为水平线,圆弧表示为斜线。您可以使用Douglas-Peucker算法分解绘图。
另一答案
我是这样做的:
- 采取/检测3点
p0(x0,y0),p1(x1,y1),p2(x2,y2)
正如Yves Daoust所暗示的那样。如果您的弧是矢量形式,那么只需要开始p0
并结束整个事物的p2
点以及中间p1
附近的任何顶点。 - 从创建的2个线段中点投射2条垂直线
在图像中是那些红线。所以2D中的线条是:
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|
。
以上是关于将细线段转换为Arc的主要内容,如果未能解决你的问题,请参考以下文章
AtCoder ARC076F Exhausted? 霍尔定理+线段树
Atcoder arc080E Young Maids(线段树+优先队列)
如何将 [[ivar retain] autorelease] 转换为 ARC?