乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 58|回复: 2

[编程交流] 连接点

[复制链接]
M76

35

主题

114

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 09:00:15 | 显示全部楼层 |阅读模式
我想连接两组点。每个集合中的点数总是完全相同。
 
诀窍是如何避免相交线。
 
我想我需要一个递归算法来找到解决方案,当没有线相交时,但我从来没有这样想过。
 
我不是要求其他人为我编写程序,我只是需要递归部分的提示,作为参数传递什么,如何开始处理,何时回滚。
100018mafxt8hnzt0hz3zr.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:21:29 | 显示全部楼层
这看起来可以使用与我在这个“挑战”中使用的类似的递归回溯方法,用一个函数替换谓词函数来测试两组点之间的交集(想想“inters”)。
 
希望这有帮助。
回复

使用道具 举报

M76

35

主题

114

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 10:02:46 | 显示全部楼层
 
 
谢谢,当我看到你的代码时,我已经开始实现我的解决方案,基本思想是一样的,只是我的代码效率和流线型要低得多,但它似乎在工作。
 
这就是我想到的:
 
  1. (defun connect (paired plista plista2 / i j pa pb done ul s p1 p2)
  2.    (setq done nil)
  3.    (setq pa (cdar plista))
  4.    (setq i 0)
  5.    (if (= 0 (length plista2)) (setq done paired))
  6.    (while (and (not done) (< i (length plista2)))
  7.       
  8.        (setq pb (nth i plista2))
  9.        (setq ul (vl-remove (nth i plista2) plista2))
  10.       
  11.        (setq j 0)
  12.        (setq s T)
  13.        (repeat (length paired)
  14.            (setq p1 (cadr (nth j paired)))
  15.            (setq p2 (last (nth j paired)))
  16.                      (if (inters p1 p2 pa pb) (setq s nil))
  17.            (setq j (1+ j))
  18.             
  19.        )
  20.       
  21.        (if s
  22.            (setq done (connect (append paired (list (list (caar plista) (cdar plista) pb))) (cdr plista) ul ))
  23.       
  24.        )
  25.        (setq i (1+ i))
  26.       
  27.       
  28.       
  29.    )
  30.    (setq ret done)
  31. )

列表处理中的复杂性是因为我实际上在“plista”中的点上附加了一个数字,我需要保留这些关联。
 
普利斯塔看起来是这样的:(((“12881”658886.0 231817.0 0.0)(“10388”658885.0 231819.0 0 0.0)(“10387”658885.0 231819.0 0 0.0))
 
函数的结果是plista2的点
 
(("12881" (658886.0 231817.0 0.0) (658889.0 231819.0 0.0)) ("10388"  (658885.0 231819.0 0.0) (658889.0 231820.0 0.0)) ("10387" (658885.0  231819.0 0.0) (658889.0 231821.0 0.0)))
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 06:01 , Processed in 0.604901 second(s), 61 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表