明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1441|回复: 6

[提问] 如何根据X坐标在表中找出前后点

[复制链接]
发表于 2013-7-12 11:23:04 | 显示全部楼层 |阅读模式
如点表((2000 210)(2100 180) (2120 189)(2160 192)(2230 187)) ,点表中x坐标由小到大,很有规律,如果已知某点p的x坐标2130,如何在点表中找出该点的前一个点(2120 189)和后一个点(2160 192),并插值计算出点p的y坐标。插值我会,如何找到前后两个点是关键。请高手帮忙。

发表于 2013-7-12 11:34:33 | 显示全部楼层
  1. (defun search (x alist / lb)
  2.   (while (and (> (length alist) 0) (< (caar alist) x))
  3.     (setq lb        (car alist)
  4.           alist        (cdr alist)
  5.     )
  6.   )
  7.   (list lb (car alist))
  8. )



_$ (search 2130 '((2000 210)(2100 180) (2120 189)(2160 192)(2230 187)))
((2120 189) (2160 192))

发表于 2013-7-12 11:36:29 | 显示全部楼层
本帖最后由 wowan1314 于 2013-7-12 12:37 编辑

我动作还是太慢了!!
一个是遍历,一个不是遍历的
  1. ;;(SETQ LST '( (1 12) (2 22) (3 33) (4 44)))
  2. ;;(T11 2.5 LST) = ((2 22) (3 33))
  3. (defun T11 (A LST / AB A0)
  4.   (vl-member-if
  5.   '(lambda(X)
  6.     (if (<= (car A0) A (car X))
  7.       (setq AB (list A0 X))
  8.       (setq A0 X AB NIL)
  9.     )
  10.   )
  11.   LST
  12.   )
  13.   AB
  14. )
  1. ;;(SETQ LST '( (1 12) (2 22) (3 33) (4 44)))
  2. ;;(T11 2.5 LST) = ((2 22) (3 33))
  3. (defun T11 (A LST)
  4.   (mapcar
  5.         '(lambda(X Y)
  6.           (if (<= (car X) A (car Y))
  7.             (setq AB (list X Y))
  8.           )
  9.         )
  10.         LST (cdr LST)
  11.   )
  12.   AB
  13. )
发表于 2013-7-12 11:37:46 | 显示全部楼层
(last (vl-remove (member pt pts) pts))这是前一个(cadr (member pt pts))是后一个,求更好的方法
 楼主| 发表于 2013-7-12 14:28:08 | 显示全部楼层
谢谢各位了,追问:如果在点表中已经有与该点x坐标相等的点,则不再查找。程序应该怎样改。
发表于 2013-7-12 14:37:23 | 显示全部楼层
确保点是整数时

(assoc 2120 '((2000 210)(2100 180) (2120 189)(2160 192)(2230 187)))

返回

(2120 189)

可以通用测试是否有返回值来判断。浮点数存在误差 必须对表进行遍历。
 楼主| 发表于 2013-7-12 14:45:52 | 显示全部楼层
我明白了,谢谢各位了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-28 01:23 , Processed in 0.277733 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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