所有关于电路

在形状内部点

# 12

# 12

2010年11月30日加入
18217年
创建一个x/y坐标系,读取轴上的点的位置。axis的复数怎么拼?
答:轴。仍然令人困惑。
WBAHN.

WBAHN.

加入2012年3月31日
26398年
如果形状是凸的,那就有一些非常有效的算法。但是你的例子并不是凸出的,所以你的选择是有限的。

一种方法是从您的观点开始并转移到其他参考点,并计算您跨越旅程的边界的次数。如果你跨越边界偶数次数,那么你的起点就是在形状(内部或外部)的同一侧作为参考点,而如果你穿过边界,你在对面的奇数次数。您只需选择一个要知道它是内部还是外部的参考点。找到一个外面的点很容易,因为你可以通过你的顶点并找到最大x和y坐标,然后选择点
# 12

# 12

2010年11月30日加入
18217年
我实际上使用了这个词典网的这个词典,但即使我试图在拉丁语中思考,答案仍然令人困惑。
然后,Anhnha的原始问题含糊不清楚,我有大约5%的信心我贡献了任何有用的东西。:(

线程启动

anhnha.

2012年4月19日加入
881
感谢输入。

实际上,我在做图像处理。这里的形状是任意的。首先,我获得轮廓点的坐标,并将它们保存到一个名为pointArray的数组中。
之后,我想在形状内部的所有点的坐标找到并将它们保存到另一个阵列中以进行进一步处理。
WBAHN的方法是可以的,但似乎有很多工作要做。

1.将任意形状转换为多边形(需要导出大量线条方程)
2.扫描并找到交叉口,计算每边的交叉口数量

我还想到了另一个算法“洪水填充”,但也有问题。

1.轮廓和我们得到的所有点的形状
2.在形状内播种一个点,然后使用洪水填充算法找到形状内点的坐标

但是,这种方法存在问题。
假设形状内部和概述后的噪音,我们可以在图片中获得两个形状(大小和小)。
如果我使用“洪水填充”的方法,我无法得到小形状内点的坐标。

PS。我可以获得形状的点坐标。现在问题是关于在这种形状内部获得点的坐标。





image2.jpg.
WBAHN.

WBAHN.

加入2012年3月31日
26398年
显然我误解了你在任务里的要求,但现在我真的不确定了。

我以为你有一套随机点,其中一些是形状的,其中一些在形状之外,你想要一个算法来识别里面的点。

你在这里说的“要点”是什么?

我们在讨论多少个点,边界点和必须过滤的点?

线程启动

anhnha.

2012年4月19日加入
881
你好,
假设在图片中,我有更大的黑色曲线上所有点(边界点)的坐标。
现在我想获得更大的黑色曲线内的所有点的坐标。
这个算法是什么?
你的算法是好的。
我的另一个想法是使用“洪水填充”来找到所有点的坐标在大
黑色曲线,但如果大的曲线里面有小的曲线,它就不起作用了。
MrAl

MrAl

2014年6月17日加入
8105年
你好,

雇一只非常非常小的老鼠:)

这对于一般形状来说是很棘手的,因为没有限制它如何折叠,扭曲和旋转。例如,取一条一般的闭合螺旋曲线,试着解出某一点是否在螺旋内。我们很容易就能知道这是一个闭合的螺旋,但如果这个闭合点可能在螺旋的任何地方呢……然后我们就得弄清楚这个点是在通道闭合之后还是在通道闭合之前,这就能告诉我们它是完全封闭的。
所以听起来我们必须从这个点开始,向各个方向寻找一个入口。如果我们找到了一扇门,我们就必须探索这个区域,寻找其他的门。beplay体育下载不了就像在迷宫中寻找出路一样。如果你永远找不到出去的路,那么这个点一定在里面,否则它就不在里面。
也许它会在以某种方式开始在开始之前改变形状。这意味着将一个时间和分配字段编号向内/外部的区域进行搜索。这可能涉及从外部搜索入口的所有角度接近形状。
我觉得这事值得多想想。
atferrari

