如何根据X坐标在表中找出前后点
如点表((2000 210)(2100 180) (2120 189)(2160 192)(2230 187)) ,点表中x坐标由小到大,很有规律,如果已知某点p的x坐标2130,如何在点表中找出该点的前一个点(2120 189)和后一个点(2160 192),并插值计算出点p的y坐标。插值我会,如何找到前后两个点是关键。请高手帮忙。(defun search (x alist / lb)
(while (and (> (length alist) 0) (< (caar alist) x))
(setq lb (car alist)
alist (cdr alist)
)
)
(list lb (car alist))
)
_$ (search 2130 '((2000 210)(2100 180) (2120 189)(2160 192)(2230 187)))
((2120 189) (2160 192))
本帖最后由 wowan1314 于 2013-7-12 12:37 编辑
我动作还是太慢了!!
一个是遍历,一个不是遍历的;;(SETQ LST '( (1 12) (2 22) (3 33) (4 44)))
;;(T11 2.5 LST) = ((2 22) (3 33))
(defun T11 (A LST / AB A0)
(vl-member-if
'(lambda(X)
(if (<= (car A0) A (car X))
(setq AB (list A0 X))
(setq A0 X AB NIL)
)
)
LST
)
AB
);;(SETQ LST '( (1 12) (2 22) (3 33) (4 44)))
;;(T11 2.5 LST) = ((2 22) (3 33))
(defun T11 (A LST)
(mapcar
'(lambda(X Y)
(if (<= (car X) A (car Y))
(setq AB (list X Y))
)
)
LST (cdr LST)
)
AB
) (last (vl-remove (member pt pts) pts))这是前一个(cadr (member pt pts))是后一个,求更好的方法 谢谢各位了,追问:如果在点表中已经有与该点x坐标相等的点,则不再查找。程序应该怎样改。 确保点是整数时
(assoc 2120 '((2000 210)(2100 180) (2120 189)(2160 192)(2230 187)))
返回
(2120 189)
可以通用测试是否有返回值来判断。浮点数存在误差 必须对表进行遍历。 我明白了,谢谢各位了。
页:
[1]