vb.net - 在 List(of Point) 中查找当前 y 的 2 个 x 值
问题描述
我有一个List(of PointF)
. 2个嵌套的for循环穿过一个围绕一个圆圈(或圆形(但实际上是一个封闭路径))拉伸的矩形。我想在这个圈子内工作GetPixel(x,y)
。这意味着,我需要相应 y 的相应最小和最大 x 值。我怎样才能用这个 List(Of PointF) 解决这个问题?我在这里请求帮助的原因是因为我对这些List.Find(predicates or matches)
事情感到困惑。
For x As Integer = CInt(xmin) To CInt(xmax) Step 1
For y As Integer = CInt(ymin) To CInt(ymax) Step 1
'get the min and max value of x here
Next
Next
编辑:它是关于:我写了一个程序,使用灰度图像和拉普拉斯来执行边缘检测。用鼠标绘制了一个矩形,并在其中搜索了边缘。Drawing2D.GraphicsPath
然后创建了A。根据照片中显示的对象,这或多或少工作得很好,因为必须相应地放大矩形。现在我的想法是我自己画一个手绘的 GraphicsPath(而不是一个矩形)并让它在其中搜索边缘。这就是为什么我有这个圈子(或鸡蛋),我必须确保我不会越过它的边界。我已经可以计算出 xmin、xmax、ymin 和 ymax,但不能计算出 x1 和 x2(见图)。因此,当我遍历从 xmin 到 xmax 和 ymin 到 ymax 的所有点时,我想知道当前点是否在形状内。
我必须检查它的 x 值是否在给定 y 的形状 x 范围之间,然后是 y 值的相反范围。那是我的问题。如何使用列表?
解决方案
我认为你最好不要For
循环遍历整个空间。这会起作用,但它比我认为你需要的计算要多。
给定一个点,要确定它是否在您的形状内(由点列表定义),您只需要将定义的点的 x 和 y 坐标与形状列表进行比较。
例如,给定一个点 x=100px 和 y=100px,您知道您必须检查它的 x 值是否在给定 y (100px) 的形状的 x 范围之间(或相反的 y 值)。
这将(可能?)仅适用于不会“自行转动”或具有不改变极性的曲率的简单形状。(不确定它的数学名称是什么,但有一个。)例如,沙漏形状可能会带来更大的困难。
更新
这是一个简单的 Linq 方法,用于确定指定点是否在定义的形状内。请注意,它不包括形状末端的点,但您可以通过将“>”更改为“>=”等来包含这些点。
为简单起见,我使用八边形来近似圆。此外,代码假定位图中的所有点都是为形状定义的。即,不使用插值。
Dim s As List(Of Point) = New List(Of Point) From {New Point(50, 0), New Point(25, 25), New Point(0, 50), New Point(25, 75), New Point(50, 100), New Point(75, 75), New Point(100, 50), New Point(75, 25)}
Dim p As Point = New Point(30, 75) ' Is inside the shape
Dim IsInside As Boolean = s.Exists(Function(f) f.Y = p.Y AndAlso f.X < p.X) AndAlso s.Exists(Function(f) f.Y = p.Y AndAlso f.X > p.X)
可能有多种方法可以结合 Linq 测试,但您明白了。
推荐阅读
- azure - 通过 URL 参数链接到应用程序洞察搜索
- python - 如何使用 Django 处理上传的文件
- python - 摘自《Python Crash Course》一书,作者为什么要写'--snip--'?
- java - 程序生成的 Voronoi 道路
- java - 如何在 Mac 上的 IntelliJ 中安装 javafx?
- python - 为什么我可以通过引用键而不是值本身来更改 dict 值?
- python - Pandas - 使用列表中的字典规范化数据集
- ios - 导航控制器 segue 以模态方式呈现
- c# - 搜索让给线程池的 Task.Yield 等效项
- android - 显示在颤振应用程序中的图像帧上运行 tflite 的相机活动