求su上曲率导数

2024-09-30 22:15:49 发布

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

我想用vtk和python计算曲面曲率的导数。我首先用以下公式计算曲率:

curvatures = vtk.vtkCurvatures()
curvatures.SetInputConnection(reader.GetOutputPort())
curvatures.SetCurvatureTypeToGaussian()

并使用以下公式计算曲率导数:

^{pr2}$

结果似乎与vtkCurvatures和vtkCell导数的结果相同。在

如何得到曲面上曲率的导数。非常感谢!在


Tags: reader公式导数曲面vtk曲率pr2getoutputport
1条回答
网友
1楼 · 发布于 2024-09-30 22:15:49

我认为你的代码是正确的。但是我们需要确保曲率点数据数组是当前活动的标量数组。我附加了一个输入数据文件,您可以用'Test.vtk'保存该文件。它有两个点数据数组pointid(标量数组)和PointNormals(向量数组)。然后我们将计算高斯曲率,它将成为点数据的第三个标量数组。我们将打印所有点数据数组的名称,而不管它们是标量还是向量。然后我们将显式地将'Gauss_Curvature'标量数组设置为活动标量。我们将计算单元导数,它将创建一个称为'ScalarGradient'的单元格数据向量数组,它将是曲率的梯度。这将保存在一个文件'Output.vtk'

import vtk

rd = vtk.vtkPolyDataReader()
rd.SetFileName('Test.vtk')
curv = vtk.vtkCurvatures()
curv.SetInputConnection(rd.GetOutputPort())
curv.SetCurvatureTypeToGaussian()
curv.Update()
pd = curv.GetOutput()

for i in range(pd.GetPointData().GetNumberOfArrays()):
    print(pd.GetPointData().GetArrayName(i))
# This will print the following:
# PointIds
# PointNormals
# Gauss_Curvature

# To set the active scalar to Gauss_Curvature
pd.GetPointData().SetActiveScalars('Gauss_Curvature')

curvdiff = vtk.vtkCellDerivatives()
curvdiff.SetInputData(pd)
curvdiff.SetVectorModeToComputeGradient()
curvdiff.Update()

writer = vtk.vtkPolyDataWriter()
writer.SetFileName('Output.vtk')
writer.SetInputConnection(curvdiff.GetOutputPort())
writer.Write()

给出了以下输出,首先是曲率,然后是梯度。请注意,这两个图形中的色阶是不同的。因此,曲率和导数值是不同的,尽管颜色方案使它们看起来相似。在

Curvature

CurvatureDerivative

如果您想重现结果,输入vtk文件如下所示

^{pr2}$

相关问题 更多 >