条件语句
大家好,我在使用条件语句时遇到了问题,也许你可以帮我解决。
我有A点和B点选择。
2.我怎么知道我的选择3位于点A和点B的哪一边。
非常感谢。
一种方法可以如下所示。。。。
(and (setq p1 (getpoint "\n Specify Point A :"))
(setq p2 (getpoint p1 "\n Specify Point B :"))
(setq p3 (getpoint "\n Specify Point C :"))
)
(cond
(
(and (> (cadr p3) (cadr p1)) (< (car p3) (car p2)))
(princ "\n Point C is on the Left side ")
)
(
(and (> (car p3) (car p1)) (< (cadr p3) (car p2)))
(princ "\n Point C is on the Right side ")
)
)
(defun c:test (/ p1 p2 p3 p1_ p2_)
(setq p1 (getpoint "\nPick Point1")
p2 (getpoint "\nPick Point2")
p3 (getpoint "\nPick Point3")
)
(setq p1_ (polar p1 (angle p1 p2)( / (distance p1 p2) 2))
p2_ (car (vl-sort (list p1 p2)
(function (lambda(y1 y2)
(> (cadr y1) (cadr y2)))))))
(if (<= (c:cal "ang(p1_,p2_,p3)") 180)
(princ "\nUpper Side of P1 P2")
(princ "\nLower Side of P1 P2")
)
(princ)
)
测试功能:
;; Side of Ray-Lee Mac
;; Args: pt - test point, l1,l2 - points defining ray
;; Returns:
;;0 if pt lies on ray
;; -1 if pt is right of ray
;;1 if pt is left of ray
(defun LM:SideOfRay ( pt l1 l2 / x )
(cond
( (equal (setq x (sin (- (angle l1 pt) (angle l1 l2)))) 0.0 1e-14) 0)
( (minusp x) -1)
( 1 )
)
) 李,另一方面:
你怎么做反余弦? http://lee-mac.com/mathematicalfunctions.html#trigonometric
谢谢你,李 所有可能的结果。
谢谢大家,李。正如我想象的那样,但它只在WCS上运行。这没关系,反正我的观点有点问题。在我完成了我的例程之后,我计划让它在所有视口上都工作,所以我需要一些关于极点的跨函数帮助。Autodesk reference guide(Autodesk参考指南)在trans上把我弄糊涂了。
如果我有第1点
(defun c:test ( / p1 p2 p3 x )
(if
(and
(setq p1 (getpoint "\nPick First Point of Line: "))
(setq p2 (getpoint p1 "\nPick Second Point of Line: "))
(setq p3 (getpoint "\nPick Point to Test: "))
)
(alert
(cond
( (zerop (setq x (LM:SideOfRay (trans p3 1 0) (trans p1 1 0) (trans p2 1 0))))
"Point is on Line."
)
( (minusp x)
"Point is to the Right of Line."
)
( "Point is to the Left of Line." )
)
)
)
(princ)
) 谢谢你,李,我在本教程中学到了很多,如果Autodesk像你一样解释,对我们这些新手来说会简单得多。顺便问一下,我可以偷你的漂亮代码吗。我每次创建一行时都会使用(entmakex)。
(setq pt1 (trans pt1 0 1))
(setq ang angx)
(setq pt1x (polar (polar pt1 (- ang (-pi 90)) 6)ang 10)) <<<-- how to use trans here
所以我不需要(setq pt1(trans(getpoint)0 1))?
谢谢,我很高兴这是可以理解的。
如果你愿意,你可以用它。
否,因为getpoint返回UCS中的点,而不是WCS中的点。
如果需要WCS中的点,可以使用:
(setq pt1 (trans (getpoint) 0 1))
(setq pt2 ((getpoint) 0 1))
(setq ang (angle pt1 pt2))
(setq pt1a (polar (polar pt1 (- ang (-pi 90)) 6)ang 10)) <<-- trans this point
(setq pt1b (polar (polar pt1 (+ ang (-pi 90)) 6)ang 10)) <<-- trans this point
页:
[1]
2