找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2726|回复: 41

[讨论]:如何求不规则封闭pline线内最大圆

[复制链接]

已领礼包: 3个

财富等级: 恭喜发财

发表于 2005-5-26 21:32:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
准确地说,不规则多边形没有与每条边都相切的内圆,但只要求出最大的内圆即可,与多少条这相切没有关系。而我要求的这个也不一定是多边形,准确地说是一个封闭的面域,围合线中有可能使用曲线,但可以把它模拟成近似的不规则多边形(如果有不用模拟的算法则最好了)。有没有人做过这方面的偿试?

或者这个题目可以换个说法:
当有一块不规则钢板在手(其边界可能包含有各种类型的曲线,但可以把它模拟成近似的不规则多边形),如何截出一个最大的圆?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-5-27 08:09:39 | 显示全部楼层
问题挺新影,关注中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-27 08:33:25 | 显示全部楼层
我也想知道,不知那位高手编个程序就好了,先谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

 楼主| 发表于 2005-5-27 09:01:42 | 显示全部楼层
我是想用这个圆心来作为不规则面域的标志点。我想此点应该是这个面域最空旷的地方,是作为标注诸如:面积、地块号之类属性的最佳位置。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-27 14:02:57 | 显示全部楼层
很相知道。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-27 18:10:05 | 显示全部楼层
画相切圆出来不就可以了吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

 楼主| 发表于 2005-5-27 19:05:06 | 显示全部楼层
楼上的请详细地说明你的思路
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-27 19:11:41 | 显示全部楼层
我不动脑筋,说个穷尽法,
多边形所有边逐一搭配取三条边求得内切圆, 所有内切圆里半径最大的就是你要的结果
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

 楼主| 发表于 2005-5-27 19:24:33 | 显示全部楼层
楼上的,这个封闭的面域是一条spline线时怎么办呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-27 19:57:43 | 显示全部楼层
spl本身特性比较复杂,如果要求精度和速度不是很高,那就先把spl模拟成多线段
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

 楼主| 发表于 2005-5-27 21:33:03 | 显示全部楼层
楼上说的是可行的。可是据我所知,三条直线可以做出四个与之同时相切的圆,在这四个圆中,是否会同时有两个或者两个以上的圆的圆心落在面域之内呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-28 01:49:29 | 显示全部楼层
最初由 fylinwater 发布
[B]我不动脑筋,说个穷尽法,
多边形所有边逐一搭配取三条边求得内切圆, 所有内切圆里半径最大的就是你要的结果 [/B]


NO!,頂點"外擴型"是如此,有內縮時不然
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

 楼主| 发表于 2005-5-28 08:40:56 | 显示全部楼层
或者这个题目可以换个说法:
当有一块不规则钢板在手(其边界可能包含有各种类型的曲线,但可以把它模拟成近似的不规则多边形),如何截出一个最大的圆?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-28 09:05:16 | 显示全部楼层
三边形只有唯一的内切圆,在偶的“实用程序汇总”里就有:test121。

其他还是让高人解决吧……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-28 10:28:59 | 显示全部楼层
没有使用穷尽法,发挥主观能动性大概看看,几下就可解决。
三角形内切圆程序(只适用于LINE线):
[php](load "xyp_lib");加载通用函数
;|
如果已经下载xyp_lib并放到搜索路径下可以不再下载!
利用以下任何一种方式即可加载和运行通用函数内的所有子程序:
1.在acad.lsp中增加(load"xyp_lib")
2.在每个程序内增加(load"xyp_lib")
3.在command下,输入(load"xyp_lib")
4.在菜单.mnl中增加(load"xyp_lib")
通用函数下载地址:http://www.xdcad.net/forum/showthread.php?s=&threadid=325268
|;

;;;三角形内切圆并标注圆半径和面积
(defun c:test121 ()
  (cmdla0)
  (setq        s1   (usel1 0 "LINE" "LINE线")
        e-s1 (entget (car s1))
  )
  (grdraw (dxf 10 e-s1) (dxf 11 e-s1) 1)
  (setq        s2   (usel1 0 "LINE" "LINE线")
        e-s2 (entget (car s2))
  )
  (grdraw (dxf 10 e-s2) (dxf 11 e-s2) 1)
  (setq        s3   (usel1 0 "LINE" "LINE线")
        e-s3 (entget (car s3))
  )
  (grdraw (dxf 10 e-s3) (dxf 11 e-s3) 1)
  (setq        pt1   (cadr s1)
        pt2   (cadr s2)
        pt3   (cadr s3)
        pt-12 (inters (dxf 10 e-s1)
                      (dxf 11 e-s1)
                      (dxf 10 e-s2)
                      (dxf 11 e-s2)
                      nil
              )
        pt-23 (inters (dxf 10 e-s2)
                      (dxf 11 e-s2)
                      (dxf 10 e-s3)
                      (dxf 11 e-s3)
                      nil
              )
        pt-31 (inters (dxf 10 e-s3)
                      (dxf 11 e-s3)
                      (dxf 10 e-s1)
                      (dxf 11 e-s1)
                      nil
              )
  )
  (if (and pt-12 pt-23 pt-31)
    (progn
      (setq
        a1   (distance pt-12 pt-23)
        a2   (distance pt-23 pt-31)
        a3   (distance pt-31 pt-12)
        s    (/ (+ a1 a2 a3) 2.0)
        a    (rtos (sqrt (* s (- s a1) (- s a2) (- s a3))) 2 3)
        pt12 (_midp pt1 pt2)
        pt23 (_midp pt2 pt3)
      )
      (jzhz)
      (setvar "osmode" 0)
      (command "dimangular" s1 s2 pt12)
      (setq pt12 (osnap pt12 "mid"))
      (command "erase" "l" "")
      (command "dimangular" s2 s3 pt23)
      (setq pt23 (osnap pt23 "mid"))
      (command "erase" "l" "")
      (setq pt-ci (inters pt-12 pt12 pt-23 pt23 nil)
            pt0          (inters pt-ci
                          (polar pt-ci
                                 (+ (angle (dxf 10 e-s1) (dxf 11 e-s1)) (* pi 0.5))
                                 1000
                          )
                          (dxf 10 e-s1)
                          (dxf 11 e-s1)
                          nil
                  )
            rad          (distance pt-ci pt0)
      )
      (mkla "标注" 3)
      (command "circle" pt-ci pt0)
      (setq s           (entlast)
            Sa           (vla-get-Area (obj-e s))
            txt-bz (strcat "R=" (rtos rad 2 3) " ; " "S=" (rtos Sa 2 3))
      )
      (command "text" "j" "mc" pt-ci (* sc 300) "0" txt-bz)
    )
  )
  (redraw)
  (cmdla1)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-28 15:19 , Processed in 0.299122 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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