news 2026/5/15 6:30:01

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/5/11 4:55:18

昇腾CANN开源仓生态体验与开源商业版差异深度解析

摘要 本文基于昇腾AI实战经验,深度解读CANN开源仓生态,剖析其架构设计与核心能力,对比开源版与商业版差异,并结合真实项目分享参与体验。通过性能分析图表、实战代码示例与企业级案例,揭示CANN在模型训练/推理中的软硬…

作者头像 李华
网站建设 2026/5/15 5:17:00

基于视频空间认知的高敏感资产智能管控关键技术研究

一、项目基本信息项目名称: 基于视频空间认知的高敏感资产智能管控关键技术研究本项目聚焦弹药库、特种物资仓库等高敏感资产存储场景,围绕“空间认知—行为理解—决策推演”这一核心技术主线,开展系统性、方法论层面的关键技术研究&#xff…

作者头像 李华
网站建设 2026/4/29 13:07:33

基于PyTorch的行人重识别流程改造与实现

基于PyTorch的行人重识别流程改造与实现 在智能监控系统日益普及的今天,如何从海量视频流中快速定位特定目标,已成为城市安防、行为追踪等场景中的核心需求。其中,行人重识别(Person Re-Identification, ReID) 技术扮…

作者头像 李华
网站建设 2026/5/12 18:17:34

揭秘Open-AutoGLM部署全流程:如何30分钟内完成本地化部署与调试

第一章:Open-AutoGLM本地化部署概述Open-AutoGLM 是基于 AutoGLM 架构开源的大语言模型,支持自然语言理解、代码生成与多模态任务处理。其本地化部署方案为企业和开发者提供了数据隐私保护、低延迟响应以及定制化模型优化的能力,适用于金融、…

作者头像 李华
网站建设 2026/5/12 8:22:43

‌教工系统二次开发怎么做好个性化定制?这几步很关键

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华