找回密码
 注册
关于网站域名变更的通知
查看: 469|回复: 6
打印 上一主题 下一主题

[求助]在一组坐标数据中,找到最接近的,两两配对

[复制链接]
  • TA的每日心情
    开心
    2022-5-6 15:29
  • 签到天数: 34 天

    [LV.5]常住居民I

    跳转到指定楼层
    1#
    发表于 2022-5-19 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 leilei4908 于 2022-5-19 16:14 编辑

    各位有什么比较好的方法?
    目前只能用穷举法
    anb = nil
    foreach(xya xys
       xyb = nil
       dLmin = 999999
       foreach(xyt cdr(xys)
          dX = car(xya) - car(xyt)
          dY = cadr(xya) - cadr(xyt)
          dL = sqrt(dX**2 + dY**2)
          when(dL < dLmin && dL > 0
             dLmin = dL
             xyb = xyt
          )
       )
       when(xyb
          anb = cons(list(xya xyb) anb)
          xys = remove(xya xys)
          xys = remove(xyb xys)
       )
    )



    该用户从未签到

    2#
    发表于 2022-5-19 19:45 | 只看该作者
    我先看看你的程序
  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    3#
    发表于 2022-5-19 23:27 | 只看该作者
    只知道有一个经典的“平面最小点对”算法。实现起来不难。

    要不,找到最小点对后,从list删掉,然后循环,直到剩下0个或者1个点。

    点评

    visible = axlVisibleGet() axlClearSelSet() axlVisibleDesign(nil) axlVisibleLayer("VIA CLASS" t) axlSetFindFilter(?enabled '("noall" "vias") ?onButtons '("noall" "vias")) vias = axlGetSelSet(  详情 回复 发表于 2022-5-20 10:33
  • TA的每日心情
    开心
    2022-5-6 15:29
  • 签到天数: 34 天

    [LV.5]常住居民I

    4#
     楼主| 发表于 2022-5-20 10:33 | 只看该作者
    db-_- 发表于 2022-5-19 23:27
    只知道有一个经典的“平面最小点对”算法。实现起来不难。

    要不,找到最小点对后,从list删掉,然后循环 ...

    visible = axlVisibleGet()
            axlClearSelSet()
            axlVisibleDesign(nil)
            axlVisibleLayer("VIA CLASS" t)
            axlSetFindFilter(?enabled '("noall" "vias") ?onButtons '("noall" "vias"))
            vias = axlGetSelSet(axlAddSelectAll())
            axlClearSelSet()
            vias = setof(via vias via->net->diffpair)
            DP = makeTable("DP" nil)
            dpvias = nil
            dpxys = nil
            _ap = 100
            foreach(via vias
                    DP[via->net->diffpair] = cons(via DP[via->net->diffpair])
            )
            foreach(dp DP->?
                    dpName = dp->name
                    vias = DP[dp]
                    seln = nil
                    for(i 1 length(vias)
                            unless(member(i seln)
                                    ap = _ap
                                    viai = nthelem(i vias)
                                    for(j i+1 length(vias)
                                            unless(member(j seln)
                                                    viaj = nthelem(j vias)
                                                    ap_ = nthelem(3 axlAirGap(viai viaj))
                                                    when(ap_ && ap_ < ap
                                                            vian = viaj
                                                            n = j
                                                            ap = ap_
                                                    )
                                            )
                                    )
                                    when(ap < _ap
                                            seln = cons(i seln)
                                            seln = cons(n seln)
                                            dpvias = cons(list(viai vian) dpvias)
                                            dpxys = cons(list(viai->xy vian->xy ap) dpxys)
                                    )
                            )
                    )
                    ;print(seln)
            )
            axlVisibleSet(visible)
            axlVisibleUpdate(t)

    目前用穷举法写的代码
    测试没有问题了
    有更高效率的,请不吝赐教

  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    5#
    发表于 2022-5-20 15:30 | 只看该作者
    知道你的意思了,一般一对线,最多也就6个、8个孔。用什么方法完全都可忽略。

    如果需要在10万个孔里面找,再考虑用算法比较合适。
  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    6#
    发表于 2022-6-13 16:29 | 只看该作者
    zs_king 发表于 2022-6-11 16:37
    查找最近的两个孔的目的是什么?  不能通过net先筛选一遍过孔?

    一对差分线,假如有4个过孔,其中2个网络是一样的,他是想找到哪两个过孔是一对。

    该用户从未签到

    7#
    发表于 2022-6-15 11:58 | 只看该作者
    zs_king 发表于 2022-6-13 17:27
    一对差分线,假如有4个过孔,其中2个网络是一样的,他是想找到哪两个过孔是一对。


    [/quote]

    大佬 这个牛逼啊  能分享下么
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-10 17:13 , Processed in 0.078125 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表