如何在VTKi中绘制超环面或环面

2024-09-28 21:41:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始使用vtkihttps://pypi.org/project/vtki)一个使用python的可视化工具箱(VTK)的助手模块。这是很容易可视化的三维表面,我使用的快速原型,但它有一些限制相比,VTK。你知道吗

我遇到的一个问题是可视化超环面,我可以使用vtk.vtkParametricSuperToroid()类使用VTK实现,但在vtki中找不到类似的功能。vtki只提供简单的曲面。你知道吗

我想知道是否有人有一些经验,如何绘制超环面与vtki。任何帮助都将不胜感激。你知道吗


Tags: 模块httpsorgprojectpypi可视化助手工具箱
2条回答

我是PyVista的开发者之一(以前叫vtki,最近不得不改名):https://github.com/pyvista/pyvista我很高兴看到你一直在享受这个软件!你知道吗

此时,vtk.vtkParametricSuperToroid类当前未包装在PyVista中-我在这里创建了一个特性请求:https://github.com/pyvista/pyvista/issues/213

请随意加入,并给我们一些关于如何创建和使用vtk.vtkParametricSuperToroid对象的示例代码。你知道吗

我们有几个要求包装所有的VTK类,这将很容易适应这些努力,我们只是需要一些帮助,了解所有其他非典型网格类型。你知道吗

因为vtkParametricSuperToroid类没有包装在PyVista中,所以我找到了另一个解决方案,并使用vista.StructuredGrid类来定义超环面。我创建了一个函数supertorus,并用它来用PyVista的vista.add_mesh()绘制超环面。你知道吗

import vista
import numpy as np

def supertorus(yScale, xScale, Height, InternalRadius, Vertical, Horizontal):
    #  initial range for values used in parametric equation
    n = 100
    u = np.linspace(-np.pi, np.pi, n)
    t = np.linspace(-np.pi, np.pi, n)
    u, t = np.meshgrid(u, t)

    # a1: Y Scale <0, 2>
    a1 = yScale
    # a2: X Scale <0, 2>
    a2 = xScale
    # a3: Height <0, 5>
    a3 = Height
    # a4: Internal radius <0, 5>
    a4 = InternalRadius
    # e1: Vertical squareness <0.25, 1>
    e1 = Vertical
    # e2: Horizontal squareness <0.25, 1>
    e2 = Horizontal

    # Definition of parametric equation for supertorus
    x = a1 * (a4 + np.sign(np.cos(u)) * np.abs(np.cos(u)) ** e1) *\
        np.sign(np.cos(t)) * np.abs(np.cos(t)) ** e2
    y = a2 * (a4 + np.sign(np.cos(u)) * np.abs(np.cos(u)) ** e1) *\
        np.sign(np.sin(t)) * np.abs(np.sin(t)) ** e2
    z = a3 * np.sign(np.sin(u)) * np.abs(np.sin(u)) ** e1

    grid = vista.StructuredGrid(x, y, z)
    return grid

相关问题 更多 >