当前位置: 首页 > news >正文

图形几何之美系列:法向量计算之轮廓有向面积辅助法

 垂直于平面的直线所表示的向量为该平面的法向量,可以通过法向量识别平面正反面。法向量是轮廓或面的重要特征,求轮廓法向是一种基础的几何工具算法,在图形几何、图像处理等领域具有广泛的应用。

  1. 图形几何之美系列:三维实体结构表达

  2. 图形几何之美系列:仿射变换矩阵

  3. 图形几何之美系列:仿射变换矩阵(二)

  4. 图形几何之美系列:仿射变换矩阵之先转后偏

  5. 图形几何之美系列:仿射变换矩阵之Y-Up和Z-Up

  6. Unity动画:Hello World!

  7. 图形几何之美系列:面积计算之梯形投影求和

  8. 重磅发布:领略图形几何之美,向工业软件进击的小哈 #二维凸包

    法向量是轮廓或面的基础几何特征,在实际工程中存在广泛的应用。在‌计算机视觉领域,法向量可以用于检测图像中的边缘和角点。在‌三维建模和渲染中,法向量可以帮助计算光线与曲面的相交,从而实现阴影效果和渲染,使图像更加真实。在‌立体几何中,法向量可用于求解点到平面的距离、异面直线间的距离、直线与平面所成的角、二面角的大小等问题。

1.前言

    有多种方法可计算轮廓的法向量,如根据轮廓类型进行法向量的计算、轮廓有向面积辅助法、Newell向量法等。

   如上文多边形轮廓面积计算中的内容所述,轮廓的法向量和面积密切相关,我们常说的法向量为单位法向量,而模长等于面积的法向量是多边形轮廓多维度的几何和物理属性,更能表达轮廓的几何特征。

图片
图:轮廓法向量

 

    需要注意的是由于浮点数存储和运算的精度损失,可能造成求轮廓法向的精度损失,如角点由于精度损失并非精确的在一个平面上(而是在容差范围内属于一个平面)、角点距离很近导致可能进一步影响法向计算的精度等。

2.根据轮廓类型计算法向量

2.1.三角形法向量

    可以通过相邻边方向叉乘得到三角形法向量,边的选择将决定得到的法向量是正向还是反向,当我们选择边与其后续邻接边进行叉乘时,得到的就是三角形正向的法向量。

图片
图:三角形法向量的计算

2.2.凸多边形法向量

    三角形是凸多边形的类型之一,凸多边形的法向量计算同样可以用选择边与其后续邻接边进行叉乘得到。

    需要注意的是由于浮点型存储和计算精度损失等原因,凸多边形上的点可能存在略微偏离所在平面,这时候参与运算的边如果恰好有非常短的边时,由其构造的相量与所在平面夹角将不为0,甚至偏离较大,这将导致求得的法向量存在较大的误差。

图片
图:凸多边形法向量计算存在精度损失的情况

 

    一种较好的办法是考虑所有边,即所有边参与运算,这将较大程度的对局部精度损失引起的误差进行“纠偏”。

提示
后续章节将涉及如何使法向量计算保持较高的精度。

3.任意多边形法向量

3.1.有向面积辅助法

    在实际工程场景中,往往需要考虑任意多边形的情况,如实体参与布尔运算后存在不规则形状的面,需要计算面的法向量以正确的进行效果显示。

    当多边形含有凹角时,运用上述“选择边与其后续邻接边进行叉乘”得到的法向量会是反向的,这时候我们不知道哪个是凹角,因为法向量还没有被正确的计算出来。这就需要一种通用的法向量计算方法。

补充
任意多边形法向量计算方案不止一种,如前文所述,本文将针对“轮廓有向面积辅助法”进行讲述,有关其他方法可联系作者或继续关注公众号文章。

    从轮廓“正面”看向轮廓,轮廓是逆时针的,从轮廓“反面”看向轮廓,轮廓是顺时针的,轮廓的顺逆时针只是相对的,取决于怎么看向轮廓。

当轮廓法向朝向我们时,轮廓是逆时针的,这时轮廓有向面积为正,也就是从正面看,轮廓有向面积是正的。你可能大概有思路了,我们继续分析,

补充
基于轮廓正向法向量时,轮廓有向面积为正;基于轮廓反向法向量时,其面积为负。

图片
图:基于法向量和其反向计算时,轮廓面积符号分别为正和负

    在不考虑正负的情况下,我们比较容易求得轮廓的法向量(可以运用“选择边与其后续邻接边进行叉乘”),然后基于此法向量进行轮廓面积计算,如果为正,则该法向量为正向法向量,如果面积为负,则该法向量为反向法向量,对其取反即得正向法向量。

