[译]如何统一多边形顶点排列顺序

哈理工OJ 1643 多边形-2【极角排序+凸凹包判断】 多边形-2 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 35(9 users) Total Accepted: 13(7 users) Rating:  Special Judge: No Description 任意给定一个多边形 阅读详情

3.3.1 Consistent Vertex Winding

Some 3D models come with polygons that are not all wound in a clockwise or counterclockwise direction, but are a mixture of both. Those polygons that are wound inconsistently should have the vertex order reversed. A good way to accomplish this is to find all common edges and verify that neighboring polygon edges are drawn in the opposite order (see Figure 6 ).

有些3D模型中的多边形顶点不是都按顺时针或都按逆时针排列,而是两种排列方式都有。(译者,平面有分正面和反面,现实中如果一个平面的顶点从正面 看是顺时针排列,那么从背面看就是逆时针,法向量判别可见面就是用了这个原理。如果规定一个平面的顶点从正面看是用顺时针,而实际模型却用了逆时针,这就 是排列不一致,用法向量进行可见面判别就不准确了。)要对这些顶点排列顺序不一致的多边形顶点进行反向排列。有一个方法,找出所有公共边,验证邻接多边形的边界是否是反向排列(Figure 6)

 

% latex2html id marker 1408
/fbox{/begin{tabular}{c}
/vrule width 0pt height 0.1...
...hefigure . Proper Winding for Shared Edge of Adjoining Facets}//
/end{tabular}}

 

To begin rewinding polygons, one polygon must be chosen as ``correct.'' All neighboring polygons must then be found and made consistent with the ``correct'' polygon. This repeats recursively for each new ``correct'' polygon until no more neighboring polygons can be found. If the model is a single closed object, all polygons will now be consistent. However, if the model has multiple unconnected pieces, another polygon that has not yet been tested must be found and the process must be repeated until all polygons have been tested and made consistent.

在修改多边形之前,要确定一个顶点排列“正确”的多边形。找到所有与它邻接的多边形,使他们的顶点排列顺序与该“正确”多边形一致。对每个处理后的多边形递归执行这个步骤,直到没有邻接多边形。如果模型是一个封闭物体,那所有多边形顶点的排序顺序已经一致。然而,如果模型由多个互相不相连的物体组成,就要找出还没有处理的多边形重复这个操作,直到所有多边形都测试通过。

The above method still leaves a 50-50 chance that the entire object is now wound backwards (assuming an object with half of the facets wound clockwise and half wound counterclockwise). Short of getting a human involved to look at the model, there are ways to check that the normals are pointing outwards. One way is to find the geometric center of the object by computing the object bounding box by finding the maximum and minimum X, Y and Z values, then computing the mid-point of the bounding box. Next, select a vertex that is the maximum distance from this center point and compute the (normalized) vector from the center point to this vertex. Then take the normal of one of the facets that shares the distant vertex and compute the dot product of the two vectors. A positive result indicates that the normals are all correct while a negative result indicates that the normals are all backwards. If the normals are backwards, negate them all and reverse the windings of all facets.

上面的方法有50%的概率使物体正反面颠倒。除了让人来分辨这个模型的正误外,还有另外一种方法判断平面的法向量是否朝向外面。先找到物体包围盒的中心,找到物体最大和最小的X, Y, Z坐标,两个坐标中点就是物体包围盒的中心。然后选择距离这个中心最远的点,并算出从中心到这个点的向量。计算共享这个最远点的某个面的法向量,如果这两个向量的点乘值大于0,就说明所有面的法向量都已经正确。如果点乘值小于0,说明所有面的法向量都颠倒了,这时遍历所有平面,把顶点顺序反转。

There are still a few pathological cases that may not come out right, such as a model of a room where it is desirable to view the inside walls, but the above method works for most cases.

虽然上述方法不适用于个别情况(比如一个房间的模型,要求墙壁内侧必须可见),大多数情况还是适用的。

C# CAD2016 多边形顶点按方向重新排序 这样,通过以上步骤,我们找到了一个多边形的一个候选起始顶点(可能位于西北方向),并且已经获取了该多边形的边界框信息,这些信息对于后续判断顶点排列顺序及处理其他相关问题具有重要意义。完整地处理八个方向(东北、东南、西南、西北、北、南、东、西),我们可以创建一个方法来获取多边形相对于给定点的最近顶点及其对应的方向。对象(或类似的多边形表示方式),其中包含了多边形的顶点。//附送AI 图片无版权 随意用 龙年大吉大利。 阅读详情

相关推荐

计算任意多边形的面积及判断顶点的顺或逆时顺序

对于凸多边形,如下图,以多边形的某一点为顶点,将其划分成多个三角形,计算这些三角形的面积,然后加起来即可。已知三角形顶点坐标,三角形面积可以利用向量的叉乘来计算。 图1 对于凹多边形,如下图,如果以$A$为顶点,将其划分成多个三角形,则多边形的面积 $S= S_{ABC} + S_{ACD} + S_{ADE}$, 这个面积明显超过多边形的面积。 图2 根据二维向量叉乘求三角形ABC...

