hubeiwdlue 发表于 2023-9-2 14:37:04

有关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:54:17

本帖最后由 caaooo 于 2023-9-2 14:56 编辑

(b cv (c cv p2))的结果是点在线上的切线,结果格式是向量形式,然后angle换算成弧度

hubeiwdlue 发表于 2023-9-2 18:26:27

caaooo 发表于 2023-9-2 14:54
(b cv (c cv p2))的结果是点在线上的切线,结果格式是向量形式,然后angle换算成弧度

谢谢您的解释,代码每一句的目的搞清楚了,这两个切线的向量是用来调整pt和p2垂线的角度差的。不过(c cv p2)的用法还是不清楚,它返回的是p2点?还是节点?

花开富贵 发表于 2023-9-2 23:34:27

hubeiwdlue 发表于 2023-9-2 18:26
谢谢您的解释,代码每一句的目的搞清楚了,这两个切线的向量是用来调整pt和p2垂线的角度差的。不过(c cv...

节点........

hubeiwdlue 发表于 2023-9-3 09:34:27

花开富贵 发表于 2023-9-2 23:34
节点........

谢谢富贵哥。

yefei812678 发表于 2024-3-21 10:33:14

感谢分享感谢分享
页: [1]
查看完整版本: 有关Vlax-curve-getfirstderiv代码的提问。