提示
轮廓面积计算有多种方法,可以通过微积分方法或衍生的梯形投影和等方法,或采用Newell方法,详细可参考作者相关文章。

3.2.精度的提高

    上文提到,由于浮点型存储和计算精度损失等原因,凸多边形上的点可能存在略微偏离所在平面,这时候参与运算的边如果恰好有非常短的边时,由其构造的相量与所在平面夹角将不为0,甚至偏离较大,这将导致求得的法向量存在较大的误差。

    一种提高精度的思路是考虑所有相邻边得到的法向因素,进行加权平均,权重值为相邻边的夹角angle因素(弧度表示法),夹角在[0,PI/2)时取原值,在[PI/2,PI]时取PI-angle,因为在相同的条件下上述取值越大计算的精度越高,其对法向的贡献度越大,即权重值越大。

图片

图:加权平均思想

提示
试想一下,当两条边无限接近于共线的情况,那么由它们计算得到的法向量无限接近于(0,0,0)。

    仍然需要考虑凹凸角情况,统一将凹角或凸角计算得到的法向进行取反即可,因为符号会通过计算面积得到。一种实践是判断当前计算的法向是否与已计算过的法向存在夹角大于接近于PI值的情况(如PI/6*5,即150°),如果存在即取反,这样所有的法向被统一在面的一个方向了。

4.总结

    对于特定规则的多边形,如三角形、凸多边形,计算法向量较为简单,可以运用“选择边与其后续邻接边进行叉乘”,但需要关注精度话题。

    多边形有向面积与其法向量密切相关,对于任意多边形的法向量计算可以采用Newell法进行计算,公式简洁清晰,计算量较小,同时可保持较高的精度。

    当然也可参考轮廓有向面积辅助法进行计算,同样可保持较高的精度,但其计算量相对Newell法较大。

  1. 图形几何之美系列:三维实体结构表达

  2. 图形几何之美系列:仿射变换矩阵

  3. 图形几何之美系列:仿射变换矩阵(二)

  4. 图形几何之美系列:仿射变换矩阵之先转后偏

  5. 图形几何之美系列:仿射变换矩阵之Y-Up和Z-Up

  6. Unity动画:Hello World!

  7. 图形几何之美系列:面积计算之梯形投影求和

  8. 重磅发布:领略图形几何之美,向工业软件进击的小哈 #二维凸包

  9. 图形几何之美系列:法向量计算之轮廓有向面积辅助法

欢迎关注,图形几何之美系列 将继续更新......

相关文章:

图形几何之美系列:法向量计算之轮廓有向面积辅助法

“ 垂直于平面的直线所表示的向量为该平面的法向量,可以通过法向量识别平面正反面。法向量是轮廓或面的重要特征,求轮廓法向是一种基础的几何工具算法,在图形几何、图像处理等领域具有广泛的应用。” 图形几何之美系列:三维实体结…...

CPU的性能指标总结(学习笔记)

CPU 性能指标 我们先来回顾下,描述 CPU 的性能指标都有哪些。 首先,最容易想到的应该是 CPU 使用率,这也是实际环境中最常见的一个性能指标。 用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用…...

Cadence安装

记录一下安装过程,方便以后安装使用Cadence。 去吴川斌的博客下载安装包,吴川斌博客: https://www.mr-wu.cn/cadence-orcad-allegro-resource-downloads/ 下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装…...

【网络】子网掩码

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是子网掩码,并且能熟练掌握子网掩码的相关计算。 > 毒鸡汤:有些事情,总是不明白,所以我不会…...

Android Osmdroid + 天地图 (二)

Osmdroid 天地图 (二) 前言正文一、定位监听二、改变地图中心三、添加Marker四、地图点击五、其他配置① 缩放控件② Marker更换图标③ 添加比例尺④ 添加指南针⑤ 添加经纬度网格线⑥ 启用旋转手势⑦ 添加小地图 六、源码 前言 上一篇中我们显示了地图…...

使用大语言模型创建 Graph 数据

Neo4j 是开源的 Graph 数据库,Graph 数据通过三元组进行表示,两个顶点一条边,从语意上可以理解为:主语、谓语和宾语。GraphDB 能够通过图来表达复杂的结构,非常适合存储知识型数据,本文将通过大语言实现图数…...

Java poi 模板导出Word 带图片

Java poi 模板导出Word 带图片 重点&#xff01;&#xff01;&#xff01; 官方文档&#xff1a;https://deepoove.com/poi-tl/#_maven 最终效果 模板 其实内容都在官方文档里写的非常明白了 我这里只是抛砖引玉。 Maven依赖 <poi.version>4.1.2</poi.version>…...

SpringCloud-使用FFmpeg对视频压缩处理

