稳健的多边形法线计算

2023-11-27

是否有一个好的鲁棒算法来计算凸多边形的法向量(当然是3D)?对于三角形,这很容易:取三角形的两条边并计算叉积:

vec3 u = point[0] - point[1], v = point[0] - point[2];
vec3 n = normalize(cross(u, v));

但这种方法并不能很好地扩展到多边形。多边形的某些边可能几乎或“完全”共线(这种情况经常发生在发生 T 形连接去除的网格中),因此有必要选择一对边,给出“强”法线(两条边都是“足够长”并且它们保持“几乎垂直”的角度)。

不过,这种方法仍然不适用于所有多边形。想象一个圆盘形状的多边形。如果它被非常精细地细分,则无论圆盘的半径如何,所有边缘都将非常短并且所有连续边缘将几乎共线。同时,正常情况也有明确的定义。

一种解决方案可能是找到最大的内切三角形并计算其法线。然而,找到它的复杂性为O(n^2),这似乎令人望而却步。

更好的解决方案可能是使用 SVD 或特征值分解来计算法线,给定所有多边形点,而不仅仅是三个或四个。

有一个标准的算法吗?有人有好的方法吗?


如果您对三角形的公式进行因式分解,您将得到以下结果:

n ~ (p1 - p0) x (p2 - p0)
  = p0 x p1 + p1 x p2 + p2 x p0

您可以将此公式推广到任意多边形:

n ~ p0 x p1 + p1 x p2 + ... + pn x p0

因此对连续边的叉积求和。这是一种稳健的算法,适用于非平面多边形。

如果您可以确定多边形是平面的,我会执行以下操作(以节省计算时间):

Repeat k times
    Pick 3 random polygon vertices
    Calculate the normal of the according triangle
Choose the longest normal as the polygon's normal.

您可以丢弃任何具有length <= epsilon.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

