有关Vlax-curve-getfirstderiv代码的提问。
参考http://bbs.mjtd.com/thread-182133-1-1.html,写了一个简化版的垂线代码,其中有一句始终理解不了,所以只要请教各位大佬。(defun c:cxx (/ a b c cv pt ang ang1 p p2 add *len)(setq a vlax-curve-getClosestPointTo b Vlax-curve-getfirstderiv c vlax-curve-getParamAtPoint)
(setq cv (car (entsel "\n选择曲线 : ")))
(setq pt (getpoint "\n选择曲线上的点 : "))
(setq p (getpoint pt "\n选择方向"))
(setq p2 (a cv (trans p 1 0)))
(setq ang (angle '(0 0) (b cv (c cv p2))))
(setq add (- (angle p2 p) ang))
(setq pt (a cv (trans pt 1 0))
ang1 (angle '(0 0) (b cv (c cv pt)))
)
(cond ((setq *len (getdist (strcat "\n长度 > :"))))
((setq *len (distance pt p)))
)
(entmake (list '(0 . "LINE")(cons 10 pt)(cons 11 (polar pt (+ ang1 add ) *len))))
(princ)
)其中,(setq ang (angle '(0 0) (b cv (c cv p2)))),这一句怎么理解,这一句理解不了,整个计算过程就理解不了。如果只是针对直线,其实是不需要ang、ang1这段计算的。这句是针对曲线的。
本帖最后由 caaooo 于 2023-9-2 14:56 编辑
(b cv (c cv p2))的结果是点在线上的切线,结果格式是向量形式,然后angle换算成弧度 caaooo 发表于 2023-9-2 14:54
(b cv (c cv p2))的结果是点在线上的切线,结果格式是向量形式,然后angle换算成弧度
谢谢您的解释,代码每一句的目的搞清楚了,这两个切线的向量是用来调整pt和p2垂线的角度差的。不过(c cv p2)的用法还是不清楚,它返回的是p2点?还是节点? hubeiwdlue 发表于 2023-9-2 18:26
谢谢您的解释,代码每一句的目的搞清楚了,这两个切线的向量是用来调整pt和p2垂线的角度差的。不过(c cv...
节点........ 花开富贵 发表于 2023-9-2 23:34
节点........
谢谢富贵哥。 感谢分享感谢分享
页:
[1]