将细线段转换为Arc

问题描述 投票:0回答:2

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

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

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

谢谢!

enter image description here

graphics polygon clip
2个回答
0
投票

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

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

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


0
投票

我是这样做的:

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|
© www.soinside.com 2019 - 2024. All rights reserved.