我如何确定从一点点开始可以相交的几行



给定一些行段(A1,B1(到(C1,D1(,(A2,B2(至(C2,D2(从原点开始,我想确定我可以实现的最大和最小交叉点数。我可以使用算法或概念吗?

我最接近的是礼物包装算法问题,我们可以在其中找到线段的封闭外围,但我陷入了概念层面,因此无法制定策略。

另一个想法:如果两条线在x或y维度上都没有相交,则可以通过它们的最大交叉点仅为1。但是,只有当我的特殊线路朝那个方向上方点,因此如何适用我会说其他行段吗?

据我了解,您需要为每个段创建角间隔,并检查这些片段与来自坐标的射线的交叉点。

查找每个片段末端的角度(例如,使用atan2(,订购这些角度(作为Angluar间隔的开始和结尾(。

制作包含所有角度的数组/列表与启动/结束字段一起使用值1/-1。

按角度对所有项目进行排序。

制作ac=Active_Counter=0

traverse列表,将开始/结束字段添加到acac的最大值对应于基于原点的射线相交的段的最大nuimber

示例:

 segments (1,0)-(0,1) and (-1,1)-(1,1)
 angles (0, Pi/2) and (Pi/4, 3*Pi/4) // I ordered angles for the second segment
 sorted list    (0;+1), (Pi/4;+1),(Pi/2;-1),(3*Pi/4;-1)
 ac:         0    1        2          1          0

所以最大值为2

(不要忘记重叠遍历以占零角度的间隔(

相关内容

  • 没有找到相关文章

最新更新