c# - 寻找一组点的具体轮廓

标签 c# algorithm geometry computational-geometry

我有一组“ block ”(用红线和绿线表示)放置在“容器”(用蓝线表示)内。

enter image description here

block 的所有交点(绿点和红点)和容器的所有相关信息(角度、梯度、起点、终点等)都是已知的。

我想在放置 block 后提取结果图形的“最顶部”轮廓(由绿线和点表示)。

我试过用凸包(下图中紫色线所示)等方法,但没有给出准确的线。

enter image description here

我的问题是,任何人都可以指出我可以用来解决这类问题的解决方案或某种算法吗?

最佳答案

用所有点填充列表(数组)。 (在 T 节点中重复点,例如图片中的第二个绿点)
按 Y 坐标排序此列表
像扫描线算法一样扫描列表(从顶部开始)。
在每个阶段,您都会得到一组具有相同 Y 坐标(一对或更多)的点。
从左侧和右侧移除被间隔(见下文)覆盖的点。
从这些点对中创建间隔(通过 X 坐标)。
将这些区间添加到区间(段)树中。
加入邻居区间。
重复直到单个区间覆盖所有顶部。

关于c# - 寻找一组点的具体轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35717128/

相关文章:

python - 如何为具有物理限制的随机点创建修改后的 voronoi 算法

css - 悬停并单击 CSS 三 Angular 形

c# - SvcUtil.exe 与添加引用

c# - 确定 DNX 项目的当前路径

javascript - 在 JavaScript 中查找具有较大数字的 LCM 时出错

algorithm - 有向图中的最大流

c# - Azure KeyVault GetSecretAsync.Result.Value 错误处理

c# - 相对 URL 在 System.Web.UI.UserControl 中不起作用

algorithm - 通过在 Ford-Fulkerson 之后仅改变一个边缘来增加流量

sql-server - SQL Server 2008 R2 : geometry data type cannot be selected as DISTINCT because it is not comparable