找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lhj743

[求助] [求助]:过一不规则图形的一点,怎么平分这个图形面积?

[复制链接]
发表于 2005-11-15 01:19:28 | 显示全部楼层
没错,不可能无解,不论要通过的点是否在内。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-11-15 08:18:46 | 显示全部楼层
假如点在域内的话,任一条线通过将面积分为左右两部分,假设线左边为面积A,线右边为B的话
假如A<0.5(A+B),B>0.5(A+B)
不断选择线,就会发现其左边(这个词定义的当然不是很好)的面积不断的变化
那么我们把这根线选择180度,就会发现线左边的面积变为了B,此时其面积大于一半总面积。
假如面积的变化是个连续函数的话,从小于一半面积到大于一半面积的过程中,必会出现一个半面积的情况,当然还可能出现几次。
对于点在域外,线的旋转角没有180度,但是面积从0到总面积的过程中,应该必会出现半面积。

微积分中存在处处可微处处不连续的情况或者处处连续处处不可微的情况,但是一般在cad制图中似乎比较难碰到。
个人感觉一定有解。

不过这道题目在求解的过程中,对于spline的面积,总是不能中分,原因大概是spline的面积求法各不相同的问题吧,记得高手们好像讨论过spline的面积求法。

不过刚打完这堆东西,周兄这个问题打击了我一番,请让我好好想想,是不是这个就是不连续的情况。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-15 08:31:06 | 显示全部楼层
精度:误差值为总面积的万分之一
  1. [FONT=courier new]
  2. (load "xyp_lib")
  3. ;|加载通用函数(可在签名栏直接下载)
  4. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  5. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  6. ★1·在acad.lsp中增加(load"xyp_lib")
  7. ■2·在每个程序内增加(load"xyp_lib")
  8. ■3·在command下,输入(load"xyp_lib")
  9. ■4·在菜单.mnl中增加(load"xyp_lib")
  10. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  11. [COLOR=red] ★通用函数下载地址:[/COLOR]
  12. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  13. |;

  14. (defun c:test ()
  15.   (cmdla0)
  16.   (mkla "界线" 1)
  17.   (setvar "osmode" 0)
  18.   (setq        pt (getpoint "\n封闭域内一点 : ")
  19.         i  0
  20.         ll (* (getvar "viewsize") 0.05)
  21.   )
  22.   (command "bpoly" pt "")
  23.   (setq en (entlast))
  24.   (if (/= en nil)
  25.     (progn
  26.       (command "area" "o" en)
  27.       ;;误差值为总面积的万分之一
  28.       (setq a0 (* (getvar "area") 0.0001))
  29.     )
  30.   )
  31.   (command "line" pt (polar pt (* pi 0.5) ll) "")
  32.   (setq        s1   (entlast)
  33.         ptn  (xyp-get-inters s1 en 1)
  34.         pt1  (car ptn)
  35.         pt2  (cadr ptn)
  36.         ptdn (xyp-get-MidPointDN pt1 pt2 ll)
  37.         ptup (xyp-get-MidPointup pt1 pt2 ll)
  38.   )
  39.   (entdel s1)
  40.   (command "line" pt1 pt2 "")
  41.   (setq s0 (entlast))
  42.   (command "bpoly" ptdn "")
  43.   (setq e1 (entlast))
  44.   (command "area" "o" e1)
  45.   (setq a1 (getvar "area"))
  46.   (entdel e1)
  47.   (command "bpoly" ptup "")
  48.   (setq e2 (entlast))
  49.   (command "area" "o" e2)
  50.   (setq a2 (getvar "area"))
  51.   (entdel e2)

  52.   (while (> (abs (- a1 a2)) a0)
  53.     (entdel s0)
  54.     (command "line"
  55.              pt
  56.              ;;角度增加量0.001弧度
  57.              (polar pt (+ (* pi 0.5) (setq i (+ i 0.001))) ll)
  58.              ""
  59.     )
  60.     (setq s1   (entlast)
  61.           ptn  (xyp-get-inters s1 en 1)
  62.           pt1  (car ptn)
  63.           pt2  (cadr ptn)
  64.           ptdn (xyp-get-MidPointDN pt1 pt2 ll)
  65.           ptup (xyp-get-MidPointup pt1 pt2 ll)
  66.     )
  67.     (entdel s1)
  68.     (command "line" pt1 pt2 "")
  69.     (setq s0 (entlast))
  70.     (command "bpoly" ptdn "")
  71.     (setq e1 (entlast))
  72.     (command "area" "o" e1)
  73.     (setq a1 (getvar "area"))
  74.     (entdel e1)
  75.     (command "bpoly" ptup "")
  76.     (setq e2 (entlast))
  77.     (command "area" "o" e2)
  78.     (setq a2 (getvar "area"))
  79.     (entdel e2)
  80.   )
  81.   (entdel en)
  82.   (mkla "面积" 4)
  83.   (xyp-Text ptdn 5 (rtos a1 2 3))
  84.   (xyp-Text ptup 5 (rtos a2 2 3))
  85.   (mkla "界点" 1)
  86.   (setvar "pdmode" 35)
  87.   (setvar "pdsize" 50)
  88.   (command "point" pt)
  89.   (command "chprop" s0 "" "la" "界线" "")
  90.   (cmdla1)
  91. )[/FONT]

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