atferrari

2004年1月6日加入
4266年
显然我误解了你在任务里的要求,但现在我真的不确定了。

我以为你有一套随机点,其中一些是形状的,其中一些在形状之外,你想要一个算法来识别里面的点。

你在这里说的“要点”是什么?

我们在讨论多少个点,边界点和必须过滤的点?
正是我的问题。

我加一句:这个形状是封闭的曲线吗?“像素”的概念在这里有效吗?

线程启动

anhnha.

2012年4月19日加入
881
你好再次,
我相信艾尔先生所说的是“洪水填充”算法。我试过那个算法,但有一些问题,因为形状里面有噪声。

@atferrari
你在这里说的“要点”是什么?
正如我在文章10中所说:
边界点坐标是已知的。
目标:查找并保存该边界内部所有点的坐标
我们在讨论多少个点,边界点和必须过滤的点?
不确定我是否理解你的问题。
我加一句:这个形状是封闭的曲线吗?“像素”的概念在这里有效吗?
是的,是的。我正在做图像处理和形状是一个封闭的曲线(像素不是封闭的数学,因为他们是数字而不是模拟)。
WBAHN.

WBAHN.

加入2012年3月31日
26398年
这些要点是您正在尝试找到在某些数据结构中的点,其中一些位于边框内部,其中一些位于边框之外,您正在尝试识别边框内部的点子集?如果是这样,那么使用洪水填充方法似乎是非常低效的,因为你必须根据点列表检查边界内的每个像素。你仍然需要进行计算来检测什么时候到达边界。相反,为什么不只是从那时向外走向边界时直接检查点的点数吗?
Kermit2

Kermit2

2010年2月5日加入
4,162
为什么数学不行呢?如果你有定义边界的点的xy坐标那么你就有了包含在其中的东西。

100是一个边界,另一个是120,100
自动地,100到120之间Y值为100的所有X坐标都可以包含在内。逻辑检查位置超过两个X值的每个Y值将给你其他集包括在那些行。

您只需要在数学上计算一个坐标,按照1的速率步进到另一个坐标。

如果这就是所谓的填满,那请原谅我的老骨头

线程启动

anhnha.

2012年4月19日加入
881
@WBahn:

这些要点是您正在尝试找到在某些数据结构中的点,其中一些位于边框内部,其中一些位于边框之外,您正在尝试识别边框内部的点子集?

实际上,我有两个数据结构但如果我能解出其中一个,另一个也行。

1:数据结构
我有两个数组保存点的坐标。
数组1:包含所有边界点的坐标
阵列2:包含所有点的坐标,包括外部,边界和内部点

目标:整理阵列2中边框内的所有点

2:数据结构

我只有一个数组保存边界点的坐标。
目标:查找并保存该边界内部所有点的坐标

注意:在两种情况下,我可以知道在边界内的一点之前(如果你需要)

如果是这样,那么使用洪水填充方法似乎是非常低效的,因为你必须根据点列表检查边界内的每个像素。你仍然需要进行计算来检测什么时候到达边界。

用洪水填充(已经知道边界内的一个点),从这个点开始,我放大并保存边界内的所有点。
这样,我只需要检查边境内的所有点反对边界点)。

相反,为什么不只是从那时向外走向边界时直接检查点的点数吗?

不知道你要怎么做?

@Kermit2:

我相信你的算法只适用于简单的形状而不是任意一个。如果这里有缺陷,我需要尝试。
然而,它似乎也效率低下,因为这里有很多扫描。
WBAHN.

WBAHN.

加入2012年3月31日
26398年
考虑以下:

点.png.
你有一个由红点组成的数组。

这个数组定义了一堆线段。制作一个线段的有序列表,这些线段是根据组成线段的两个点的最小y坐标排序的。

