ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: aoe1981

[已解决] 出个题:如何利用散点图,产生大量的随机点,使其落入给定多边形内?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-7 13:32 | 显示全部楼层
本帖最后由 aoe1981 于 2014-10-7 13:34 编辑

  刚在36楼吹嘘凸多边形的点填充问题已解决,没想到还就是在这又出问题了,如下图:
   365.jpg
  这种情况也会进入死循环,是什么地方出错了?
  原来,多边形各个点的出现都应当遵循逆时针的顺序,如果是顺时针顺序出现的话,我的代码在没有识别的情况下会出错,因为其是基于逆时针的情况进行判断的……
  希望大家慎用我目前上传的附件,现在的这种情况也是会进入死循环的……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-7 16:12 | 显示全部楼层
  修复检测交织多边形时遇到极端情况:所有顶点都调到一条直线上时报错的情形!
  如图:
   123.jpg
  35楼附件已更新!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-7 16:23 | 显示全部楼层
  这种情况也会进入死循环,唉,又点我一个死穴……
   789.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-7 19:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
备注一个知识点:
“凹多边形(Concave Polygon):内角中至少有一个优角(Reflexive Angle)的多边形。把一个各边不自交的多边形任意一边向两方无限延长成为一直线,如果多边形的所有边中只要有一条边向两方无限延长成为一直线时,其他各边不在此直线的同旁,那么这个多边形就叫做凹多边形。凹多边形有一个或多个内角大于180度。”

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-7 19:59 | 显示全部楼层
现在,我想发布一条猜测中的“定理”,因为我感觉它是正确的!!!
……狂妄自大……
那就是:
一个n边形,最多有n-3个优角!!!

我搜了很多地方,想证实这一点,但没有搜到……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-7 20:01 | 显示全部楼层
备注:
“优角

大于平角(180度)小于周角(360度)的角,叫做优角。
角可以分为直角、锐角、钝角、优角、劣角。
区分
平角的一半叫做直角,画图时用“┓”表示.直角是90°。小于直角的角叫做锐角,锐角大于0°小于90°。大于直角而小于平角的角叫做钝角,钝角大于90°而小于180°。小于平角的角叫做劣角,锐角、直角、钝角都是劣角.大于平角小于周角的角叫做优角,优角大于180°而小于360°。”

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-8 21:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 aoe1981 于 2014-10-9 12:45 编辑

  经过艰苦攻关,解决了两个问题:
  一、任意坐标下的错误识别与排除;二、凹多边形的检测与识别。
  我目前罗列检测了7大错误类型,如下:
  1.直线方程x=a不存在斜率的情况:
   错1.jpg
  2.所有顶点都在一条直线上:
   错2.jpg
  3.有邻边重合或者说是内角为0度时:
   错3.jpg
  4.凹多边形的识别:

   错4.jpg
  5.交织多边形:
   错5.jpg
  6.顺时针凸多边形的识别与填充:
   错6.jpg
   错6结果.jpg
  7.所有顶点同为一点:
   错7.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-8 21:55 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-8 22:11 | 显示全部楼层
本帖最后由 aoe1981 于 2014-10-8 22:39 编辑

现在,对39楼内容调整为:(http://club.excelhome.net/forum. ... 1155994&pid=7882450

已解决的:
1.凸多边形的随机点填充;
2.任意坐标下错误多边形的检测与排除。
未解决的:
3.凹多边形的随机点填充。

关于问题3,应当细分为两个问题:
1.如何检测判定凹多边形,也即用代码如何识别凹多边形,就像识别“交织多边形”一样;(已解决)
2.如何对凹多边形进行大量随机点填充。(未解决)”


也就是说,下面本帖只有一个问题了,就是:凹多边形的填充!!!
这个估计得用与凸多边形完全不一样的思路!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-8 22:23 | 显示全部楼层
关于多边形凹凸性判断的说明和备注:
利用了两向量的旋转方向判断,主要参考以下资料来源:
http://blog.sina.com.cn/s/blog_69de2f960100juyg.html
的以下部分资料:

对于连续的三个点p0,p1,p2,另向量a=p1-p0,b=p2-p1
若是凸多边形,那么b相对于a一定是向逆时针方向旋转的

判断两向量的旋转方向,可以使用向量的叉积 a×b = x1×y2 - x2×y1
a×b > 0 b在a的逆时针方向
a×b = 0 b平行于a(共线)
a×b < 0 b在a的顺时针方向
要注意的是,对于最后一个点pn,还要和起始的两个点p0,p1判断一次。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 00:06 , Processed in 0.050836 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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