四边形网格生成算法:Q-Morph(三)底边生成四边形

欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

参考论文:Q-Morph an indirect approach to advancing front quad meshing
ε − π − θ ∈ ⋅ \varepsilon - \pi - \theta \in \cdot επθ

底边生成四边形

算法过程中每次从Front队列中根据状态取出一条优先级最高的边,处理并生成一个四边形。

每条边都有一个level, 初始front里的边为level 0, 之后为level 1, 依此类推。这样可保证下一行四边形生成要在当前行生成之后。

为了生成更高质量的网格,短的边需要优先处理,所以在选择边时,不仅要考虑状态,还需要结合边长来排序。

侧边生成

状态为 0-0,0-1,1-0的底边会生成1条或2条侧边。

生成侧边的方式有三种:1)沿用当前已经有三角边,2)当前三角边进行对角线翻转后使用,3)生成一条新的边来分割三角形。

情况一:
在这里插入图片描述
Nk为需要生成侧边的一个顶点。

EF1, EF2为当前Front中的边,Vk为其角平分线,作为侧边的理想位置。

计算Vk与Nk邻接的所有边Ei角度θi, 如果最小的θi<ε(=π/6), 则取Ei为侧边。

情况二:
在这里插入图片描述
如上图a)所示,Vm为E0翻转后的向量,如果Vm与Vk夹角<ε, 则Ek作为侧边。

情况三:

如上图b)所示,如果Vm与Vk夹角>ε 或 E0翻转后长度太长时(与EF1, EF2相比), 需要对E0从Vk与之交点处分裂得到Ek作为侧边。

侧边生成综合公式如下:
在这里插入图片描述

顶边生成

根据一条底边生成两个侧边后,还剩下一个顶边就可以组成四边形了。

顶边自然是由侧边的两个上顶点连接而成,但是直接连接会与其他边相交,所以需要对这些相交的边进行翻转,直到没有相交。

在这里插入图片描述
上图为顶边ND-NC生成的过程,a)为侧边刚生成的状态,找到与虚线相交的所有边,b)翻转1,2,c)翻转3,d)翻转4,生成连接ND-NC的边。

Agl1 算法可以用来生成顶边如下:

在这里插入图片描述

查找相交边的过程:
在这里插入图片描述
以Nc为起点先找到与NCND相交且顶点为Nc的一个三角形的对边Ei。

根据三角形一边与直线相交,必有另一边与直线相交的原理。

去找到下一个相交的边,直到到达ND。

Agl2 算法可以用于查找相交边如下:
在这里插入图片描述
上述算法中带*的行是对原文的修正,经过验算原文中的符号判断有误。

上述算法有一种特殊情况,Vs刚好与三角形相交于顶点,一种比较简单的做法是把该顶点往Vs垂直方向移动一个很小的距离。

三维情况处理

Agl2 是在平面区域上计算的。如果要应用于三维曲面场景,需要做一些改动。

第5行和第16行(找星号的行)需要在曲面法平面上进行判断。

P c 是 N c 处平均法向,可以通过 T ( N c ) 面法向得加权平均得到 P_c是N_c处平均法向,可以通过T(N_c)面法向得加权平均得到 PcNc处平均法向,可以通过T(Nc)面法向得加权平均得到

第5行判断条件改为
( ( P c × V s ) × P c ) ⋅ ( ( P c × V k ) × P c ) < 0 a n d ( ( P c × V s ) × P c ) ⋅ ( ( P c × V k + 1 ) × P c ) > 0 ((P_c \times V_s )\times P_c)\cdot((P_c \times V_k)\times P_c)\lt 0 \ and \ ((P_c \times V_s)\times P_c)\cdot((P_c \times V_{k+1})\times P_c)\gt0 ((Pc×Vs)×Pc)((Pc×Vk)×Pc)<0 and ((Pc×Vs)×Pc)((Pc×Vk+1)×Pc)>0

