栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如果两个线段重叠或相交,则将它们合并在同一圆上

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果两个线段重叠或相交,则将它们合并在同一圆上

您可以在第二个链接中使用我的回答中所述的方法。

ma = (a2 + a1)/ 2  mb = (b2 + b1)/ 2  cda = Cos(da)cdb = Cos(db)

要检查交叉点是否存在以及发生哪种类型的交叉点,请找到4个布尔值

 BStartInsideA = (Cos(ma - b1) >= cda) BEndInsideA  =  (Cos(ma - b2) >= cda) AStartInsideB = (Cos(mb - a1) >= cdb) AEndInsideB =   (Cos(mb - a2) >= cdb)

这些组合可能形成16种可能的结果(并非所有结果都是可靠的)。我将这些结果组合为4位值的位,并在

case
语句中对其进行处理。

例如,如果第一个值和最后一个值均为true(value

0b1001=9
),则您具有类似于seg1-seg2的情况的简单交集-因此,请获取AStartans起点,BEnd作为终点并将其标准化(如果较小则将360添加到BEnd比AStart)。

预规范化步骤应提供BEnd> =BStart和AEnd>=AStart(例如,将(3,1)弧转换为具有中点182和半角179的(3,361)

可能的结果(两种额外的情况,4种简单的末端组合,4种单末端重合的情况):

 0000: no intersection 1111: full circle 0011: AStart-AEnd 1001: AStart-BEnd 0110: BStart-AEnd 1100: BStart-BEnd 0111: AStart-AEnd 1011: AStart-AEnd 1110: BStart-BEnd 1101: BStart-BEnd

一位组合和1010,0101看起来不可能

如作者建议的那样,使用通配符:

 At first check for    0000: no intersection   1111: full circle then   **11: AStart-AEnd   1001: AStart-BEnd   0110: BStart-AEnd   11**: BStart-BEnd


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485635.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号