重要的是,上面的答案是针对两点的,因此意味着一个方向。
点是直线的左边还是右边?这取决于线的绘制方向,因此,如果需要“线”答案,解决这一问题的简单方法是在末端选择一个隐含点,并在需要时交换两个点以获得正确的方向。此方法只需要1次拾取。 嗨Bigal
你的解决方案似乎使我能够使用李·麦克建议的方法。也就是说,如果在第一个过程中返回T,则第三个点位于左侧,如果在反转方向后返回T,则该点位于右侧。我不能使用nil值,因为我必须与另一个可能产生nil的测试(x2的值,如我之前的帖子中所示)相结合。我将使用Lee Mac方法测试此方法,并发布我将使用该解决方案执行的全部细节。
谢谢
芦荟 LM,
我将程序中存在的点p、q和r分配如下:
(defun c:test ( / a b c )
(if (and (setq a p)
(setq b q)
(setq c r)
)
(LM:clockwise-p a c b)
)
)
;; Clockwise-p - Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented
(defun LM:clockwise-p ( a b c )
(apply '> (mapcar '* (mapcar '- c a) (reverse (mapcar '- b a '(0 0)))))
)
它给了我T
当p和q被交换时,如何使其返回零?。
谢谢
芦荟 (not(LM:clockwise-p a c b))?
我不确定我是否理解你的问题-请注意以下几点:
_$ (setq p '(0 0))
(0 0)
_$ (setq q '(0 2))
(0 2)
_$ (setq r '(1 1))
(1 1)
_$ (LM:clockwise-p p r q)
nil
_$ (LM:clockwise-p q r p)
T 嗨,LM,
我使用您的代码尝试了以下方法来获取顺时针和逆时针方向的T:
(defun test1 ( / a b c )
(if (and (setq a p)
(setq b q)
(setq c r)
)
(LM:clockwise-p a c b)
)
)
;; Clockwise-p - Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented
(defun LM:clockwise-p ( a b c )
(apply '> (mapcar '* (mapcar '- c a) (reverse (mapcar '- b a))))
)
逆时针时:
(defun test2 ( / a b c )
(if (and (setq a p)
(setq b q)
(setq c r)
)
(LM:anti-clockwise-p a b c)
)
)
;;Anti- Clockwise-p
;; Returns T if p1,p2,p3 are anti-clockwise oriented
(defun LM:anti-clockwise-p ( a b c )
(apply '> (mapcar '* (mapcar '- c a) (reverse (mapcar '- b a))))
)
我使用以下代码得到了与使用上述sin公式相同的结果:
(if(和x(test2))(setq fill(+fill a)))
(if(和x(test1))(setq cut(+cut a)))
在这种情况下,x是交点(如果存在),“a”是autocad area命令返回的区域。
不需要'(0) 韩,你好,
即使点不存在,直线也不工作,因为它返回T。
谢谢
芦荟 嗨,Paulhein,
此代码在我的情况下不起作用。请按照李的建议代码和我的建议在我的最新帖子。
谢谢你的帮助。
芦荟
你好,阿洛伊,
请原谅我的失望,但要么你误解了我的代码,要么你误解了我在之前的帖子中提供的示例。
我建议您停止修改函数,重新访问我在上面发布的示例。
是的。如果提供了3D点,如果没有此表达式,该函数将无法正确执行。 李,你好,
但出于我的目的,当点在另一边时,我需要一个T或一个非零的值。当返回值为零时,我无法与另一个值为T或零的变量组合。然而,我找到了一种使用代码的方法。对不起,“(0)点;我只处理2D,因为在以旧方式使用横截面计算土方工程时。检查该值是一个自动过程(地面标高也会自动沿水平对齐以及三角网曲面的横截面拾取)。我将使用“sin”方法,而不是修改您的代码,尽管在一次处理多个部分时,这两种方法似乎同样快。
当做
芦荟
页:
1
[2]