north911 发表于 2005-1-13 08:48:00

[LISP]请高手帮我改一下这段程序——实现动态画线

我想实现动态画线功能,请高手帮助修改,欲画的曲线是方程:y=4kx(m-x)                ,k和m是常数


liyanchao1 发表于 2005-1-13 16:36:00

怎磨没有高手回答呢?

north911 发表于 2005-1-13 17:33:00

是啊,我都等了好久了,请高手帮帮忙

meflying 发表于 2005-1-13 17:39:00

你想修改成什么样呢?

north911 发表于 2005-1-14 08:42:00

能够像cad本身的对象(比如:圆、多义线)那样动态显示,这段代码不知道飞哥运行过了没,输入参数后,移动鼠标就会画很多线,不能删除掉没用的曲线

meflying 发表于 2005-1-14 10:52:00

问题是我实在想象不出一个二次方程曲线该怎么动态显示?


圆可以根据圆心和鼠标当前位置确定半径,以达到动态显示,直线根据起点和鼠标当前位置作线,动态显示。。。可一天二次曲线,动态的时候显示的是什么呢?可否图示一下。


你的程序我运行了,看不出来你的意图。。。另:*error*函数最好存到变量里,最后恢复,否则你的程序一运行,*error*函数就被更改了,别人的错误也得用你的错误处理函数了

north911 发表于 2005-1-14 13:20:00

曲线是方程:y=4kx(m-x)       的k参数指定后,在平面上选定一个点,然后把鼠标移动的点作为第二个点,两点间的距离为m,第二个点变化(m在变)则曲线就不同,我想只要最后鼠标左键按下的那条曲线


       


不好意思我的表达能力不太好,见谅

meflying 发表于 2005-1-14 14:10:00

还是做不到,这是一条无限长的曲线,不可能都画出来,只能画某一段,只有给定起点和终点(或曲线长度,或其它限制条件),,,,

north911 发表于 2005-1-14 14:43:00

就是两点之间的部分

meflying 发表于 2005-1-14 16:32:00

看看先:(defun c:test(/ PTA VK VD pti m ents)
   (SETQ PTA (GETPOINT "\nFirst Point:")
VK   (GETDIST "\nParameter K=")
VD   (GETINT "\nDivide of the line:"))
   (setq ent nil)
   (command "_.pline")
   (repeat (1+ vd) (command '(0 0)))
   (command "")
   (setq ents (entget (entlast)))
   (while (/= (car (setq pti (grread t 15 0))) 3)
       (if (= (car pti) 5)
         (progn
(setq pti (cadr pti))
(setq ents (drawxlx PTA pti VK VD ents))
         )
       )
   )
)
(defun drawxlx(pta ptb vk vd ents / m x i xi y)
   (setq m (distance pta ptb))
   (setq x (- (car ptb) (car pta)))
   (setq x (/ x vd))
   (setq i 0)
   (repeat (1+ vd)
       (setq xi (+ (car pta) (* x   i)))
       (setq y (* 4 vk xi (- m xi)))
       (setq ents (subilst (list 10 xi y) i 10 ents))
       (setq i (1+ i))
   )
   (entmod ents)
)
;引用无痕帖子中程序改编
(defun subilst (a ilst key lst / n)
   (setq n -1)
   (mapcar '(lambda(x)
         (if (= (car x) key)
               (progn   
   (setq n (1+ n))
   (if (= ilst n) a x))
               x
               )
         
       ) lst)
)
页: [1] 2
查看完整版本: [LISP]请高手帮我改一下这段程序——实现动态画线