news 2026/10/13 15:00:40

ConstrainedDelaunay2D 顺逆时针限制三角剖分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ConstrainedDelaunay2D 顺逆时针限制三角剖分

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①平面生成Delaunay2D注意事项,②如何生成一个带空洞的平面


二:代码及注释

import vtkmodules.vtkInteractionStyle import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonCore import ( vtkMinimalStandardRandomSequence, vtkPoints ) from vtkmodules.vtkCommonDataModel import ( vtkCellArray, vtkPolyData, vtkPolygon ) from vtkmodules.vtkFiltersCore import vtkDelaunay2D from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() rng = vtkMinimalStandardRandomSequence() rng.SetSeed(0) gridSize = 10 points = vtkPoints() for x in range(gridSize): for y in range(gridSize): d1 = rng.GetValue() / 2.0 - 0.25 rng.Next() d2 = rng.GetValue() / 2.0 - 0.25 rng.Next() points.InsertNextPoint(x+d1, y+d2, 0) aPolyData = vtkPolyData() aPolyData.SetPoints(points) aCellArray = vtkCellArray() # vtkPolyGon 多边形单元 aPolygon = vtkPolygon() """ 下面索引的顺序是顺时针的 顺时针定义的内部多边形被视为孔洞,剖分会避开此区域,源代码写法是这样的 aPolygon.GetPointIds().InsertNextId(22) aPolygon.GetPointIds().InsertNextId(23) aPolygon.GetPointIds().InsertNextId(24) aPolygon.GetPointIds().InsertNextId(25) aPolygon.GetPointIds().InsertNextId(35) aPolygon.GetPointIds().InsertNextId(45) aPolygon.GetPointIds().InsertNextId(44) aPolygon.GetPointIds().InsertNextId(43) aPolygon.GetPointIds().InsertNextId(42) aPolygon.GetPointIds().InsertNextId(32) """ aPolygon.GetPointIds().SetNumberOfIds(10) aPolygon.GetPointIds().SetId(0, 22) aPolygon.GetPointIds().SetId(1, 23) aPolygon.GetPointIds().SetId(2, 24) aPolygon.GetPointIds().SetId(3, 25) aPolygon.GetPointIds().SetId(4, 35) aPolygon.GetPointIds().SetId(5, 45) aPolygon.GetPointIds().SetId(6, 44) aPolygon.GetPointIds().SetId(7, 43) aPolygon.GetPointIds().SetId(8, 42) aPolygon.GetPointIds().SetId(9, 32) """ 下面的索引的顺序是逆时针的 逆时针定义的外部多边形会被视为外部边界,只在这里面发生三角剖分 aPolygon.GetPointIds().InsertNextId(32) aPolygon.GetPointIds().InsertNextId(42) aPolygon.GetPointIds().InsertNextId(43) aPolygon.GetPointIds().InsertNextId(44) aPolygon.GetPointIds().InsertNextId(45) aPolygon.GetPointIds().InsertNextId(35) aPolygon.GetPointIds().InsertNextId(25) aPolygon.GetPointIds().InsertNextId(24) aPolygon.GetPointIds().InsertNextId(23) aPolygon.GetPointIds().InsertNextId(22) """ aCellArray.InsertNextCell(aPolygon) boundary = vtkPolyData() boundary.SetPoints(points) boundary.SetPolys(aCellArray) delaunay = vtkDelaunay2D() delaunay.SetInputData(aPolyData) # 提供待剖分的100个点 delaunay.SetSourceData(boundary) # 提供了约束信息,根据约束信息的顺逆时针决定是不剖分还是只剖分这个不分 # Visualize meshMapper = vtkPolyDataMapper() meshMapper.SetInputConnection(delaunay.GetOutputPort()) meshActor = vtkActor() meshActor.SetMapper(meshMapper) meshActor.GetProperty().EdgeVisibilityOn() meshActor.GetProperty().SetEdgeColor(colors.GetColor3d('Peacock')) meshActor.GetProperty().SetInterpolationToFlat() boundaryMapper = vtkPolyDataMapper() boundaryMapper.SetInputData(boundary) boundaryActor = vtkActor() boundaryActor.SetMapper(boundaryMapper) boundaryActor.GetProperty().SetColor(colors.GetColor3d('Raspberry')) boundaryActor.GetProperty().SetLineWidth(3) boundaryActor.GetProperty().EdgeVisibilityOn() boundaryActor.GetProperty().SetEdgeColor(colors.GetColor3d('Red')) boundaryActor.GetProperty().SetRepresentationToWireframe() # Create a renderer, render window, and interactor renderer = vtkRenderer() renderWindow = vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) # Add the actor to the scene renderer.AddActor(meshActor) renderer.AddActor(boundaryActor) renderer.SetBackground(colors.GetColor3d('Mint')) # Render and interact renderWindow.SetSize(640, 480) renderWindow.SetWindowName('ConstrainedDelaunay2D') renderWindow.Render() renderWindowInteractor.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 4:02:31

Windows 10下配置Miniconda并训练YOLOv5模型

Windows 10下配置Miniconda并训练YOLOv5模型 在深度学习项目中,环境配置往往是第一步,也是最容易“踩坑”的一步。尤其是目标检测这类对依赖和硬件要求较高的任务,一个不稳定的Python环境可能直接导致训练失败或性能下降。如果你正在尝试用Y…

作者头像 李华
网站建设 2026/10/12 4:47:39

揭秘Open-AutoGLM本地化难题:5个关键步骤实现零延迟AI响应

第一章:揭秘Open-AutoGLM本地化难题的本质在将Open-AutoGLM部署至本地环境的过程中,开发者常面临性能下降、依赖冲突与推理延迟等问题。这些问题的根源并非单一技术瓶颈,而是由模型架构、运行时环境与系统资源调度共同作用的结果。核心挑战剖…

作者头像 李华
网站建设 2026/10/9 8:01:39

PyTorch多卡训练:DataParallel与DDP原理对比

PyTorch多卡训练:DataParallel与DDP原理对比 在使用 PyTorch-CUDA-v2.9 镜像进行模型训练时,很多人会遇到这样一个尴尬局面:明明配了四张A100,结果训练速度还不如单卡跑得流畅,甚至显存直接爆掉。这背后往往不是硬件的…

作者头像 李华
网站建设 2026/10/12 16:59:49

Stable Diffusion WebUI Docker环境搭建全指南

Stable Diffusion WebUI Docker环境搭建全指南 在生成式AI爆发的当下,越来越多开发者和研究者希望快速部署一个稳定、可复用的Stable Diffusion运行环境。然而,Python依赖复杂、CUDA版本错配、PyTorch与xformers兼容性问题常常让人望而却步。更别提多项目…

作者头像 李华
网站建设 2026/10/8 20:00:42

Airtest脚本的重构与优化:提升测试效率和可读性

在自动化测试的工作里,编写高效且易于维护的测试脚本是一项挑战,尤其是在应对复杂的测试场景时。Airtest作为一款常用的自动化测试工具,它提供了丰富的API和灵活的脚本编写方式,帮助测试人员高效地开展UI自动化测试。然而&#xf…

作者头像 李华