首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#如何检测与边缘分离的相交圆

c#如何检测与边缘分离的相交圆
EN

Stack Overflow用户
提问于 2015-05-27 19:55:22
回答 1查看 194关注 0票数 0

我正在尝试从排序的边缘点列表创建一个2(或更多)圆圈。一个起点只是一个点。一个边缘点的列表构成了一个圆的边缘。在边缘点之间画一条线会给出图片中的黑线。因此,没有半径和圆圈的大小可以变化。

看起来是这样的:

我的想法是像图2一样分割它。接下来,创建类似于文章中的圆圈。当然是用拳头,中间和最后一点。

我创建了一种方法来检测边缘点是顺时针排序还是逆时针排序。不幸的是,我被困在如何检测这些“分裂点”的图片,当然可以旋转。

结果应该是2个(或更多)带有边缘点的列表:

那么,我如何才能发现这些“分裂点”呢?还是有更好的方法来检测相交的圆圈是分开的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-27 20:30:23

输入:类似于Point[]。输出:像ListCircle这样的东西,假设输入是由重叠的圆圈组成的图片外部边缘周围的位置排序的。图片内部的任何点都不包括在内。

我想得更多了,如果你考虑坡度的话,你可以更容易地找到点。坡度变化很大的点是你正在寻找的点。

修正思想--先找过渡点,再找圆圈。首先使用一个函数来计算两点之间的线段的斜率。当你绕着一个圆圈转时,你的坡度会有一个合理的变化(你必须通过回顾这两个点在一起的距离来发现这一点)。假设你有{ A,B,C,D,…}这样的点。计算A->B和B->C的斜率。如果点间隔均匀,那么这种差或平均差可能是一种公差(这里必须小心过渡点--也许可以计算整个点集上的平均值)。如果在某一点上K->L和L->M的斜率与J->K和K->L有很大的不同,则将该指数记录为一个过渡点。一旦遍历了整个集合(包括Y->Z和Z->A的测试,如果它是一个封闭的形状),记录的索引应该定义过渡点。把每一段的中点作为每个圆的第三个点.(例如,如果您将I和M确定为过渡点,那么使用I、K和M来定义一个圆)。

最初的想法-找到圆圈,首先使用参考的文章来确定一个圆的中心,基于三个点。然后通过测试参考点周围的一些点来确定它是否真的是一个有趣的圆圈。(比方说,每5点或10点选一次,然后用所有的内部点进行核实)。随着更多重叠的圆圈,这将成为一个不那么有效的过程,所以你将不得不仔细定义算法。一旦你得到所有的参考圆,处理通过所有的边缘点(假设这些是在绘图的外部点)。使用中心、半径、距离公式和公差,确定哪个点在哪个圆上。适合于一个以上圆的公差的点是你正在寻找的点,我想。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30491971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档