ketongin 发表于 2022-7-6 08:44:08

条件语句

大家好,
 
我在使用条件语句时遇到了问题,也许你可以帮我解决。
 
我有A点和B点选择。
2.我怎么知道我的选择3位于点A和点B的哪一边。
 
非常感谢。
 

Tharwat 发表于 2022-7-6 08:48:25

一种方法可以如下所示。。。。
 

(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 ")
)
)

pBe 发表于 2022-7-6 08:53:14


(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   )
   )
)

David Bethel 发表于 2022-7-6 08:54:37

李,另一方面:
 
你怎么做反余弦?

Lee Mac 发表于 2022-7-6 08:58:09

http://lee-mac.com/mathematicalfunctions.html#trigonometric
 
 

pBe 发表于 2022-7-6 09:03:29

 
谢谢你,李

Lee Mac 发表于 2022-7-6 09:06:23

所有可能的结果。
 

pBe 发表于 2022-7-6 09:10:15

谢谢大家,李。正如我想象的那样,但它只在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)
)

ketongin 发表于 2022-7-6 09:13:02

谢谢你,李,我在本教程中学到了很多,如果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))?
 

ketongin 发表于 2022-7-6 09:14:26

 
谢谢,我很高兴这是可以理解的。
 
 
如果你愿意,你可以用它。
 
 
否,因为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
查看完整版本: 条件语句