vtk中二次曲面的显示

官方示例地址:

https://examples.vtk.org/site/Cxx/Visualization/DisplayQuadricSurfaces/

显示效果:
在这里插入图片描述

源码:


import vtk
import vtkmodules.vtkInteractionStyle
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonDataModel import vtkQuadric
from vtkmodules.vtkFiltersCore import vtkContourFilter
from vtkmodules.vtkFiltersModeling import vtkOutlineFilter
from vtkmodules.vtkImagingHybrid import vtkSampleFunction
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderWindow,
    vtkRenderWindowInteractor,
    vtkRenderer
)
import random

# F(x,y,z) = a0*x^2 + a1*y^2 + a2*z^2 + a3*x*y + a4*y*z + a5*x*z + a6*x + a7*y + a8*z + a9
def Sphere(): # 球面
    quadric = vtkQuadric()
    quadric.SetCoefficients(1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
    # F(x,y,z) = 1*x^2 + 1*y^2 + 1*z^2
    return quadric

def EllipticParaboloid(): # 椭圆抛物面
    quadric = vtkQuadric()
    quadric.SetCoefficients(3, 1, 0, 0, 0, 0, 0, 0, -1, 0)
    # F(x,y,z) = 1*x^2 + 1*y^2
    return quadric

def HyperbolicParaboloid(): # 双曲抛物面
    quadric = vtkQuadric()
    quadric.SetCoefficients(1, -1, 0, 0, 0, 0, 0, 0, 0, 0)
    # F(x,y,z) = 1*x^2 - 1*y^2
    return quadric

def Cylinder():  # 圆柱体
    quadric = vtkQuadric()
    quadric.SetCoefficients(1, 1, 0, 0, 0, 0, 0, 0, 0, 0)
    # F(x,y,z) = 1*x^2 + 1*y^2
    return quadric

def HyperboloidOneSheet(): # 双曲面单张
    quadric = vtkQuadric()
    quadric.SetCoefficients(1, 1, -1, 0, 0, 0, 0, 0, 0, 0)
    # F(x,y,z) = 1*x^2 + 1*y^2
    return quadric

def HyperboloidTwoSheets(): # 双曲面双张
    quadric = vtkQuadric()
    quadric.SetCoefficients(1, 1, -1, 0, 0, 0, 0, 0, 0, 0)
    # F(x,y,z) = 1*x^2 + 1*y^2
    return quadric

def Ellipsoid(): # 椭球体
    quadric = vtkQuadric()
    quadric.SetCoefficients(1, 1, 2, 0, 0, 0, 0, 0, 0, 0)
    # F(x,y,z) = 1*x^2 + 1*y^2 + 1*z^2
    return quadric

def Cone(): # 锥
    quadric = vtkQuadric()
    quadric.SetCoefficients(1, 1, -1, 0, 0, 0, 0, 0, 0, 0)
    # F(x,y,z) = 1*x^2 + 1*y^2 - 1*z^2
    return quadric

def Other():
    quadric = vtkQuadric()
    quadric.SetCoefficients(.5, 1, .2, 0, .1, 0, 0, .2, 0, 0)
    # quadric.SetCoefficients(2, 1, 0, 0, 0, 0, 0, 0, 0, 0) # 椭圆柱
    # F(x,y,z) = 0.5*x^2 + 1*y^2 + 0.2*z^2 + 0*x*y + 0.1*y*z + 0*x*z + 0*x + 0.2*y + 0*z + 0
    return quadric

def PlotFunction():
    # setup the window
    ren1 = vtkRenderer()
    renWin = vtkRenderWindow()
    renWin.AddRenderer(ren1)
    renWin.SetWindowName('DisplayQuadricSurfaces')

    implicit_list = [Sphere(), EllipticParaboloid(), HyperbolicParaboloid(), Cylinder(),
                     HyperboloidOneSheet(), HyperboloidTwoSheets(), Ellipsoid(), Cone(), Other()]
    # contour_value = [1.0, 10.0, 10.0, 1.0,
    #                  1.0, -1.0, 1.0, 0.0, 1.0]
    # contour_value表示公式 F(x,y,z) = contour_value
    contour_value = [8.0, 5.0, 3.0, 9.0,
                     2.0, -2.0, 7.0, 0.0, 1.0]

    delta_value = 25
    rows = 3
    cols = 3
    for j in range(rows):
        for i in range(cols):
            index = j * cols + i
            sample = vtkSampleFunction()
            sample.SetSampleDimensions(100, 100, 100)
            sample.SetImplicitFunction(implicit_list[index])
            bounds = [-10, 11, -10, 10, -10, 10]
            sample.SetModelBounds(bounds)

            contours = vtkContourFilter()
            contours.SetInputConnection(sample.GetOutputPort())
            # contours.GenerateValues(1, 1.0, 1.0)
            contours.GenerateValues(1, contour_value[index], contour_value[index])

            transform = vtk.vtkTransform()
            transform.Translate(delta_value*i, delta_value*j, 0)

            contourMapper = vtk.vtkPolyDataMapper()
            contourMapper.SetInputConnection(contours.GetOutputPort())
            contourMapper.SetScalarRange(0.0, 10.0)
            contourMapper.ScalarVisibilityOff()

            contourActor = vtkActor()
            contourActor.SetMapper(contourMapper)
            contourActor.GetProperty().SetColor(random.random(), random.random(), random.random())
            contourActor.SetUserMatrix(transform.GetMatrix())

            outline = vtkOutlineFilter()
            outline.SetInputConnection(sample.GetOutputPort())

            outlineMapper = vtkPolyDataMapper()
            outlineMapper.SetInputConnection(outline.GetOutputPort())

            outlineActor = vtkActor()
            outlineActor.SetMapper(outlineMapper)
            outlineActor.GetProperty().SetColor(1.0, 1.0, 1.0)
            outlineActor.SetUserMatrix(transform.GetMatrix())

            ren1.AddActor(contourActor)
            ren1.AddActor(outlineActor)

    iren = vtkRenderWindowInteractor()
    style = vtk.vtkInteractorStyleTrackballCamera()
    iren.SetInteractorStyle(style)
    iren.SetRenderWindow(renWin)
    ren1.ResetCamera()
    # add the actors to the scene
    ren1.SetBackground(0.0, 0.0, 0.0)
    # render and interact
    renWin.Render()
    iren.Start()

PlotFunction()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/206715.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP SD 创建交货单 报错 VL461 VL248

因为生产环境已经被改好了,无法跟踪 所以换到测试环境重现一把,如何追根究底 对比正常订单发现 计划行 VBEP-LMENG,VBEP-BMENG这两个字段上的值跟 订单数量不一致。 尝试修改2者的数据跟订单数据一致,则可以正常创建交货单 实际原因是&a…

Neo4j 数据库管理 数据备份与恢复(头歌)

文章目录 第1关:数据备份与恢复任务描述相关知识数据备份数据导入 编程要求测试说明答案测试前准备Cypher 代码数据备份与导入 第1关:数据备份与恢复 任务描述 本关任务:熟练掌握数据备份与恢复。 相关知识 为了完成本关任务,…

INFINI Easysearch 与华为鲲鹏完成产品兼容互认证

何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云、私有云、混合云、桌面云)推出的一项合作伙伴计划,旨在为构建持续发展、合作共赢的鲲鹏生态圈,通过整合华为的技术、品牌资源,与合作伙伴共享商机和利…