使用道具 举报

发表于 2005-11-15 08:36:08 | 显示全部楼层
最初由 舟自横 发布
[B]举一个列子;
如图中在小圆附近的点能平分该复线吗? [/B]

直线解不存在,曲线解肯定存在,否则如何“勘定国界”?!

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

使用道具 举报

发表于 2005-11-15 10:52:00 | 显示全部楼层
這是肯定控拉。。誰都曲線解是一定存在的。。
問題是這個曲線解怎么求呢。。。。呵呵。。。。
我想難度還是挺高的吧。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-15 14:02:39 | 显示全部楼层
最初由 舟自横 发布
[B]這是肯定控拉。。誰都曲線解是一定存在的。。
問題是這個曲線解怎么求呢。。。。呵呵。。。。
我想難度還是挺高的吧。。。。。 [/B]

可以提供一个任意封闭域及域内一点的实例,让大家来试试身手!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-15 20:32:55 | 显示全部楼层
想了一段时间,现在算有点清晰了。
假如我们把平分面积的概念设定为线左边区域的面积总和和右边区域的面积总和相等的话
假如只是对于一个封闭区域而言,应该是存在一条直线可以对其进行划分的。
划分的方法可以是
1:经过某点的一条直线,那么这个时候是以定点不断旋转直线。
2:某种角度的一条直线,那么这个时候是不断平移直线。
对于这两种情况:
都是一种思路,先按要求任意作一条直线,直线可以划分区域为两个部分。那么假如
两个面积不相等的话,必定有A大于B或者A小于B,旋转直线的话,可以旋转180度得到相反的
情况,也就是线左和线右的面积由A,B 变为B,A。那么假如面积的变化是连续的话
必定存在中分面积点。其面积变化曲线大致如图a所示
由于旋转时候的面积连续性不好直观看出,我们选择平移直线的这种情况来说明面积的
变化对于封闭区域肯定是连续的。
如图b,图形CEFGHIJKLD,其图形是突变的,但是其面积是渐变的,连续的,但是在
突变的地方不可微分而已。所以同样的道理,旋转的时候若是碰到凹角等突变情况,其
面积仍然是连续的。

基于以上思路,个人认为过封闭域内一点,应该有直线可将图形分为直线两边区域,而
两边区域的面积之和相等。如图a所示,面积比的变化是连续的,一个在0.5之下,一个在
0.5之上。必定存在着一个以上的数值=0.5为所求。

这个程序的编制会比以前困难一些,难度在于要求出直线两边的区域,分别相加,进行
判断。(原来假定的是左右两边各只有一个区域)
这个求平面内一堆几何体形成的区域(多个boundary)问题应该还是比较复杂的,以前
编过一个,不过效率很低,这里有一个,
http://www.geometricad.com/app.php?id=1&lang=en
如图c所示,选择实体,找出所有封闭区域
可惜要收费,哪位大侠指点一下编程思路。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2005-11-15 21:34:25 | 显示全部楼层
我觉得在讨论这个问题时首先得确认“直线是如何分割这个面域”的

1:可以分割成两个以上的面域,直线左边的面域的面积之各等于右边的面域面积之和
2:只能分割成两个面域,两个面域的面积须相等
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-15 22:25:30 | 显示全部楼层
这个求平面内一堆几何体形成的区域(多个boundary)问题应该还是比较复杂的,以前
编过一个,不过效率很低,这里有一个,
http://www.geometricad.com/app.php?id=1&lang=en
如图c所示,选择实体,找出所有封闭区域
可惜要收费,哪位大侠指点一下编程思路。

我怎么看着这段话有点头晕:s
你写的(“以前编过一个")。。。。。怎么又成了“哪位大侠指点一下编程思路”

不管怎么样,这个问题还是很容易的。
卖个关子,也让老兄自己思考一下。
就给一个提示:
打断+面域

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

使用道具 举报

发表于 2005-11-15 22:45:33 | 显示全部楼层
狂刀兄批评的对,我当时编过一个求出各个封闭面域的,但是效率很低,大概处理10000个面域
需要5分钟,而且还有特殊要求(要求先将各个图形在交点处打断,画上交点,然后处理面域)
比较麻烦的问题出现在,怎么保证没有面域丢失,当时的想法是按照交点进行循环,一个个过去,就可以保证一个不漏。
我当时问过一次,在这里
http://www.xdcad.net/forum/showthread.php?s=&threadid=446801
或许我想的太复杂了,我现在的想法是不用点循环了,用一条水平直线按照0.01之类的增量从上部
外下部扫描,扫描到的区域都存到一个表,新增区域和这个表对比,有的就不添加。

我觉得这个问题似乎不是很简单啊,所以想请教一下还有没有什么好的思路、


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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 19:06 , Processed in 0.183613 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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