明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4735|回复: 10

[提问] 求大神,直线与圆的交点怎么得到啊?

[复制链接]
发表于 2013-9-1 14:55:50 | 显示全部楼层 |阅读模式
现在我有两条直线,然后我以交点为圆心画一个圆,与两条直线都相交,然后我想得到4个交点的坐标(不是再框选一次,而是画完了以后直接得到),请问用lisp语言怎么实现啊?谢谢大神
发表于 2013-9-1 15:52:11 | 显示全部楼层
你的这种情况是一个特例,很好求的,用inters求直线交点(圆心),用angle求交点到每个顶点的角度,用polar求到圆心长度为半径的一定角度的点。
 楼主| 发表于 2013-9-1 16:14:40 | 显示全部楼层
ll_j 发表于 2013-9-1 15:52
你的这种情况是一个特例,很好求的,用inters求直线交点(圆心),用angle求交点到每个顶点的角度,用polar ...

用angle不是需要两个点才能得到角度么,但是我还不知道交点的位置,怎么才能求他和圆心的角度啊
发表于 2013-9-1 16:33:56 | 显示全部楼层
Woo_yz 发表于 2013-9-1 16:14
用angle不是需要两个点才能得到角度么,但是我还不知道交点的位置,怎么才能求他和圆心的角度啊

你有两条直线,每条直线有两个端点,用这四个点求交点,就是圆心点,再以这个圆心向这四个端点求角度。
 楼主| 发表于 2013-9-1 17:36:42 | 显示全部楼层
ll_j 发表于 2013-9-1 16:33
你有两条直线,每条直线有两个端点,用这四个点求交点,就是圆心点,再以这个圆心向这四个端点求角度。

哦哦,意思懂了,但是我想得到直线端点,这个动作可以在我画圆的同时完成么,不想再框选一次。我是新手啊,谢谢指导
发表于 2013-9-1 17:52:55 | 显示全部楼层
Woo_yz 发表于 2013-9-1 17:36
哦哦,意思懂了,但是我想得到直线端点,这个动作可以在我画圆的同时完成么,不想再框选一次。我是新手啊 ...

有两条直线就OK了,直线的组码10和11就是两个端点,随后就按部就班地做就行了,在这里与直线圆的交点和圆本身没有关系,只要半径就可以了。
对实体编程并不一定就“抱着”实体不放,很多东西都可以从几何学中得到。
在VLisp中(我不会),有关于交点的函数,可以直接从实体得到需要的交点,不过这是另一种编程思路,对这种简单问题反而不太方便。
说回来,想得到后面的圆也容易,用(entnext(entlast))就可以。
 楼主| 发表于 2013-9-1 19:50:42 | 显示全部楼层
ll_j 发表于 2013-9-1 17:52
有两条直线就OK了,直线的组码10和11就是两个端点,随后就按部就班地做就行了,在这里与直线圆的交点和圆 ...

哦哦,思路懂了。但是怎么样能通过一次点击或者框选得到4个端点的坐标啊,(ssget)选择以后再用什么命令啊?
发表于 2013-9-1 22:43:53 | 显示全部楼层
Woo_yz 发表于 2013-9-1 19:50
哦哦,思路懂了。但是怎么样能通过一次点击或者框选得到4个端点的坐标啊,(ssget)选择以后再用什么命令 ...

  1. (defun c:tt()
  2.   (princ "\n选择相交直线")
  3.   (setq ss (ssget '((0 . "LINE")))
  4.         r  (getdist "\n给出圆半径:")
  5.   )
  6.   (setq e1 (ssname ss 0)
  7.         en (entget e1)
  8.         pt11(cdr (assoc 10 en))
  9.         pt12(cdr (assoc 11 en))
  10.         e2 (ssname ss 1)
  11.         en (entget e2)
  12.         pt21(cdr (assoc 10 en))
  13.         pt22(cdr (assoc 11 en))
  14.   )
  15.   (setq in0 (inters pt11 pt12 pt21 pt22))
  16.   (command ".circle" in0 r)
  17.   (setq in11(polar in0 (angle in0 pt11) r)
  18.         in12(polar in0 (angle in0 pt12) r)
  19.         in21(polar in0 (angle in0 pt21) r)
  20.         in22(polar in0 (angle in0 pt22) r)
  21.   )
  22. ;  (setq in (list in11 in12 in21 in22))
  23.   (princ)
  24. )
 楼主| 发表于 2013-9-5 21:07:01 | 显示全部楼层
ll_j 发表于 2013-9-1 22:43

虽然还是没太懂,但是还是谢谢你啦
发表于 2015-1-23 22:41:38 | 显示全部楼层
这个方法挺好的。思路很重要@
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-23 14:10 , Processed in 0.203263 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表