kingBook928的博客 768

多边形点集排序

利用向量的叉积对多边形的点集进行排序,可按顺时针或者逆时针规则进行排序。

马鸣玉珂的专栏 1612

C++实现——任意多边形的面积

//求任意多边形的面积 /*语法:result = polygonarea(vector<Point>&polygon, int N); 参数: polygon:多变形顶点数组 N:多边形顶点数目 返回值:多边形面积 注意: 支持任意多边形,凹、凸皆可 多边形顶点输入时按顺时针顺序排列*/ typedef struct Point{ double x, y; Point(){} }

硅谷 8637

平面几何相关算法整理

平面几何相关问题

Akiyama_sou的博客 2019

matlab计算任意多边形面积

已知多边形的各个点坐标,且点按瞬时间或逆时间顺序排列,求多边形面积。首先根据计算多边形面积的计算公式,用向量法计算比较方便。两向量叉乘为这俩向量组成的三角形面积的两倍,所以多边形面积公式为: S = 0.5 * (OA 叉乘 OB +OB 叉乘 OC +…O** 叉乘 OA) matlab代码实现:第一步:取得坐标点数据,读取excel 第二步:计算向量叉乘 第三步:求和即面积主函数:c

legalhighhigh的博客 2万+

多边形或轮廓等距离外扩或收缩

给定一个简单多边形,多边形按照顺时针或者逆时针的数许排列 内部等距离缩小或者外部放大的多边形,实际上是由距离一系列平行已知多边形的边,并且距离为L的线段所构成的。

惊鸿一博 6311

根据凸多边形顶点坐标来计算面积算法与实现

根据凸多边形顶点坐标来计算面积算法与实现

Han的小站 1万+

[unity]三角形顶点顺序

每个面的顶点顺序决定了该面的法线方向【左手坐标系下,叉乘的方向用左手判断】,Unity将其与当前摄影机透视的正向进行比较。较近的三角形顶点顺序为(1,2,3),从当前的角度来看,这是顺时针方向,因此三角形是面向摄像机的,保留。另一个三角形的顶点顺序是(4,5,6),从当前角度来看,这是逆时针方向,所以这个三角形是背向摄像机的,剔除。如果网格具有三角形拓扑,则前三个元素(0,1,2)标识一个三角形,随后的三个元件(1,2,3)标识与第一个共享顶点的另一个三角形。随着视角的变化,顶点的排列顺序也不同。

averagePerson的博客 2451

基于MATLAB的多边形顶点排序方法

在图像处理过程中,有时要对多边形的顶点按照顺时针或者逆时针顺序进行排序。下面给大家简单说明一下解决思路及方法。 1.建立新的坐标系,使得新的坐标系的原点在多边形的内部。这样是为了让各个顶点坐标可以按照向量的方法去处理,为下一步向量叉乘做铺垫。如下图所示。 ...

a_peng1的博客 4539

ArcObject java代码Polygon逆时针转顺时针

ArcObject java代码Polygon逆时针转顺时针

挣钱花388的博客 333

python 点顺时针排序

python 多边形顺时针排序

jacke121的专栏 3061

OpenGL基础: 顶点环绕顺序 (Winding Order)

顶点环绕顺序是 3D 图形渲染中的一个基础且核心的概念。它提供了一种标准化的方法来定义多边形的“朝向”,即区分其正面和背面。这个区分对于实现高效的面剔除、正确的光照计算以及其他渲染效果至关重要。在 OpenGL 中,默认将逆时针环绕的顶点定义为正面,这是开发者在准备顶点数据和设置渲染状态时需要牢记的关键点。如果环绕顺序不正确,可能会导致物体看起来有破洞、透明,或者光照效果错误。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 1308

基于C#的简单多边形走向与顶点凸凹性判断实现

简单多边形是由有限个顶点序列 $ P = {v_0, v_1, …, v_{n-1}} $ 构成的闭合折线,其边仅在端点处相连,且任意两条非相邻边不相交。数学上要求满足拓扑嵌入平面的条件:即不存在自环或交叉边。在计算几何中,简单多边形的顶点序列不仅描述了其空间形状,还隐含了一个关键属性——走向(Orientation)。这一属性决定了顶点是按顺时针还是逆时针顺序排列,直接影响后续算法对区域内部、外部的判断以及图形填充、布尔运算和三角剖分等操作的正确性。

weixin_42604188的博客 553

凸多边形、凹多边形、凸包算法