稳健的多边形法线计算 的相关文章

  • 所有可能的骑士在普罗梅拉的棋盘上移动

    是否有可能用马从初始位置 I J 绕过大小为 N N 的棋盘 并且只访问每个方格一次 define A True A I J false active proctype method bit I 4 bit J 3 bit K 1 bit
  • 用于基本要素匹配的最坏情况 NlogN 算法

    查找两个相同大小数组的元素之间的唯一映射 https stackoverflow com questions 4411940 find the unique mapping between elements of two same size
  • 快速排序应用程序中这些交换代码行的目的是什么?

    我试图理解快速排序的实现或应用程序以找到第 k 个最小元素 这是我试图理解的代码 public int quicksort int a int start int end int k if start lt end int pivot pa
  • 计算具有 3 个循环的算法的复杂度

    我尝试解决以下练习 以下代码片段最坏情况运行时间的增长顺序是什么 作为 N 的函数 int sum 0 for int i 1 i lt N i for int j 1 j lt i i j for int k 1 k lt j j k s
  • 更合适地说插入未排序动态数组的摊销 O(1) 与 O(n) ?

    这属于 stackoverflow com help on topic 中的 软件算法 在本例中 是一种将项目添加到动态未排序数组的软件算法 This is chart we made in class about the runtimes
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • 处理流星中的长服务器端计算

    我正在使用 jimp https www npmjs com package jimp https www npmjs com package jimp 在meteor JS中生成图像服务器端 换句话说 我正在使用递归算法 计算 图像的像素
  • 有效地合并两个数组 - 一个已排序,另一个未排序

    我正在解决一个问题 该问题有一个由 n 个元素组成的排序数组 后跟一个未排序的长度数组 O logn O 平方 n 如何最有效地对整个列表进行排序 在上述两种情况下我应该使用哪种排序 由于将单个元素插入数组并保持其排序是O n 你不可能变得
  • 序列和与 GCD

    大约一个月前 我在编程挑战中遇到了这个问题 但社论尚未发布 所以我在这里问 有一个大小为 N 的数组 A 求 A 的 K 个长度子序列的总和 GCD Example 如果 A 1 2 3 且 K 2 1 2 3 总和 1 GCD 3 1 3
  • 计算字符串的所有子串中子序列的出现次数

    我想编写一个算法来计算字符串的所有子字符串中字符子序列 不相交 出现的总数 下面是一个例子 字符串 jabcohnnyjohnny 后续 约翰尼 包含子序列的子字符串 jabcohnny jabcohnnyj jabcohnnyjo jab
  • 简单的排名算法

    我需要创建一个民意调查 按照项目的好坏顺序创建一个排名列表 我打算向每个用户展示两个项目 让他们选择一个他们认为更好的项目 然后多次重复这个过程 它有点类似于您在社交网络电影 我应该如何根据收到的答案对项目进行排名 看着那 这ELO国际象棋
  • Python Pandas:沿一列比较两个数据帧,并返回另一个数据帧中两个数据帧的行内容

    我正在处理两个 csv 文件并作为数据框 df1 和 df2 导入 df1 有 50000 行 df2 有 150000 行 我想将 df2 的 时间 与 df1 求时间差并返回所有列的值 对应相似的行 保存在df3中 时间同步 例如 35
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • 当给定块大小时反转单链表

    有一个单连接链表 并给出了块大小 例如 如果我的链表是1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 gt 8 NULL我的块大小是4然后反转第一个4元素 然后是第二个 4 个元素 问题的输出应该是4 gt 3 gt 2 g
  • 球体表面上(经度、纬度)点的凸包

    标准凸包算法不适用于 经度 纬度 点 因为标准算法假设您需要一组笛卡尔点的包 纬度 经度点是not笛卡尔坐标系 因为经度在反子午线处 环绕 180 度 即 东经 179 度以东 2 度为 179 因此 如果您的点集恰好横跨反子午线 您将错误
  • Python 旅行商贪婪算法 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 因此 我为旅行推销员问题创建了一种排序 并按 x 坐标和 y 坐标进行排序 我正在尝试实施贪婪搜索 但无法做到 此外 每
  • 如何在C中实现带连分数的自然对数?

    这里我有一个小问题 根据这个公式创建一些东西 这就是我所拥有的 但它不起作用 弗兰基 我真的不明白它应该如何工作 我尝试用一 些错误的指令对其进行编码 N 是迭代次数和分数部分 我认为它会以某种方式导致递归 但不知道如何 谢谢你的帮助 do
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和
  • 在一个区域中拟合二维多边形的算法?

    这有标准吗 算法名称 说 我有 10 个不同大小的多边形 我有一个特定大小的区域 我想知道如何填充该区域中的最多多边形 以及它们是如何拟合的 笔记 多边形可以根据限制集进行旋转 一个可能的名称是包装问题 http en wikipedia