您还发现边框上任何点的最大X坐标,然后添加一些东西,任何内容。这将是绿线右端的x坐标。

现在考虑绿线左端的点 - 这就是我们试图确定它是否在形状内部。因此,我们构建左端处于指向的绿线,右端处于固定的最大X坐标并是水平的。

现在,我们遍历有序线段数组,直到到达第一个点,它开始时高于绿线的y坐标(因为这样,以及所有随后的线段都将完全高于绿线)。上图意味着我们将只检查9个线段。我们可以立即消除任何线段,因为第二个坐标也在直线下面。这就只剩下6个线段需要详细检查。我们现在调用一个函数来确定绿色线段是否与给定的边界线段相交。这将使最左边的为假,其余5个为真。因为这个数字是奇数,所以我们知道这个点位于形状的内部(因为我们知道绿线的右端在形状的外部)。

需要考虑的特殊情况涉及恰好位于绿线上的线段。分别检查每种可能性,并决定如果需要调整,上述算法是否会产生正确的结果。
sirch2

sirch2

2013年1月21日加入
1,029
如果从这个点到任意方向的无穷远的直线跨越边界奇数次,那么这个点就在形状内。这可能会让您简化WBahn的建议。这里有一个关于线交叉算法的建议

http://stackoverflow.com/questions/...lliding-only-check-if-they-are-intersecting-n.

除了一样,排序点更容易搜索的一种方法在某些情况下是交错X和Y的数字,所以,代表所有坐标说4位数与前导零(pad)然后添加排序列表xd1yd1xd2yd2xd3yd3xd4yd4所以坐标0001,9990
09090910.这可以将“接近”的坐标放在列表中,并允许快速消除远离关注区域的点。
上次编辑:
WBAHN.

WBAHN.

加入2012年3月31日
26398年
如果从这个点到任意方向的无穷远的直线跨越边界奇数次,那么这个点就在形状内。这可能会让您简化WBahn的建议。这里有一个关于线交叉算法的建议
这和我的建议有什么不同吗?

除了一样,排序点更容易搜索的一种方法在某些情况下是交错X和Y的数字,所以,代表所有坐标说4位数与前导零(pad)然后添加排序列表xd1yd1xd2yd2xd3yd3xd4yd4所以坐标0001,9990
09090910.这可以将“接近”的坐标放在列表中,并允许快速消除远离关注区域的点。
有趣的。在这种情况下真的有帮助吗?如果我从底部开始并致力于边界点),那么似乎必须评估低于绿线(所考虑的点的Y坐标),无论它是X坐标如何,都必须评估由于我可以找到另一个点的坐标,以便迫使它与之相交或强制它不相交。但我想知道是否有助于对此进行分类可能是有用的....必须考虑一下。

@anhnha虽然这些建议在某些时候使算法更有效的方法肯定值得探索,但你需要做的第一件事就是获得一种适用于足够小的数据集(以及十几个边界点以及十几个或因此,候选点可能很好地开始 - 手挑选它们以覆盖您可以想到的所有可能情况,包括当点完全符合各种类型的顶点时)。为此,您根本不需要对边界点列表进行排序,只需检查绿线是否会与每个边界段相交,并计算它的次数。如果您还没有完成此方法,那么在您做之前尝试使其更有效。
sirch2

sirch2

2013年1月21日加入
1,029
这和我的建议有什么不同吗?
我没说这是真的(说实话,我也没读整个帖子)。我第一次写这种类型的算法是在1987年,并且从那以后重复了很多次。我只是加入了我的经验,并不是想抢别人的风头。

至于:这种技术有用吗,这取决于我为什么把它放在一边。如果要在形状周围定义一个边界矩形,那么它可能有助于加快消除形状外部的点。许多可能的优化都有开销,因此它们是否真的加快了事情往往取决于集的大小,它的成本可能比在一个小集上使用优化的价值更多。