凸多边形: (Convex Polygon)可以有以下三种定义: 1、没有任何一个内角是优角(Reflexive Angle)的多边形。 2、如果把一个多边形的所有边中,有一条边向两方无限延长成为一直线时,其他 3、凸多边形是一个内部为凸集的简单多边形。简单多边形的下列性质与其凸性等 (1)所有内角小于等于180度。 (2)任意两个顶点间的线段位于多边形的内部或 (3)多边形内任意两个点,其连线全部在多边形内部或边上。 所有的正多边形都是凸多边形。 所有的三角形都是凸多边形。 凸多边形的内角均小于或等于1

weixin_43042467的博客 1万+

多边形点集排序--针对凸多边形,按逆时针方向进行排序

在平面直角坐标系中,给定一个点序列,判断这些点是否能够构成凸多边形,并且按照顺时针方向输出这些点。

在虚拟机上搭建FTP服务器

chroot_list_file=/etc/vsftpd/chroot_list # 对chroot_list下用户限制。[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #打开配置文件。# 指定用户的shell: -s /usr/bin/nologin。# 在配置文件中找到以下几行代码, 去掉注释(去掉 "#"号)# 指定用户主目录:/data/ftp/ftpuser -M。(2)修改配置文件,路径/etc/vsftpd/ 下的文件。

weixin_70753380的博客 3211

【无标题】MATLAB代码实现凹多边形逆时针排列

输入参数:vertices 是一个 N×2 的矩阵,其中每一行代表多边形的一个顶点坐标。调整顺序:若当前为顺时针方向(面积为负),则反转顶点顺序以获得逆时针排列。matlab点序号参考:matlab绘制X,Y二维散点图并标出序号。计算方向:利用鞋带公式计算带符号面积,判断顶点排列方向。

weixin_44984436的博客 539

CorelDRAW 2019安装指南:从下载到激活的完整步骤

本文提供了一份详细的CorelDRAW 2019安装指南,涵盖从下载安装包、检查系统环境到完成激活的完整步骤。文章重点解析了安装过程中的关键选项设置,并分享了首次启动后的优化配置与常见问题解决方案,旨在帮助用户高效、顺利地完成这款经典矢量设计软件的安装与配置。

weixin_29213827的博客 838

Java:对多边形的顶点按逆时针方向进行排序

设多边形各顶点的坐标为:(x1, y1), (x2, y2), (x3, y3)……(xn, yn),其排列顺序是杂乱的,依次连接这n个点,无法形成确定的多边形。 对多边形的顶点按逆时针方向进行排序,可以得到凸多边形: 计算多边形的重心O,以重心O作为逆时针旋转的中心点; 判断顶点A与顶点B之间的方向:计算OA与OB的向量叉积,如果OA与OB叉积大于0,则OB在OA的逆时针方向。 多边形的重心的计算: + 向量叉积的计算: 设P=(x1, y1),Q=(x2, y2),则P×Q = x1y2 - x2

瑞瑞ruirui的博客 2150

用Python玩转Milvus:从安装SDK到完成第一个向量搜索Demo

本文为Python开发者提供了一份详细的Milvus向量数据库实战指南。文章重点讲解了如何规避版本兼容性陷阱,正确部署Milvus服务端并安装匹配的Python SDK。通过一个电影推荐系统的完整案例,演示了从数据建模、集合创建、向量插入、索引构建到执行混合搜索的全流程,帮助开发者快速上手并完成第一个向量搜索Demo。

weixin_29239279的博客 192

跟着团子学SAP CO:结果分析各评估方法计算逻辑概览 RA Valuation Method Overview KKA1/KKA2/KKA3

在大部分企业财务月结时,结果分析是必不可少的一环,通过结果分析系统可按照设定的评估方法及相关配置自动计算在制品(WIP)、主营业务成本、主营业务收入等等。 在结果分析中最重要的是根据业务需求选择合适的评估方法,目前SAP共提供15种评估方法,今天针对每一种方法计算逻辑及常用的业务场景进行介绍: (1)基于收入的评估方式(带利润实现) Revenue-Based Method with Profit Realization 第一种方式的计算是基于实际收入与计划收入的占比推算应结转的主营业务成本,如果当期累计的

Lucas1211的博客 1万+

旋转框检测避坑指南:IOU计算常见错误与多边形顶点处理技巧

本文深入解析旋转框检测中IOU计算的常见陷阱与解决方案。针对多边形顶点顺序混乱、角度定义差异及数值稳定性等关键问题,提供了基于OpenCV的鲁棒计算方法和实用调试技巧,帮助开发者避免在模型训练与评估阶段出现错误,确保旋转框检测的精度与可靠性。

weixin_29271263的博客 589

OpenClaw实战系列10(完结篇):企业级应用实战案例——从0到1搭建智能客服系统

本文以一家跨境电商公司为例,从需求分析、系统设计、分步搭建到上线运营,完整呈现智能客服系统的落地全过程。所有配置命令和截图均来自实测环境,你可以直接复制使用。

PeterPan的博客 1306
上一篇: [C++]尽量用非成员函数,非友元函数替换成员函数
下一篇: Scissor Test
农夫三拳
博客等级 码龄18年 31粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值