如何实现,对线段坐标排序,生成线顺序的顶点表?
题目:将一条多段线炸开,得到多条直线,提取直线的首尾(尾首)端点组成一个短线表,将所有短线表随机排列成一个大表lst,要求:对lst排序得到原多段线有序的顶点表(不考虑方向).不能使用pedit
测试数据:
(setq lst '(((12 10 0) (14 7 0)) ((6 3 0) (10 4 0)) ((10 4 0) (14 7 0)) ((8 12 0) (12 10 0))))
结果:(((6 3 0) (10 4 0)) ((10 4 0) (14 7 0)) ((14 7 0) (12 10 0)) ((12 10 0) (8 12 0)))
或((6 3 0) (10 4 0) (14 7 0) (12 10 0) (8 12 0)) 本帖最后由 004 于 2012-12-18 23:13 编辑
Gu_xl 发表于 2012-12-18 20:27 static/image/common/back.gif
非常感谢G版主及时的回复,让我很激动,好好的拜读了,没敢轻易回复,做了一些变动请大侠过目.
;;可生成多条线点表.
(defun f1 (l / c)
(setq a (car l)
b (cdr l)
c nil
)
(while (not (equal c b))
(setq c b)
(vl-some (function (lambda (x)
(cond ((equal (car a) (car x) 1e-6)
(setq b (vl-remove x b)
a (cons (cadr x) a)
)
)
((equal (car a) (cadr x) 1e-6)
(setq b (vl-remove x b)
a (cons (car x) a)
)
)
((equal (last a) (car x) 1e-6)
(setq b (vl-remove x b)
a (append a (list (cadr x)))
)
)
((equal (last a) (cadr x) 1e-6)
(setq b (vl-remove x b)
a (append a (list (car x)))
)
)
)
)
)
b
)
)
(setq ptlst (append ptlst (list a)))
(if b
(f1 b)
)
)
(defun c:tt ()
(setq ptlst '())
(setq lst '(((12 10 0) (14 7 0));_第一条线
((6 3 0) (10 4 0))
((10 4 0) (14 7 0))
((8 12 0) (12 10 0))
((100 200 0) (110 220 0));_第二条线
((110 220 0) (330 240 0))
((100 200 0) (80 70 0))
)
)
(f1 lst)
ptlst;_返回
)
;;结果
;;(((8 12 0) (12 10 0) (14 7 0) (10 4 0) (6 3 0)) ((80 70 0) (100 200 0) (110 220 0) (330 240 0)))
本帖最后由 Gu_xl 于 2012-12-18 20:40 编辑
(defun f (l / f1 r)
(defun f1 (a b / c)
(setq c b)
(if b
(vl-some '(lambda (x)
(if (equal (car a) (car x) 1e-6)
(setq b (vl-remove x b)
a (cons (cadr x) a)
)
(if (equal (car a) (cadr x) 1e-6)
(setq b (vl-remove x b)
a (cons (car x) a)
)
)
)
)
b
)
)
(if b
(vl-some '(lambda (x)
(if (equal (last a) (car x) 1e-6)
(setq b (vl-remove x b)
a (append a (list (cadr x)))
)
(if (equal (last a) (cadr x) 1e-6)
(setq b (vl-remove x b)
a (append a (list (car x)))
)
)
)
)
b
)
)
(if (and
b
(/= b c)
)
(f1 a b)
a
)
)
(f1 (car l) (cdr l))
) 用来做什么的 gzxl 发表于 2012-12-18 22:15 static/image/common/back.gif
用来做什么的
还是你说的,用每个三角网的短线连接生等高线线.G版的方法比我的好多了. 004 发表于 2012-12-18 22:23 static/image/common/back.gif
还是你说的,用每个三角网的短线连接生等高线线.G版的方法比我的好多了.
还在研究这个啊,都生成四边网了 gzxl 发表于 2012-12-18 22:55 static/image/common/back.gif
还在研究这个啊,都生成四边网了
我还是一步一步的学习吧,你肯定是做测绘的,好多我感兴趣的帖子都有你的大名,我要步你的后尘了. 好帖,来学习下
页:
[1]