明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4189|回复: 12

[求助]圆弧求解问题,请指教!

  [复制链接]
发表于 2010-10-28 16:49:00 | 显示全部楼层 |阅读模式
已知直线一的起终点P1和P2,直线二的起终点P1和P3,以及任一点P,
求与两直线相切且通过P点的圆弧,求得半径、切线长或圆心坐标均可。
请高手指点一下思路。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2010-10-28 17:36:00 | 显示全部楼层

你可是要算法还是画法,画法很简单,采用三点画圆,

Command: c CIRCLE Specify center point for circle or [3P/2P/Ttr (tan tan
radius)]: 3p Specify first point on circle: tan to                    -->第一条线相切
Specify second point on circle: tan to                                  -->第二条线相切
Specify third point on circle:                                               -->所经过的点

 楼主| 发表于 2010-10-28 19:03:00 | 显示全部楼层
想要算法,lisp或.NET的算法都可以。
发表于 2010-10-28 21:40:00 | 显示全部楼层
尺规作图法:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2010-10-28 22:26:00 | 显示全部楼层
:) to chenjun兄,理论上应该是有双解~,不过当然楼主可能只希望这一种就可以了,这个应该可以编成lisp的,我来试试看 :)
发表于 2010-10-28 23:33:00 | 显示全部楼层

关注着进展

请问:从1楼说的条件看,p1、P2、p3、p都是已知的,也就是说是有坐标值的了。对吗?

如果是,利用三角函数解是否交佳?

一点想法。见笑

 期待早日有结果

 

 

 

 

 

发表于 2010-10-29 16:26:00 | 显示全部楼层
依 highflybird 老师 ....
  1. ;;; No error trap for test only
  2. (defun C:test ()
  3.    (setq e1 (entsel "\nSelect Line a: ")
  4.          e2 (entsel "\nSelect Line b: ")
  5.          pt (getpoint "Point 'P': " )
  6.    )
  7.    (command "Circle" "3p" "tan" (cadr e1) "tan" (cadr e2) pt)
  8.    (setq ee (entlast)
  9.         Dat (entget ee)
  10.         Ctr (cdr (assoc 10 Dat))      ; 圆心
  11.         Rad (cdr (assoc 40 Dat))      ; 半径
  12.    )
  13. )







发表于 2010-10-29 20:04:00 | 显示全部楼层

[讨论] 分割正3-22边形,拼接成正方形

:) ,Highflybird兄和Andyhon兄的做法无疑漂亮而直接

本来想用chenjun兄的思路编个lisp的,不过后来遇到需求圆和直线的交点,就暂停了。

于是利用此贴 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=80843&star=1#31199

中的二分法做法(才发现也是向andyhon兄探讨过的问题),写了如下一段冗长的代码,近似法,倒是可以用在某些约束求解的场合。见笑了。


  1. ;;;;;;;;;;;;;;;;;half search core function
  2. (defun searchhalf(f neg-point pos-point / midpoint test-value)
  3.   ;(setq midpoint (mapcar '(lambda(x y) (/ (+ x y) 2)) neg-point pos-point))
  4.   (setq midpoint (/ (+ neg-point pos-point) 2))
  5.   
  6.   (cond
  7.     ((close-enough? neg-point pos-point) midpoint)
  8.     (T (setq test-value ((eval f) midpoint))
  9.        (cond
  10.      ((> test-value 0) (searchhalf f neg-point midpoint))
  11.      ((< test-value 0) (searchhalf f midpoint pos-point))
  12.      (T midpoint)
  13.        )
  14.     )
  15.   )
  16. )
  17. (defun close-enough?(x y)
  18. (< (abs (- x y)) 0.00001)
  19. )
  20. (defun halfsolve(f a b / a-value b-value)
  21. (setq a-value ((eval f) a) b-value ((eval f) b))
  22. (cond
  23.   ((and (< a-value 0) (> b-value 0)) (searchhalf f a b))
  24.   ((and (> a-value 0) (< b-value 0)) (searchhalf f b a))
  25.   ((= a-value 0) a)
  26.   ((= b-value 0) b)
  27.   (T (prompt "The Values are not between a and b"))
  28. )
  29. )
  30. ;;;;;;;;entmake circle
  31. (defun entmakecircle(cen r layer)
  32. (entmake (list (cons 0 "CIRCLE") ;***
  33.               (cons 6 "BYLAYER")
  34.               (cons 8 layer)
  35.               (cons 10 cen) ;***
  36.               (cons 39 0.0)
  37.               (cons 40 r) ;***
  38.               (cons 62 256)
  39.               (cons 210 (list 0.0 0.0 1.0)
  40.               )))
  41. )
  42. ;;;;;function to be solved
  43. (defun caldis(x)
  44. (- (* (sin (abs (/ a23 2.0))) x) (distance (polar p1 a23half x) p))
  45. )
  46. ;;;Main function 二分法近似绘制圆过某点切两直线
  47. (defun c:test( / a12 a13 a23 a23half dis1 p p1 p2 p3 r r1)
  48.   (setq p1 (getpoint "\np1") p2 (getpoint "\np2") p3 (getpoint "\np3") p (getpoint "\np"))
  49.   (setq a12 (angle p1 p2) a13 (angle p1 p3))
  50.   (if (< a13 a12) (setq a13 (+ a13 (* 2 pi))))
  51.   (setq a23 (- a13 a12) a23half (+ a12 (/ a23 2.0)))
  52.   (setq dis1 (distance p1 p))
  53.   (setq r (halfsolve caldis 0.0 dis1))
  54.   (setq r1 (halfsolve caldis dis1 (* dis1 50)))
  55.   (entmakecircle (polar p1 a23half r) (distance (polar p1 a23half r) p) "0")
  56.   (entmakecircle (polar p1 a23half r1) (distance (polar p1 a23half r1) p) "0")
  57.   (princ)
  58. )
  59. (princ)
  60. (princ "\n 华南理工大学 qjchen,命令:test")
  61. (princ)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2010-11-1 16:09:00 | 显示全部楼层

谢谢各位高手相助!

To Andyhon:因条件中没有直线对象,故(command)函数不适用本例。

To qjchen:程序适用,具体实现中只需一个大半径圆弧,待我简化一下。

发表于 2010-11-1 22:41:00 | 显示全部楼层
既然知道4个点的坐标,直接解方程求出圆心坐标不就可以了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 03:39 , Processed in 0.165579 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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