任何人都可以建议快速三角检测算法吗?

时间:2015-10-04 08:35:21

标签: algorithm math geometry lines

我有一些Line对象形式的数据(例如Line1(开始,结束),其中start和end是点对象形式的坐标)。是否有快速浏览所有线条以查看它们是否形成三角形?快速,我的意思是比通过所有nC3可能性更好。

编辑:刚刚意识到我可能不理解所有的回复(我没有Adrian Lamo)。请尝试解释wrt Python。

2 个答案:

答案 0 :(得分:0)

  

是否有快速浏览所有线条以查看是否有任何线条形成三角形?

是。假设您的积分是整数(或者可以很容易地转换为积分,因为它们具有固定的有效数字或类似数字):

在这里为你创造:

  1. 制作两个可快速搜索的存储结构(例如std::multimap<int>),一个用于端点的x和y坐标,将坐标与指向相应行的指针相关联
  2. 在第一个结构中,搜索具有相同x坐标的元素。这些是成为三角形角落的唯一“候选人”。由于您使用了适当的数据结构,因此搜索重复的条目很快。
  3. 对于其中每一项,请验证它们是否实际上是边缘。如果不是,请丢弃。
  4. 对于每个剩余的角,验证两个“相对的”线末端是同一边缘的一部分。丢弃其他人。完成。

答案 1 :(得分:0)

1)几何步骤:输入字典中的所有线段,第一个端点作为键,第二个端点作为值。将存在重复的键,因此您将保留值列表而不是单个值。原则上,列表中不会有重复项(除非您两次输入相同的边)。

2)拓扑步骤:对于字典中的所有条目P,考虑其列表中的所有元素对,让(Q, R)。查找Q并检查R是否属于Q列表。如果是,您已找到三角形(P, Q, R)

通过对称性,将报告每个三角形的所有六个排列。你可以通过在词典意义上强制执行P<Q<R来避免这种情况。