P i 是 E i 处法平面的法向,可以通过 T i ( E i ) 和 T i + 1 ( E i ) 面法向加权平均法向得到 P_i是E_i处法平面的法向,可以通过T_i(E_i)和T_{i+1}(E_i)面法向加权平均法向得到 PiEi处法平面的法向,可以通过Ti(Ei)Ti+1(Ei)面法向加权平均法向得到

第16行判断条件改为 ( ( P i × V s ) × P i ) ⋅ ( ( P i × V i ) × P i ) > 0 ((P_i \times V_s ) \times P_i)\cdot ((P_i \times V_i)\times P_i) \gt 0 ((Pi×Vs)×Pi)((Pi×Vi)×Pi)>0

清除内部边

生成四边形后,内部还有很多三角面片和边,需要进行删除。

可以从四边形4个点开始广度优先遍历所有边,进行删除。


本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。创作不易,帮忙点击公众号的链接,帮忙转发,感激不尽。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/446225.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过redis实现高性能计费处理逻辑

计费服务一般都是跟资金相关&#xff0c;所以它在系统中是非常核心的模块&#xff0c;要保证服务的高可用、事务一致性、高性能。服务高可用需要集群部署&#xff0c;要保证事务一致性可以通过数据库来实现&#xff0c;但是只通过数据库却很难实现高性能的系统。 这篇文章通过使…

解锁5 大无水印热门短视频素材库

想让你的抖音视频更出彩吗&#xff1f;想知道那些爆款视频的素材源头吗&#xff1f;快来了解以下 5 个超棒的视频素材下载平台。 蛙学网 国内的视频素材佼佼者&#xff0c;有大量 4K 高清且无水印的素材&#xff0c;自然风光、情感生活等类别任你选&#xff0c;不少还免费&…

关于wordpress建站遇到的问题

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

Spring WebFlux 核心原理(2-1)

1、Spring 响应式编程 1.1、早期响应式解决方案 响应式编程是构建响应式系统的主要候选方案。Spring 4.x 引入了 ListenableFuture 类&#xff0c;它扩展了 Java Future&#xff0c;并且可以基于 HTTP 请求实现异步执行操作。但是只有少数 Spring 4.x 组件支持新的 Java 8 Com…

瑞芯微RK3566/RK3568 Android11使用OTA升级固件方法,深圳触觉智能鸿蒙开发板演示,备战第九届华为ICT大赛

本文介绍瑞芯微RK3566/RK3568在Android11系统OTA升级固件方法&#xff0c;使用触觉智能的Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566&#xff0c;Laval官方社区主荐&#xff01; 1、OTA包生成 在源码根目录上执行以下命令编译OTA包 # make installclean # …

【华为HCIP实战课程七】OSPF邻居关系排错MTU问题,网络工程师

一、MTU MUT默认1500,最大传输单元,一致性检测 [R3-GigabitEthernet0/0/1]mtu 1503//更改R3的MTU为1503 查看R3和SW1之间的OSPF邻居关系正常: 默认华为设备没有开启MTU一致性检测! [R3-GigabitEthernet0/0/1]ospf mtu-enable //手动开启MTU检测 [SW1-Vlanif30]ospf mtu…

【详细教程】如何使用YOLOv11进行图像与视频的目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

《数字信号处理》学习08-围线积分法(留数法)计算z 逆变换

目录 一&#xff0c;z逆变换相关概念 二&#xff0c;留数定理相关概念 三&#xff0c;习题 一&#xff0c;z逆变换相关概念 接下来开始学习z变换的反变换-z逆变换&#xff08;z反变化&#xff09;。 由象函数 求它的原序列 的过程就称为 逆变换。即 。 求z逆变换…

linux线程 | 线程的控制(二)

前言&#xff1a; 本节内容是线程的控制部分的第二个小节。 主要是列出我们的线程控制部分的几个细节性问题以及我们的线程分离。这些都是需要大量的代码去进行实验的。所以&#xff0c; 准备好接受新知识的友友们请耐心观看。 现在开始我们的学习吧。 ps:本节内容适合了解线程…

如何批量从sql语句中提取表名

