乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 21|回复: 18

[编程交流] 条件语句

[复制链接]

6

主题

23

帖子

17

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 08:44:08 | 显示全部楼层 |阅读模式
大家好,
 
我在使用条件语句时遇到了问题,也许你可以帮我解决。
 
我有A点和B点选择。
2.我怎么知道我的选择3位于点A和点B的哪一边。
 
非常感谢。
 
094413gwyfzy8yz0fbts5s.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 08:48:25 | 显示全部楼层
一种方法可以如下所示。。。。
 
  1. (and (setq p1 (getpoint "\n Specify Point A :"))
  2.     (setq p2 (getpoint p1 "\n Specify Point B :"))
  3.     (setq p3 (getpoint "\n Specify Point C :"))
  4. )
  5. (cond
  6. (
  7.   (and (> (cadr p3) (cadr p1)) (< (car p3) (car p2)))
  8.   (princ "\n Point C is on the Left side ")
  9. )
  10. (
  11.   (and (> (car p3) (car p1)) (< (cadr p3) (car p2)))
  12.   (princ "\n Point C is on the Right side ")
  13. )
  14. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:53:14 | 显示全部楼层
  1. (defun c:test (/ p1 p2 p3 p1_ p2_)
  2.   (setq p1 (getpoint "\nPick Point1")
  3.       p2 (getpoint "\nPick Point2")
  4.       p3 (getpoint "\nPick Point3")
  5. )
  6.   (setq p1_ (polar p1 (angle p1 p2)( / (distance p1 p2) 2))
  7.       p2_ (car (vl-sort (list p1 p2)
  8.    (function (lambda  (y1 y2)
  9.         (> (cadr y1) (cadr y2)))))))
  10.   (if (<= (c:cal "ang(p1_,p2_,p3)") 180)
  11.     (princ "\nUpper Side of P1 P2")
  12.     (princ "\nLower Side of P1 P2")
  13. )
  14. (princ)
  15. )

 
测试功能:
 
  1. ;; Side of Ray  -  Lee Mac
  2. ;; Args: pt - test point, l1,l2 - points defining ray
  3. ;; Returns:
  4. ;;  0 if pt lies on ray
  5. ;; -1 if pt is right of ray
  6. ;;  1 if pt is left of ray
  7. (defun LM:SideOfRay ( pt l1 l2 / x )
  8.    (cond
  9.        (   (equal (setq x (sin (- (angle l1 pt) (angle l1 l2)))) 0.0 1e-14) 0)
  10.        (   (minusp x) -1)
  11.        (   1   )
  12.    )
  13. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:54:37 | 显示全部楼层
李,另一方面:
 
你怎么做反余弦?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:58:09 | 显示全部楼层
http://lee-mac.com/mathematicalfunctions.html#trigonometric
 
 
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:03:29 | 显示全部楼层
 
谢谢你,李
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:06:23 | 显示全部楼层
所有可能的结果。
 
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:10:15 | 显示全部楼层
谢谢大家,李。正如我想象的那样,但它只在WCS上运行。这没关系,反正我的观点有点问题。在我完成了我的例程之后,我计划让它在所有视口上都工作,所以我需要一些关于极点的跨函数帮助。Autodesk reference guide(Autodesk参考指南)在trans上把我弄糊涂了。
 
如果我有第1点
  1. (defun c:test ( / p1 p2 p3 x )
  2.    (if
  3.        (and
  4.            (setq p1 (getpoint "\nPick First Point of Line: "))
  5.            (setq p2 (getpoint p1 "\nPick Second Point of Line: "))
  6.            (setq p3 (getpoint "\nPick Point to Test: "))
  7.        )
  8.        (alert
  9.            (cond
  10.                (   (zerop (setq x (LM:SideOfRay (trans p3 1 0) (trans p1 1 0) (trans p2 1 0))))
  11.                    "Point is on Line."
  12.                )
  13.                (   (minusp x)
  14.                    "Point is to the Right of Line."
  15.                )
  16.                (   "Point is to the Left of Line."   )
  17.            )
  18.        )
  19.    )
  20.    (princ)
  21. )
回复

使用道具 举报

6

主题

23

帖子

17

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:13:02 | 显示全部楼层
谢谢你,李,我在本教程中学到了很多,如果Autodesk像你一样解释,对我们这些新手来说会简单得多。顺便问一下,我可以偷你的漂亮代码吗。我每次创建一行时都会使用(entmakex)。
 
  1. (setq pt1 (trans pt1 0 1))
  2. (setq ang angx)
  3. (setq pt1x (polar (polar pt1 (- ang (-pi 90)) 6)  ang 10))[color="red"] <<<-- how to use trans here[/color]

 
所以我不需要(setq pt1(trans(getpoint)0 1))?
 
回复

使用道具 举报

6

主题

23

帖子

17

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:14:26 | 显示全部楼层
 
谢谢,我很高兴这是可以理解的。
 
 
如果你愿意,你可以用它。
 
 
否,因为getpoint返回UCS中的点,而不是WCS中的点。
 
如果需要WCS中的点,可以使用:
 
  1. (setq pt1 (trans (getpoint) 0 1))
  2. (setq pt2 ((getpoint) 0 1))
  3. (setq ang (angle pt1 pt2))
  4. (setq pt1a (polar (polar pt1 (- ang (-pi 90)) 6)  ang 10)) [color="red"]<<-- trans this point[/color]
  5. (setq pt1b (polar (polar pt1 (+ ang (-pi 90)) 6)  ang 10)) [color="red"]<<-- trans this point[/color]
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 08:23 , Processed in 0.789660 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表