基于单片机的排队叫号系统设计

1.设计任务 利用AT89C51单片机为核心控制元件,设计一个节日彩灯门,设计的系统实用性强、操作简单,实现了智能化、数字化。 基本要求:利用单片机AT89C51设计排队叫号机,能实现叫号功能。 创新:能显示叫号…

算法通关村第一关—链表高频面试题(白银)

链表高频面试题 一、五种方法解决两个链表的第一个公共子节点的问题 面试 02.07.链表相交1.首先想到的是暴力解,将第一个链表中的每一个结点依次与第二个链表的进行比较,当出现相等的结点指针时,即为相交结点。虽然简单,但是时间…

sso单点登录

一:业务需求 客户要求在门户网站上实现一次登录能访问所以信任的系统 二: 处理方式 实现sso单点登录需要前后端配合处理 1. 通过网页授权登录获取当前用户的openid,userid 2.设置单点登录过滤器并进行参数配置 3.另外写一个登录接口&…

制造企业建设数字工厂管理系统的难点主要有哪些

随着科技的飞速发展,制造企业正面临着从传统生产模式向数字化、智能化转型的挑战。其中,建设数字工厂管理系统是实现这一目标的重要途径。然而,在实际操作过程中,制造企业往往会遇到一系列难点。本文将对这些难点进行详细的分析。…

socket.io介绍

1. 使用的技术 Socket.IO 是一个封装了 Websocket、基于 Node 的 JavaScript 框架,包含 client 的 JavaScript 和 server 的 Node。其屏蔽了所有底层细节,让顶层调用非常简单。 另外,Socket.IO 还有一个非常重要的好处。其不仅支持 WebSocket…

Vue H5页面长按保存为图片

