社区
C++ 语言
帖子详情
高手看过来:如何判断一组点的排列方向
BEN1978
2005-06-13 12:58:45
有一组点,按照顺时针或者逆时针排序,
但是不知道到底是顺时针还是逆时针排序。
只知道点的xy坐标值。
有没有什么方法可以判断?
注:这组点构成闭合曲线框。
...全文
252
12
打赏
收藏
高手看过来:如何判断一组点的排列方向
有一组点,按照顺时针或者逆时针排序, 但是不知道到底是顺时针还是逆时针排序。 只知道点的xy坐标值。 有没有什么方法可以判断? 注:这组点构成闭合曲线框。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
defyer007
2005-06-16
打赏
举报
回复
如果是极坐标就更好,那样的话就可以直接看角度的值
defyer007
2005-06-14
打赏
举报
回复
如果能够知道这条线的函数表达式就好了
然后划分不同的递增和递减区间
improgrammer
2005-06-14
打赏
举报
回复
happy__888([顾问团]寻开心) 的方法经典。
sanhill
2005-06-14
打赏
举报
回复
这组点构成闭合曲线框 存不存在着 象月牙似的 情况啊,如果存在的话,因为闭合,所以肯定存在一段曲线走的方向是顺时针的,一段方向是逆时针的,那么这组点到底是算顺时针还是逆时针呢?
如果不存在这样的情况,没有凹进去的话,bidongliang_2000() 和 happy__888 的方法可以借鉴。
寻开心
2005-06-14
打赏
举报
回复
除非你的模型有特殊性,否则找不到更快的办法的
你如果有办法快速找到一个凸点,只对凸点和它周围两点计算凸凹就可以了
凸点可以通过对顶点排序,找到最大(或者最小)的x(或者y)分量的点,并且该点的y(或者x)分量是x(或者y)最大(或者最小)点当中的最大(或者最小)的一个。
这个计算只要循环一遍所有的顶点,然后进行比较判断就可以了
比如
minx = x[0], miny=y[];
index = 0;
for ( int i=1; i<n; i++ )
{
if ( minx > x[i] ) continue;
if ( miny > y[i] ) continue;
index = i;
minx = x[i]; miny=y[i];
}
当这个循环结束的时候,第index-1, index, index+1三个点构成的三角形的顺逆就可以代表整个多边形的顺逆了。判断三角形的顺逆方法也是用面积来计算就可以了。
huangshusheng
2005-06-14
打赏
举报
回复
不是的.....这个吗?有一点难啊.......主要是点太多了啊.......你可以用函数吗?
去计算一下吗?
wytianjiao
2005-06-14
打赏
举报
回复
晕啊,计算每个点与原点连接后夹角的三角函数就行了,怎么都那么麻烦呢?
这个有什么难吗?
不过要是有省空间的方法最好了……
BEN1978
2005-06-13
打赏
举报
回复
点数比较多的话,如果用面积法,计算量好像非常大,
大概有上千个点
寻开心
2005-06-13
打赏
举报
回复
另外的一个办法是找到一个凸点(不过找凸点的计算量不必计算面积公司的量小)
然后判断凸点和它左右两个点组成的三角形的顺序是顺还是逆就可以了
三角形的顺逆可以用上面的面积法判定,也可以判定另外一个点位于边的上下的方法
寻开心
2005-06-13
打赏
举报
回复
可以用下面的的方法来计算
假定顶点的坐标是 x[i],y[i]
那么使用面积计算公式
s = 0;
for ( i=0; i<n; i++ )
s += x[i]*y[(i+1)%n] - x[(i+1)%n]*y[i];
s = s * 0.5;
如果s的数值是负数表示是逆时针排列,否则就是顺时针排列
bidongliang_2000
2005-06-13
打赏
举报
回复
设有N个点,用后面的点坐标依次减前面的点的坐标,最后一个用第一个减,得N条向量.分别求出它们幅角([0,2pi]中取值),相加之后大于零的为顺时针.
goodgoodwork
2005-06-13
打赏
举报
回复
你在具体说说。点没有方向怎么判断啊?还是闭合的。
七个命令让你成为CAD
高手
7. **块(BLOCK)与插入(INSERT)**:块命令允许你将
一组
对象定义为一个单独的实体,便于重复使用。插入则可以将已定义的块插入到图形的任何位置,如建筑平面图中的门、窗符号,或者机械图中的标准零件。 以上七种...
excel
高手
——excel高级实用技巧
- 如果`range_lookup`为`TRUE`,则`table_array`的第一列必须按升序
排列
。 - 如果`range_lookup`为`FALSE`,则无需排序。 - `col_index_num`必须在有效范围内,否则将返回错误值。 ##### 3. 实际应用场景 假设你有...
AutoCAD 2012中文版从新手到
高手
视频教程下载第7章 三维绘图基础.zip
在"AutoCAD 2012中文版从新手到
高手
视频教程下载第7章 三维绘图基础"中,你将学习到以下关键知识
点
: 1. **三维工作空间**:首先,你需要了解如何切换到专门为三维设计定制的工作空间,例如“三维基础”或“三维...
点
屏
高手
-液晶显示器维修配板从入门到精通
### 液晶显示器维修配板从入门到精通——核心知识
点
解析 #### 一、液晶显示器的兴起与发展 随着液晶屏技术的不断进步和成本的大幅下降,液晶显示器(LCD)已经成为个人计算机(PC)领域中不可或缺的一部分。相较于...
cad快捷操作
CAD,即计算机辅助设计(Computer-Aided Design),是设计师们常用的一款软件,用于二维和三维图形的绘制、编辑和分析。掌握CAD快捷操作是提高工作效率的关键。以下是一些常见的CAD快捷键及其功能详解: 1. **直线...
C++ 语言
65,170
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章