简介 使用的卢易表 的提取表名功能&#xff0c;可以从sql语句中批量提取表名。采用纯文本sql语法分析&#xff0c;无需连接数据库&#xff0c;支持从含非sql语句的文件文件中提取&#xff0c;支持各类数据库sql语法。 特点 快&#xff1a;从成百个文件中提取上千个表名只需1…

JAVA开发中SpringMVC框架的使用及常见的404问题原因以及SpringMVC框架基于注解的开发实例

一、JAVA开发中SpringMVC框架的使用及常见的404问题原因 使用SpringMVC建立一个web项目&#xff0c;在IDEA中file->new->project建立一个空项目project。不用选择create from archetype从模板创建。然后在项目的pom.xml中添加公共的依赖包括org.springframework&#xff…

400行程序写一个实时操作系统RTOS(开篇)

笔者之前突发奇想&#xff0c;准备写一个极其微小的实时操作系统内核&#xff0c;在经过数天的努力后&#xff0c;这个RTOS诞生了。令读者比较意外的是&#xff0c;它的程序只有400行左右。但就是这短短的400行&#xff0c;完成了动态内存管理、多线程、优先级、临界区、低功耗…

【原创】Android Studio 中安装大模型辅助编码插件:通义灵码

在 Android Studio 中内置了 Ginimi 预览版&#xff0c;但需要“加速器”才可使用。 在国内有平替的软件同样可以使用&#xff0c;比如 阿里的通义灵码&#xff0c;智谱的CodeGeeX等&#xff0c;从功能和使用上来说都是大同小异。 这里我们以通义灵码为例来讲解其安装和使用 通…

最新Prompt预设词指令教程大全ChatGPT、AI智能体(300+预设词应用)

使用指南 直接复制在AI工具助手中使用&#xff08;提问前&#xff09; 可以前往已经添加好Prompt预设的AI系统测试使用&#xff08;可自定义添加使用&#xff09; SparkAi系统现已支持自定义添加官方GPTs&#xff08;对专业领域更加专业&#xff0c;支持多模态文档&#xff0…

github下载文件的两种方式(非git形式)

1.以下面的图为例 &#xff0c;可以直接点击右上方的绿色Code按键&#xff0c;在弹出的列表中选择Download Zip选项&#xff0c;即可下载。 2.如果下载的是单独的某一个文件&#xff0c;则可以按照下图的格式点击下图所示的那个下载的图标即可。

IP地址如何支持远程办公?

由于当今社会经济的飞速发展&#xff0c;各个方向的业务都不免接触到跨省、跨市以及跨国办公的需要&#xff0c;随之而来的远程操作的不方便&#xff0c;加载缓慢&#xff0c;传输文件时间过长等困难&#xff0c;如何在万里之外实现远程办公呢&#xff1f;我们以以下几点进行阐…

C3D网络介绍及代码撰写详解(总结3)

可以从本人以前的文章中可以看出作者以前从事的是嵌入式控制方面相关的工作&#xff0c;是一个机器视觉小白&#xff0c;之所以开始入门机器视觉的学习主要是一个idea&#xff0c;想把机器视觉与控制相融合未来做一点小东西。废话不多说开始正题。&#xff08;如有侵权立即删稿…

初级前端面试(2)

1.讲一下闭包相关知识&#xff0c;和普通函数有什么区别 闭包是什么&#xff1a;JS中内层函数可以访问外层函数的变量&#xff0c;外层函数无法操作内存函数的变量的特性。我们把这个特性称作闭包。 闭包的好处&#xff1a; 隔离作用域&#xff0c;保护私有变量&#xff1b;…

解决海外社媒风控问题的工具——云手机

随着中国企业逐步进入海外市场&#xff0c;海外社交媒体的风控问题严重影响了企业的推广效果与账号运营。这种背景下&#xff0c;云手机作为一种新型技术解决方案&#xff0c;正日益成为企业应对海外社媒风控的重要工具。 由于海外社媒的严格监控&#xff0c;企业经常面临账号流…