首页 > 其他分享 >剔除自相交线上的环

剔除自相交线上的环

时间:2024-03-08 17:25:20浏览次数:14  
标签:__ self line2 相交 mls ls line1 剔除 线上

import numpy as np
from functools import partial
from shapely.geometry import Point, LineString
from shapely.ops import substring, split, linemerge
   

class removeRingOnLineSting():
    # 去除自相交线上的小环
    # 基本思路 1 定位自相交点 2 自相交点分割线 3 分割线合并 根据长度筛选最长的两个
    # todo1 如环上环
    def __init__(self, ls, torelance=1):
        self.ls = ls
        self.torelance = torelance
    
    def crossPoint(self):
        # 定位自相交点
        N =  int(self.ls.length) // self.torelance
        sp = np.linspace(0, 1, N)[1:-1]
        pfun = partial(substring, geom=self.ls, normalized=1)
        cp = set()
        for p in sp:
            t1 = pfun(start_dist=0, end_dist=p)
            tp = pfun(start_dist=p, end_dist=p)
            t2 = pfun(start_dist=p, end_dist=1)
            
            if not t1.touches(t2):
                mp = [_ for _ in t1.intersection(t2).geoms if _ != tp]
                cp.update(mp)
        return cp
    
    def removeRing(self):
        sp = self.crossPoint()
        for p in sp:
            mls = split(self.ls, p.buffer(self.torelance/2))
            mls = [_ for _ in mls.geoms]
            mls = sorted(mls, key=lambda x: x.length)
            line1, line2 = mls[-2:]
            self.ls = self.mergeLineWithGap(line1, line2)
        return self.ls
        

    @staticmethod
    def mergeLineWithGap(line1, line2, torelance=3):
        ps1, pe1 = Point(line1.coords[0]), Point(line1.coords[-1])
        ps2, pe2 = Point(line2.coords[0]), Point(line2.coords[-1])
        
        if ps1.distance(pe2) > pe1.distance(ps2):
            gap_line = LineString([pe1, ps2])
            return linemerge([line1, gap_line, line2])
        else:
            gap_line = LineString([pe2, ps1])
return linemerge([line2, gap_line, line1]) if __name__ == "__main__": pnts = [(-7,0), (1,0), (1,1), (0,1), (0,-2), (-1,-2),(-1,-1),(7,-1)] ls = LineString(pnts) algo = removeRingOnLineSting(ls) rls = algo.removeRing()

 

标签:__,self,line2,相交,mls,ls,line1,剔除,线上
From: https://www.cnblogs.com/ddzhen/p/18061444

相关文章

  • day57 动态规划part14 代码随想录算法训练营 1035. 不相交的线
    题目:1035.不相交的线我的感悟:换汤不换药理解难点:换了个壳子听课笔记:多理解这个题意我的代码:classSolution:defmaxUncrossedLines(self,nums1:List[int],nums2:List[int])->int:#因为强调顺序,所以跟1143最长公共子序列是一样的dp......
  • 从零开始做一个软渲染器——视锥剔除、齐次裁剪和背面剔除
    从零开始做一个软渲染器——视锥剔除、齐次裁剪和背面剔除项目地址:https://github.com/DogWealth/PIRenderer1.视锥剔除最简单的视锥剔除只需要在齐次空间(也就是透视投影变换之后,透视除法之前)中对三角形的顶点判断是否满足如下条件\[-w\lex\lew\\-w\ley\lew\\-w\le......
  • 代码逻辑死循环导致线上CPU飙升问题排查
    背景今天下午出现告警提示线上环境机器的CPU突增到100%,持续约两分钟又回落到正常水平。结论文件导出时由于逻辑漏洞导致部分场景,填充excel时出现死循环,当数据填充到一定量时,就会抛异常而后捕捉到,跳出循环。一般场景分析一般来说,CPU高有以下几种常见原因:业务请求和处理的并发......
  • 奥特曼净资产破20亿美元;苹果计划通过线上渠道发布 2024 款 iPad 和 Mac丨 RTE 开发者
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 线上问题记录:因闰年导致的数据查询错误
    在今天的生产环境测试中,测试发现几个数据页面显示为空白。反馈给开发后,通过查看相关接口和后台日志,发现某个查询SQL出现了问题,错误信息如下:此查询功能的前后端近期没有改动,排除是改动造成的。从日志上看,导致错误的原因是无效的时间查询参数20230229。结合业务分析,我们需要查......
  • 一次线上redis慢的排查过程,发现redis根本不慢
    缓存应用场景:对话系统中,用redis来存储用户对话的上下文,用户每次说话将用户对话的上下文带给大模型进行推理,然后返回给用户回答该对话系统用在电话场景,对响应速度要求较高。代码中自己对redis的耗时进行了记录超过50毫秒报警start_time=time.time()dialogueSession=dial......
  • leedcode 相交链表
    会超出时间限制:classSolution:defgetIntersectionNode(self,headA:ListNode,headB:ListNode)->Optional[ListNode]:cur_b=headBcur_a=headAwhilecur_b!=None:#两个相等ifcur_b==cur_a:r......
  • 【转发】JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙!
    线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top三连,然后依次jstack、jmap伺候,具体问题具体分析即可......
  • 线上FullGC问题排查实践
    一、问题发现与排查1.1找到问题原因问题起因是我们收到了jdos的容器CPU告警,CPU使用率已经达到104%观察该机器日志发现,此时有很多线程在执行跑批任务。正常来说,跑批任务是低CPU高内存型,所以此时考虑是FullGC引起的大量CPU占用(之前有类似情况,告知用户后重启应用后解决......
  • 面试题 02.07. 链表相交C
    利用链表的特性,如果相交的话,后面就不可能岔开!你可以想象把他们有同一个尾巴,然后从尾巴往前看。所以只要知道两个链表的长度,就可以在同一起跑线上一起比较了。/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;......