随机推荐

  • 点集之间的成对位移向量

    我有一个数组N点在d方面 N d 我想为每对创建一个包含所有位移向量的新数组 N choose 2 d 如果我只想要这些向量的大小 我可以使用pdist from scipy spatial distance 如果我能做到的话那就太好了 p
  • Ansible:在任务运行时累积跨多个主机的输出

    我有以下剧本 hosts all gather facts False tasks name Check status of applications shell somecommand register result changed wh
  • WCF AfterReceiveRequest 获取标头

    我刚刚开始拦截对 WCF 服务的请求 我正在使用如下所示的 java 代码调用 Web 服务 简短版本 connection HttpURLConnection url openConnection connection setReques
  • python MySQLDB查询超时

    我正在尝试对 python MySQLDB 中的查询强制执行时间限制 我遇到的情况是 我无法控制查询 但需要确保它们不会运行超过设定的时间限制 我尝试使用 signal SIGALRM 来中断执行调用 但这似乎不起作用 信号被发送 但直到执
  • 使用 naudio 播放 .wav 文件,播放 1 秒后停止

    我正在 C 中使用 naudio lib 并且想要播放一个简单的文件 问题是 播放1秒后停止 我无法弄清楚它这样做的原因 using System using System Collections Generic using System
  • 如何将cognito用户信息传递给lambda?

    我正在开发基于API网关和Lambda的应用程序 我将 POST subscribe 配置为 AWS IAM 所以现在它无法直接访问 但我可以通过 Cognito 身份验证访问 API 现在的问题是我的 Lambda 不知道谁是 API 调
  • 在Python3中正确地将字节转换为字符串并返回?

    给定一个随机字节 即不仅仅是数字 字符 我需要将其转换为字符串进而回到初始字节而不丢失信息 这似乎是一项基本任务 但我遇到了以下问题 假设 rnd bytes b w x12 x96 xb8 len rnd bytes prints 4 现
  • 使用 CAShapeLayer 和 UIBezierPath 剪辑遮罩 uiview

    我在使用 CAShapeLayer UIBezierPath 剪切视图时遇到问题 我想剪切内容 但最终得到了 UIBezierPath 的笔画 框架 这是我的代码 UIBezierPath path2Path UIBezierPath be
  • 将字符串解析为日期时间,同时考虑 pandas 中的 AM/PM

    我正在尝试解析这种格式的字符串 2018 07 07 04 AM 使用 strftime 格式转换为 pandas 日期时间 但是 在我看来 该格式无法识别之间的区别AM and PM 这是我尝试过的 pd to datetime 2018
  • 如何检查某个目录是否位于 Bash 的路径上? [复制]

    这个问题在这里已经有答案了 可能的重复 Bash 检测用户的路径中是否有特定目录 给定一个目录 如何确定它是否在 unix PATH 上 正在寻找 shell 脚本 谢谢 凯文 你可以写 if PATH directory you want
  • 如何更改 ggplot 中的标签(图例)?

    我的代码如下 我想更改ggplot的标签 但R总是提醒我 Error in unit tic pos c mm x and units must have length gt 0 我应该怎么办 ggplot mat aes x sales
  • 如何唤醒休眠的 pthread?

    我正在用 C 编写一个程序 我注意到它获得了许多线程 其目的是每隔一段时间做一些事情 其中 有 3 或 4 个 我决定通过编写一个调度程序服务来重构 使用这些线程的其他地方可以订阅该服务 这应该将我随时运行的额外事件线程的数量减少到一个 我
  • 将 TOP 与 GROUP BY 一起使用

    带桌子table1像下面这样 flight orig dest passenger bags 1111 sfo chi david 3 1112 sfo dal david 7 1112 sfo dal kim 10 1113 lax sa
  • std::throw_with_nested 需要 C++11 中的多态类型吗?

    为什么不能编译 尝试使用 Clang 3 4 2 和 GCC 版本 4 7 4 4 8 3 和 4 9 1 include
  • 从外部 div 滚动 div

    查看下面的小型 html 结构示例以了解上下文 看看这个fiddle问题的示例 对小提琴用户的简短说明 向左滚动 垂直滚动条不可见 向右滚动 垂直可见 我希望垂直滚动条始终可见 要求 标题必须保持固定 滚动时可见 长解释 我有一个带有固定标
  • C++:模板和单例模式

    碰巧我需要臭名昭著的单例模式 更好的是 它发生了 所以我需要臭名昭著的 C 模板与该模式的结合 那么 让我烦恼的是 template
  • 事件调度程序应每月执行一次

    我的机器上安装了 Win XP 操作系统和 XAMPP 我需要在每月第一天的凌晨 12 00 00 执行我的事件 调度程序 意思是每个月的1号 例如 1 月 1 日 2 月 1 日 3 月 1 日 和 我还需要在同一事件中调用存储过程 我想
  • 如何在生产中管理 ASP.NET SQL 成员角色/用户?

    如何在生产计算机上设置 asp net sql 成员资格角色 成员资格提供程序 我正在尝试设置 BlogEngine NET 所有文档都说要使用 Visual Studio 中的 ASP NET 网站管理工具 但这在生产计算机上不可用 我是
  • ExtJS按钮样式工具栏[重复]

    这个问题在这里已经有答案了 我想知道是否可以将按钮放入面板的工具栏中 但让它保留按钮的外观 就好像它只是在普通面板中一样 例如 我希望按钮看起来像这样 然而 它看起来像这样 非常感谢 EDIT 创建工具栏的代码 xtype toolbar
  • 稳健的多边形法线计算

    是否有一个好的鲁棒算法来计算凸多边形的法向量 当然是3D 对于三角形 这很容易 取三角形的两条边并计算叉积 vec3 u point 0 point 1 v point 0 point 2 vec3 n normalize cross u