
几何算法
文章平均质量分 82
计算机图形学几何算法相关系列内容
哈市雪花
图形几何、数据处理、并行计算相关研究和研发,公众号:geometrylib,欢迎交流
展开
-
平面与平面相交算法杂谈
空间平面方程:空间两平面如果不平行,那么一定相交于一条空间直线,空间平面求交有多种方法,本文进行相关讨论。原创 2025-02-13 19:21:55 · 1190 阅读 · 0 评论 -
关于精度话题的杂谈
浮点值的存储、运算都可能会带来精度损失,了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大,以及思考怎么避免或减少精度损失。原创 2025-02-09 17:50:18 · 785 阅读 · 0 评论 -
点(线)集最小包围外轮廓效果赏析
作者基于递归迭代求解实现点集的最小外轮廓计算,在CGLib库中实现,已集成于CGViewer,可联系作者试用,欢迎提出宝贵意见。下图为CGViewer中绘制、计算和显示效果,原创 2025-02-06 21:35:30 · 510 阅读 · 0 评论 -
两种精度较高的三点定圆算法
化繁为简,追求数学公式简洁之美往往能保持较高得计算精度。上述算法实现已集成进博主开发得CGLib库中,效果请参考微信公众号,欢迎关注交流。瞅瞅迷你CAD可以长什么样?开发一款迷你CAD专注于图形几何、数据处理、并行计算技术,欢迎交流。原创 2025-01-24 20:00:00 · 629 阅读 · 0 评论 -
CGAL配置和编译记录
CGAL开源库值得学习和研究,在配置编译CGAL过程中遇到了若干坑,记录一下,方便自己和需要的人。原创 2024-12-20 20:30:00 · 1243 阅读 · 0 评论 -
图形几何之美系列:线段集合中提取轮廓
以前用过相关的库,忘记名字了,记得是构造了TopoPolygonTree,可以获取最大外轮廓,以及构成该最大外轮廓的其他轮廓,而内部轮廓是以树的形式表示,每个树节点是一个轮廓,树节点的深度(node.deep % 2 == 0?outer : inner)代表其是外轮廓还是内轮廓。重新研究实现,进行代码的测试和问题修改,简单记录如下。原创 2024-12-18 18:19:19 · 991 阅读 · 0 评论 -
网格剖分算法 & 铺装填充算法效果
原图--》提取轮廓线--》计算最小外包轮廓--》网格剖分--》铺装填充。奇奇怪怪的图形几何算法,欢迎交流。原创 2024-12-17 17:52:29 · 418 阅读 · 0 评论 -
图形几何之美系列:铺装算法效果赏析
调整tile的尺寸和铺装范围,像更加精美的艺术图案,可以作为logo或图标,赋予了艺术和数学之美~图案变得更具艺术感~电视机?一切皆可铺装,像纹理填充一样。嘿嘿,不咋炫酷的轮廓,也变得更加艺术,色彩之美跃然于眼眸~狗子像穿了一件精心织就而成的纹理衣饰,变得抽象起来~轮廓铺装:地板铺装、墙砖铺砖、吊顶铺装、图案填充。可以用铺装算法,使得设计和艺术变得更有创造力。你知道怎么设置地砖排布吗?有一块布料,怎么填充好看的纹理?原创 2024-12-14 21:43:52 · 262 阅读 · 0 评论 -
项目使用bullet库编译时遇到Error LNK2001的解决方案
bullet库作为物理引擎提供很强大的功能,其目标是游戏场景的物理分析,包括碰撞、动力等方面,具有广泛的应用。参考上述步骤执行,目的是编译bullet库、编译项目时该宏的定义保持一致,因为btScalar会被bullet导出接口的变量使用,如btVector3、btVector4等,避免项目对该变量的理解和bullet编译时赋予的意义不一致。原创 2024-12-02 19:31:21 · 742 阅读 · 0 评论 -
图像处理 之 凸包和最小外围轮廓生成
最小包围轮廓之美一起来欣赏图形之美~原创 2024-11-18 23:13:08 · 510 阅读 · 0 评论 -
图形几何之美系列:二维凸包艺术赏析
凸包话题包括二维凸包、三维凸包以及高维凸包。对于平面点集,探究如何构造可以覆盖给定点集最小的凸多边形;对于三维空间点集,探究如何构造可以覆盖点集的最小凸实体;凸包的计算和应用还可以扩展到高维空间,用于解决更复杂的几何问题。作者实现的完整实现了二三维凸包算法,相关技术文章和参考作者优快云博文,本文仅对二维凸包效果进展展示和赏析,和大家一起领略图形几何之美~提示:作者优快云博文1. [凸包计算]求解点集合的凸包轮廓2. 几何算法系列-三维凸包。原创 2024-11-16 21:17:55 · 779 阅读 · 0 评论 -
图形几何之美系列:法向量计算之轮廓有向面积辅助法
有多种方法可计算轮廓的法向量,如根据轮廓类型进行法向量的计算、轮廓有向面积辅助法、Newell向量法等。如上文多边形轮廓面积计算中的内容所述,轮廓的法向量和面积密切相关,我们常说的法向量为单位法向量,而模长等于面积的法向量是多边形轮廓多维度的几何和物理属性,更能表达轮廓的几何特征。图:轮廓法向量需要注意的是由于浮点数存储和运算的精度损失,可能造成求轮廓法向的精度损失,如角点由于精度损失并非精确的在一个平面上(而是在容差范围内属于一个平面)、角点距离很近导致可能进一步影响法向计算的精度等。原创 2024-11-15 21:45:00 · 1031 阅读 · 0 评论 -
图形几何之美系列:面积计算之梯形投影求和
一种常用的是微积分思路的分段求和办法是将组成轮廓的每条线段与X轴或Y轴进行有向投影,轮廓边线与X轴或Y轴的投影之和即为轮廓的有向面积。原创 2024-11-12 23:07:14 · 973 阅读 · 0 评论 -
图形几何之美系列:仿射变换矩阵之Y-Up和Z-Up
所有的3D工具都包含一个具有X、Y和Z轴的三维环境。在这些工具中,X轴方向是相同的,即在前视图是从左到右的水平线。然而, 不同的 3D 工具可能对Y轴和Z轴的朝向有不同的解释。一些3D工具是Y-Up的, 即Y轴是竖直方向的;而其他的3D工具是Z-Up的, 即Z轴是竖直方向的。原创 2024-11-11 21:34:31 · 515 阅读 · 0 评论 -
图形几何之美系列:仿射变换矩阵之先转后偏
如果一次仿射变换中存在多种类型的姿态变换,需要先进行矩阵左上角的3X3部分(缩放、旋转、镜像、非均匀变换)的构造处理,最后再叠加偏移。这是我们从一些书籍或老司机口中得知的重要经验,大白话就是“先转后偏”,那么为什么要这样呢?先偏后转不行吗?还是先转后偏有其不可忽略的独门绝技?如果先偏移,则需要基于偏移值的坐标点进行矩阵左上角3X3部分的构造,这将变得复杂的多,这对于大多数人来说不可接受,毕竟我们很多时候要做的是化繁为简,同时提高精度。下面我们对比下先转后偏和先偏后转的特点和区别。原创 2024-11-11 21:29:00 · 1316 阅读 · 0 评论 -
图形几何之美系列:仿射变换矩阵(二)
在几何计算、图形渲染、动画、游戏开发等领域,常需要进行元素的平移、旋转、缩放等操作,一种广泛应用且简便的方法是使用仿射变换进行处理。相关的概念还有欧拉角、四元数等,四元数在图形学中主要用于解决旋转问题,特别是在三维空间中绕任意轴的旋转,且四元数与仿射变换可以相互转换。。本篇我们继续进行探索,包括等内容。原创 2024-11-10 17:03:15 · 1184 阅读 · 0 评论 -
图形几何之美系列:仿射变换矩阵
仿射变换是一种结合了线性变换和平移的变换,不仅包括旋转、缩放等线性变换,还包括平移操作。变换前是直线的,变换后依然是直线;直线比例保持不变。仿射变换可以用形如下图的4x4矩阵表示,即仿射变换矩阵。图:4x4矩阵注意如果没有特殊说明,本文所述仿射变换矩阵皆为矩阵乘列向量/点方式的,即把向量和点作为4x1矩阵参与运算,如下图所示。原创 2024-11-09 14:03:20 · 1464 阅读 · 0 评论 -
图形几何之美系列:三维实体结构表达
实体结构的表达由多种方式,如分解表示、构造表示**CSG**(Constructive Solid Geometry)、边界表示**BRep**(Boundary Representation)、网格表示等。常见的分解表示法有四叉树、八叉树、BSP树等方式。CSG方式出现较早,后来出现了BRep普及比较快,现在大部分领先的几何内核(ACIS、PS、OCC等)采用BRep方式,有关两者的优缺点和适用场景比较的讨论已有很多,本文不再赘述。原创 2024-11-07 20:30:00 · 1071 阅读 · 0 评论 -
几何算法系列:空间实体体积计算公式推导
面积和体积的计算是常见和基础的几何算法话题,面积和体积通常作为面或构件的基本信息参与相关的建模、计算、分析等过程。有关面积的计算,可以参考博主此前的文章,一种误差较小的轮廓面积计算算法_轮廓面积计算原理-优快云博客基于微分思想的轮廓面积计算方法之一是将多边形轮廓边与X轴会Y轴进行围合,形成一个个梯形,每个梯形的面积有符号,累计求和即得到多边形轮廓的面积。详见博主之前的文章,记录导致计算轮廓面积出错的一个坑点-优快云博客计算轮廓面积是常见的几何算法话题,获取轮廓面积、计算轮廓法线等场景会涉及到。原创 2024-10-23 19:02:45 · 1164 阅读 · 0 评论 -
几何算法系列-三维凸包
凸包是基础几何算法工具函数,一些场景需要计算并显示凸包,或使用凸包以加速计算。计算三维凸包有多种方法,如增量构建、分治法等,博主采用增量构建方法计算凸包。有关二维凸包的计算请参考博主此前文章(已经是5年多以前的文章了,时光荏苒......)原创 2024-10-22 18:20:09 · 1611 阅读 · 0 评论 -
网格剖分-耳切法效果展示
将简单多边形转换成一组由同样顶点组成的三角形集合是计算机图形学中的一个经典问题。问题中,简单多边形是指由一组有序顶点组成的,点V0~点Vn-1。相邻的顶点之间通过边(Vi,Vi-1)连接,并且边(Vn-1,V0)连接起始点。每个顶点被两条边所共享,而边的所有交点都是顶点。将一个简单多边分解成三角形集合的方法称之为多边形的三角形化(triangulation of thePolygon)。几何学的知识告诉我们,由n个顶点组成的简单多边形总是可以分解成n-2个三角形。原创 2024-10-09 19:28:54 · 1407 阅读 · 0 评论 -
ODA(Open Design Alliance)试用小记-ODA提供源码下载就完全可控了吗?
ODA(Open Design Alliance)库架构如下:产品体系如下:ODA的产品体系越来越壮大,包括主流BIM格式SDK、Viewer、Cloud、数据交换等,每个模块需要单独购买,并提供“源码服务”。原创 2024-09-29 20:59:47 · 1957 阅读 · 1 评论 -
关于三维布尔运算的思考(2)
可以根据实际场景进行布尔运算方式的选择,需要考虑效果、效率、适应性、技术难度、几何数据表达方式等因素。当然也可以直接采用已有的几何内核,专注于应用开发,将应用做好做广,也是一种很好的选择。原创 2024-09-28 12:53:26 · 708 阅读 · 0 评论 -
一种误差较小的计算轮廓法向的方法
单纯的选取任意两个相邻边来计算法向可能是错误的,因为存在凹角的情况,这时得到的“法向”与正确的法向是方向相反的。而进一步通过轮廓面积计算来得到法向的符号貌似是一种比较准确的补偿方法,是的,很有效,但是上述选取任意相邻边计算的法向可能精度损失较大,如相邻边的3个点偏离平面较大、相邻3个点存在距离很近的情况等导致法向精度损失较大。原创 2024-09-27 19:17:56 · 689 阅读 · 0 评论 -
利用WPF绘制轮廓并保存为图片
WPF作为显示工具也挺好用,用C#开发应用软件会比较省力,当然也有其缺点,如在对效率要求较高的情况下有性能问题,本文记录用WPF绘制轮廓并保存为图片相关内容。显示效果也还不错,满足调试使用了,原创 2024-09-18 18:52:15 · 565 阅读 · 0 评论 -
从线段中搜寻提取闭合轮廓(三)
做底层和数据的调试问题也是个麻烦事,如果没有方便的可视化工具辅助,那将令人感到痛苦,借助可视化的工具可以让我们高效、省心,进而心情舒畅,重要的是可以提高调试效率。当然可视化工具也分不同层次的,大致分为手动操作为主的、自动为主的两种,手动操作为主的也要区分工具准确性、易用性,如果碰到难用的也是经常令人心情烦躁,甚至破口大骂;而易用性较好的会比较省心,但由于其手动操作为主的特点,需要耗时耗力,也难以心情很舒畅。(中间吐槽省略......)原创 2024-09-11 17:43:14 · 719 阅读 · 0 评论 -
三维布尔运算对不规范几何数据的兼容处理
上一篇文章谈过八叉树布尔运算,对于规范几何数据的情况是没有问题的。在实际情况中,由于几何数据来源不一,处理和生成方式不一,我们无法保证进行布尔运算的几何数据都是规范的,对于不规范情况有时候也有需求,这就需要兼容不规范数据情况,当然这种兼容不是一味的让步,而是对于存在有限的不规范数据的兼容处理。原创 2024-09-07 22:26:13 · 626 阅读 · 0 评论 -
八叉树CSG布尔运算
三角网格布尔运算有多种理论支撑实现,比如BSP网格布尔运算方法、八叉树网格布尔运算等,同样,不同的方法有其特点及适用范围。BSP网格布尔运算依赖于较为严格的实体规范表达,即参与运算的几何实体需要是闭合的、规整的,如果出现不闭合的几何实体,运算可能出错,比如对一颗网格化表达的树进行布尔就会出错,得到意想不到的造型效果。如果实体内部由有其他元素时也会出现上述问题,比如大坝内部有其他多种围挡等建造元素时。八叉树布尔运算适用性较好,缘于其较好的鲁棒性——对于不规整几何体的兼容处理能力。原创 2024-09-07 22:03:20 · 1031 阅读 · 0 评论 -
一种误差较小的轮廓面积计算算法
基于微分思想的轮廓面积计算方法之一是将多边形轮廓边与X轴会Y轴进行围合,形成一个个梯形,每个梯形的面积有符号,累计求和即得到多边形轮廓的面积。详见博主之前的文章,记录导致计算轮廓面积出错的一个坑点-优快云博客计算轮廓面积是常见的几何算法话题,获取轮廓面积、计算轮廓法线等场景会涉及到。计算轮廓面积的方法有很多,一种常用的是微积分思路的分段求和办法,即组成轮廓的每条线段与X轴或Y轴进行有向投影,轮廓边线与X轴或Y轴的投影之和即为轮廓的有向面积。原创 2024-09-03 18:52:29 · 1199 阅读 · 0 评论 -
记录导致计算轮廓面积出错的一个坑点
计算轮廓面积是常见的几何算法话题,获取轮廓面积、计算轮廓法线等场景会涉及到。计算轮廓面积的方法有很多,一种常用的是微积分思路的分段求和办法,即组成轮廓的每条线段与X轴或Y轴进行有向投影,轮廓边线与X轴或Y轴的投影之和即为轮廓的有向面积。其中第0、1、6的投影为正,第2、3、4、5的投影为负,累积即为轮廓面积(绿色填充部分)。如上所示,如果关心面积的正负时,一般将轮廓移到第一或第四象限再求面积。满足上述条件时,逆时针轮廓的面积为正,顺时针轮廓的面积为负。原创 2024-08-01 18:33:16 · 646 阅读 · 0 评论 -
从线段中搜寻闭合轮廓
最近在研究怎么从一堆线段中提取闭合轮廓,以前用过相关的库,忘记名字了,记得是构造了TopoPolygonTree,可以获取最大外轮廓,以及构成该最大外轮廓的其他轮廓,而内部轮廓是以树的形式表示,每个树节点是一个轮廓,树节点的深度(node.deep % 2 == 0?outer : inner)代表其是外轮廓还是内轮廓。重新搜索研究,进行代码的测试和问题修改,简单记录如下。原创 2024-07-17 18:56:32 · 1348 阅读 · 1 评论 -
DWG转PDF字体研究记录
最近需要对PDF中的符合业务规则的文字进行提取,发现有些文字不是文字信息形式存储,而是polyline形式表达,意味着仅仅有形体上的表达,丢失了原本的文字信息。经过沟通得知,这些PDF是AutoCAD软件导出的,拿到原始dwg文件进行了测试和研究。原创 2024-06-20 11:28:59 · 1329 阅读 · 0 评论 -
将点作为C++ map容器key值时的踩坑记录
空间点具有X,Y,Z坐标等数据,一些情况下我们需要将点作为map容器的key值,比如识别重复点或处理轮廓等情况。原创 2024-05-31 18:55:06 · 458 阅读 · 0 评论 -
关于三维布尔运算的几点思考
三维布尔运算根据三维实体数据结构表达分为CSG布尔运算、Brep布尔运算、三角网格布尔运算等类型。这几种类型算法在不同情境下有不同的优势,根据情况进行选择。但这也不能作为随意选择方案的借口,在不分析实际情况下。CSG和BRep布尔运算能够保留原始几何拓扑信息,适用于各类设计编辑场景,如建模设计软件中。而三角网格布尔运算也是常见和常用的,由于一些因素,当前实体的表达方式就是三角面网格方式,也需要对这些实体进行编辑,这时候三角网格布尔运算是最佳选择方案。原创 2023-05-28 10:23:32 · 3033 阅读 · 0 评论 -
几何算法学习实践和应用(二维)
几何算法底层的原理很多是相通的,用到的也都是基础的工具函数,学习和积累非常重要。很多原理可由二维推广到三维,一些复杂三维算法可以分解为二维实现。原创 2023-03-13 23:34:53 · 1681 阅读 · 0 评论 -
几何算法学习实践(三维)
将个人几何算法学习和实践进行记录,方便自己和有需要的人。学习和实践相结合,建立小项目进行练手,该项目包含几何工具库与图形显示两部分。原创 2023-03-12 12:41:00 · 2390 阅读 · 2 评论 -
点合并算法的思考
1.写在前面去年因为某项目遇到模型卡顿问题,分析原因发现是模型中点没有进行合并,故而设计了点合并的技术方案,由于某些原因该方案未能实施,仅仅是方案,放在技术方案堆里,以一篇文档形式。平时的积累尤其重要,尝试更优,加之日积月累,会有比较大的进展和进步,技术如此,工作也一样。平时面试偶尔也会以该题目为背景问一下面试者,看看思路怎样,有想法还不错的,也有不知所措的...好了,闲扯到这里,开始吧。2.思路2.1.方案一ifcOpenShell是将点的hash作为key,建立map,map&l原创 2021-09-13 23:07:13 · 1599 阅读 · 0 评论 -
【离散椭圆弧】将椭圆弧按弧长等分为一定数量弧上点
由于椭圆弧长积分的解析解不存在,用数值分析方法近似求解。下面以第一象限椭圆弧为例说明一种近似求解方法,(1)首先圆是椭圆的特殊形式,长短轴长相等,对于圆心角为θ的圆弧长为R*θ,当圆心角足够小时可以认为tanθ≈θ,弧长可以认为L≈R*tanθ≈R*θ,其中明R为圆心到微段弧上点的距离,这个近似简化对于椭圆弧同样有效。(2)对于椭圆存在x=a*cosθy=b*s...原创 2019-02-24 23:11:37 · 8630 阅读 · 7 评论 -
[凸包计算]求解点集合的凸包轮廓
前提:约定1----平面上两向量基于平面法向的夹角为[0-2π);约定2----下文中路径为有向的;约定3----下文中法向Normal由屏幕内指向屏幕外;当然上述约定并不是绝对的,只是为了表述原理方便,或者说化繁为简而设的条件,当然你可以约定Normal为指向屏幕内,这也是可以的,原理是不变的。根据右手定则,Vector1基于Normal与Vector2夹角如图1为锐角,...原创 2019-03-01 23:34:00 · 2115 阅读 · 0 评论 -
求椭圆圆心到椭圆弧最近点和最近距离
前提知识:任意点P0与其到二次曲线y最近点(最远点)P1的连线必垂直于y在P1点处的切线。推论:这样椭圆心到椭圆距离有四个极值点,即椭圆长轴与椭圆两个交点(极大值点),椭圆短轴与椭圆两个交点(极小值点),而在极大值点与极小值点之间距离与参数角关系曲线Y是光滑的,这样当参数角位于极大值与极小值之间时,Y是单调递减的,同样在极小值与极大值之间,Y是单调递增的。一段椭圆弧可以表示为完...原创 2019-03-06 21:32:30 · 4330 阅读 · 0 评论