phonixs 发表于 2004-5-19 21:56:00

[求助]Mapcar這個函數的用法。

本帖最后由 作者 于 2004-5-19 22:25:12 编辑

比如有P10 p20 p30 ....p100



十個點組成一個list。然後我可以利用line將這個list裏所有的元素連接起來。


但是現在有個問題,我想在其中插入個p21的點。


如何能使p21插入到p20與p30之間?這些點本身沒有任何聯系。如果說有聯系的話就是點的編號。以前是用數組來簡單實現,學LISP不久,還沒有想到辦法。


請告之,不勝感激


BTW:還有一個簡單的問題。 如何在lisp裏控制一個實數的精度? 比如小數點後三位小數?

SWAYWOOD 发表于 2004-5-19 22:56:00

本帖最后由 作者 于 2004-5-21 20:07:58 编辑 <br /><br /> 记住LISP有个很好的东东,那就是点对,你可以用点对来搞定它



(defun c:test( / ss)<BR>                       (setq p10 '(0 0 0))<BR>                       (setq p20 '(100 0 0))<BR>                       (setq p30 '(0 100 0))<BR>                       (setq list1 '(10 20 30))<BR>                       (setq list2 (list p10 p20 p30))<BR>                       (setq ss (mapcar 'cons list1 list2))<BR>                       (setq p21 '(50 50 0))<BR>                       (setq ss (cons (cons 21 p21) ss))<BR>                       )

phonixs 发表于 2004-5-19 23:27:00

好像沒有達到排序的目的啊。



其實我要面對的問題是這樣的。


我需要畫一個1.5次的拋物線。是橋拱來的。


一般都是用pline來畫九點拋物線的。


但是問題就出在需要取拱上任一一個縱斷面來做研究。


(pline只是近似的拋物線吧?也就是說如果任在拱上面取一點,那個點實際上極可能是不准確的)


於是我想著就是取出所取點的橫坐標。然後找到那個精確的點。


這就是我一樓所說的一個插入點了。但是這時需要重畫這個橋拱以達到精確的取出截面的目的。


但重畫時需要對點進行排序,將這個插入點插入到正確的原來的九點中去。


我找不到方法。


PS:也許我整個編程的思路就錯了?請多指教一次

meflying 发表于 2004-5-20 07:59:00

2楼的最后再加一句:


(setq ss (vl-sort ss '(lambda(e1 e2) (&lt; (car e1) (car e2)))))

phonixs 发表于 2004-5-21 15:38:00

倒数第二句可能二楼打得太急了。把list换成cons问题就解决了。



真是太感谢你们了!!!!!!!!!!!!!!!!!!!!


不知道哪里有vl系列的函数查询的呢?


vl-sort这个函数我还是第一次知道。原来有个排序函数的说。。

meflying 发表于 2004-5-21 16:03:00

帮助文件里就有

SWAYWOOD 发表于 2004-5-21 20:08:00

楼主说得没错,呵呵……
页: [1]
查看完整版本: [求助]Mapcar這個函數的用法。