在现代的视频处理系统中&#xff0c;压缩视频以减小存储空间、加快传输速度是一项非常重要的任务。FFmpeg作为一个强大的开源工具&#xff0c;广泛应用于音视频的处理&#xff0c;包括视频的压缩和格式转换等。本文将通过Java代码示例&#xff0c;向您展示如何使用FFmpeg进行视…...

shell bash---类似数组类型

0 Preface/Foreword C/C,Python&#xff0c;Java等编程语言&#xff0c;都含有数组类型&#xff0c;那么shell脚本是不是也有类似的语法呢&#xff1f; 1 类似数组类型 1.1 &#xff08;&#xff09;类似数组类型 #! /bin/bashecho "Welcome to bash world!" anim…...

IIoT(Industrial Internet of Things,工业物联网)

IIoT&#xff08;Industrial Internet of Things&#xff0c;工业物联网&#xff09; 是指物联网技术在工业领域的应用。它将工业设备、传感器、控制系统、数据采集设备等通过互联网或局域网连接起来&#xff0c;实现设备的互联互通和智能化管理。IIoT的目标是提高工业生产效率…...

【C++】引用(reference)

引用是对一个变量或者对象取的别名 定义&#xff1a;真名的数据类型& 别名 真名; 既然是对一个变量或者对象取别名&#xff0c;那就得先有变量或对象&#xff0c;不能凭空取一个别名。也就是定义引用必须初始化。 对引用的操作和对引用对应的变量的操作是完全等价的引用…...

学习日记_20241115_聚类方法(层次聚类)

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…...

安卓开发怎么获取返回上一级activity事件

在Android开发中&#xff0c;要获取返回上一级Activity的事件&#xff0c;通常是通过点击设备上的返回按钮或者在代码中调用finish()方法时触发的。为了处理这个事件&#xff0c;你可以在当前Activity中重写onBackPressed()方法。 以下是一个简单的例子&#xff1a; Override…...

神经网络与Transformer详解

一、模型就是一个数学公式 模型可以描述为:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该用户对话属于某分类的概率。 图中 a, b 就是模型的参数,a决定斜率,b决定截距。 二、神经网络的公式结构 举例:MNIST包含了70,000张手写数字的图像,其中…...

C语言之MakeFile

Makefile 的引入是为解决多文件项目中手动编译繁琐易错、缺乏自动化构建、项目管理维护困难以及跨平台构建不便等问题&#xff0c;实现自动化、规范化的项目构建与管理 MakeFile 简单的来说,MakeFile就是编写编译命令的文件 文件编写格式 目标:依赖文件列表 <Tab>命令列表…...

vue项目PC端和移动端实现在线预览docx、excel、pdf文件

可以参考vue-office官方github&#xff1a;​​​​​​​GitHub - loonghe/vue-office: 支持word(.docx)、excel(.xlsx,.xls)、pdf等各类型office文件预览的vue组件集合&#xff0c;提供一站式office文件预览方案&#xff0c;支持vue2和3&#xff0c;也支持React等非Vue框架。…...

FlinkSql读取kafka数据流的方法(scala)

我的scala版本为2.12 <scala.binary.version>2.12</scala.binary.version> 我的Flink版本为1.13.6 <flink.version>1.13.6</flink.version> FlinkSql读取kafka数据流需要如下依赖&#xff1a; <dependency><groupId>org.apache.flink&…...

.NET 9 中 IFormFile 的详细使用讲解

在.NET应用程序中&#xff0c;处理文件上传是一个常见的需求。.NET 9 提供了 IFormFile 接口&#xff0c;它可以帮助我们轻松地处理来自客户端的文件上传。以下是 IFormFile 的详细使用讲解。 IFormFile 接口简介 IFormFile 是一个表示上传文件的接口&#xff0c;它提供了以下…...

使用阿里云远程访问 Synology Web Station 的指南

使用阿里云远程访问 Synology Web Station 的指南 本文将指导如何通过阿里云服务器配置 Nginx 和 FRP&#xff0c;远程访问部署在 Synology NAS 上的 Web Station 服务&#xff0c;同时支持 HTTPS 安全访问。 背景 通过 Synology NAS 的 Web Station&#xff0c;可以部署 Wor…...

LlamaFactory介绍

目录 一、什么是LlamaFactory 1. 安装 LlamaFactory 2. 下载 LLaMA 模型 3. 运行 LLaMA 模型 4. 微调 LLaMA 模型 5. 优化本地运行 6. 推理加速 7. 硬件要求 二、总结 一、什么是LlamaFactory LlamaFactory 是一个用于训练和运行 LLaMA(Meta 的开源大型语言模型)模型…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...