安装依赖&#xff1a;npm install html2canvas -d <template><div class"index"><div id"captureId" class"capture" v-show"firstFlag"><ul><li>1</li><li>2</li><li>3<…

R语言实操记录——R包无法安装,报错:Warning in system(cmd) : ‘make‘ not found

R语言 R语言实操记录——R包无法安装&#xff0c;报错&#xff1a;Warning in system(cmd) : ‘make‘ not found 文章目录 R语言一、起因二、具体步骤2.1、确认问题源2.2、安装RTools2.3、与R(/Rstudio)绑定2.4、验证可行性 三、疑惑 一、起因 R语言在包的安装上是真的方便&…

Prosys OPC Client连接OPC DA

Prosys OPC Client连接OPC DA Prosys OPC 客户端将帮助排除 OPC 连接故障并测试 OPC 服务器。 您可以读写数据、浏览服务器以及导出和导入地址空间。 OPC 客户端轻巧、快速且易于使用。 支持 OPC DA 1.0a 和 OPC DA 2.05a 官方地址: https://www.prosysopc.com/products/opc-…

SpringBoot 整合 Neo4j 实战(头歌)

文章目录 第1关&#xff1a;认识 Spring DATA Neo4J任务描述相关知识Spring DATA Neo4J - 简介Spring JDBC / Spring ORM 模块的缺点&#xff1a;Spring 数据模块的优点&#xff1a;Spring 数据模块功能&#xff1a;Spring DATA Neo4j 模块的附加功能&#xff1a; Spring DATA …

联想SR660V2服务器重置BMC后无法设置BMC管理IP

之前登录后台显示BMC账号密码不对&#xff0c;然后把BMC重置了&#xff0c;重置以后发现无法设置IP地址 联想官方的回复是&#xff1a; 1. 机器AC上电后&#xff0c;需等待7分钟左右, 再开机&#xff0c;让bmc完全启动。 2. 在UEFI及系统下配置bmc网络&#xff0c;需等待3分钟…

rest_framework_django学习笔记一(序列化器)

rest_framework_django学习笔记一(序列化器) 一、引入Django Rest Framework 1、安装 pip install djangorestframework2、引入 INSTALLED_APPS [...rest_framework, ]3、原始RESTful接口写法 models.py from django.db import models 测试数据 仅供参考 INSERT INTO de…

go学习之json和单元测试知识

文章目录 一、json以及序列化1.概述2.json应用场景图3.json数据格式说明4.json的序列化1&#xff09;介绍2&#xff09;应用案例 5.json的反序列化1&#xff09;介绍2&#xff09;应用案例 二、单元测试1.引子2.单元测试-基本介绍3.代码实现4.单元测试的细节说明5.单元测试的综…

JAVA全栈开发 day15_集合(Set接口、增强For循环、Map体系)

一、增加for遍历集合 语法&#xff1a; for(数据类型 变量名: 数组名或集合){​ }//集合遍历 &#xff0c;推荐使用增加for 1.静态导入 注意事项&#xff1a; 方法必须是静态注意不要和本类的方法同名&#xff0c;如果同名&#xff0c;记得加前缀&#xff0c;由此可…

R语言30分钟入门

1. 环境&安装 R是支持win、linux合macos的 完整参考&#xff1a;https://zhuanlan.zhihu.com/p/596324321?utm_id0 主要是安装&#xff1a;1、R环境&#xff1b;2、rstudio开发环境&#xff08;后面主要是用rstudio&#xff0c;也可以用vscode&#xff09; 1.1. rstud…

进程间的信号

1. 进程信号 1.1 进程信号的概念 信号是一个软件中断&#xff0c;通知进程某个事件发生了异步事件&#xff0c;打断进程当前的操作&#xff0c;去处理这个事件&#xff0c;信号是多种多样的&#xff0c;并且一个信号对应一个事件&#xff0c;这样才能做到进程收到一个信号后&…

微服务--08--Seata XA模式 AT模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 分布式事务Seata 1.XA模式1.1.两阶段提交1.2.Seata的XA模型1.3.优缺点 AT模式2.1.Seata的AT模型2.2.流程梳理2.3.AT与XA的区别 分布式事务 > 事务–01—CAP理论…

web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件)

题目 打开页面显示如下 只有这个页面能打开 显示如下 用dirsearch扫一下 查看了一下&#xff0c;发现没什么用 查看页面源代码 返回了&#xff0c;写入的参数&#xff0c;猜测可能有文件包含漏洞 用php伪协议读取文件 构造payload ?pagephp://filter/readconvert.base64-en…
最新文章