zzl9105 发表于 2018-5-21 16:15:47

同时取两个坐标点的方式,遍历坐标集的简单实用方法,有没有呀

本帖最后由 zzl9105 于 2018-5-21 16:16 编辑

如题,已知有n个坐标点的组成的点表,我想依次取得第1、2第2、3个点,依次类推,直到第n、1个点。相当于循环遍历了一遍,这样同时取点表内相邻两个点,向后遍历的方式,有没有什么好的方法呀。

谢谢了。

Gu_xl 发表于 2018-5-21 16:19:41

本帖最后由 Gu_xl 于 2018-5-21 16:24 编辑

(mapcar 'listplist (append (cdr plist) (list (car plist))))
or

(mapcar 'list plist (reverse (cons (car plist) (reverse (cdr plist)))))

zzl9105 发表于 2018-5-21 16:28:00

本帖最后由 zzl9105 于 2018-5-21 16:31 编辑

Gu_xl 发表于 2018-5-21 16:19
(mapcar 'listplist (append (cdr plist) (list (car plist))))
or


谢谢G版
假如我的点集是ptb,我如何定义第1、2个点pt1,pt2呀,因为我每定义一次pt1,pt2,我要做一些其它的操作。最后完成这个循环。

pzweng 发表于 2018-5-21 17:10:58

(mapcar '(lambda (pt1 pt2) (list pt1 pt2) ....这里是你想干的事... ) plist (append (cdr plist) (list (car plist))))

lostbalance 发表于 2018-5-21 20:16:37

pzweng 发表于 2018-5-21 17:10
(mapcar '(lambda (pt1 pt2) (list pt1 pt2) ....这里是你想干的事... ) plist (append (cdr plist) (list...

水平不足,mapcar看不太懂,习惯用length取表长,然后repeat,心情好了用的defun:lol

pzweng 发表于 2018-5-21 20:33:04

lostbalance 发表于 2018-5-21 20:16
水平不足,mapcar看不太懂,习惯用length取表长,然后repeat,心情好了用的defun

我弄错了,举个例子吧 ,
(mapcar '(lambda (pt1 pt2)
         (command "line" "non" pt1 "non" pt2 "") ;这一句是画线,可以替代你想做的事
         (list pt1 pt2);这句一定要放在最后,
         )
      plist
      (append (cdr plist) (list (car plist)))
)

young999 发表于 2018-5-22 18:44:54

感觉楼主好厉害,我想了15分钟,没想通G版的思路
页: [1]
查看完整版本: 同时取两个坐标点的方式,遍历坐标集的简单实用方法,有没有呀