【VTK】create spline points

本文介绍了如何使用VTK库在3D环境中创建样条曲线,并通过插值点定义平滑曲面。示例代码展示了如何利用vtkParametricFunctionSource创建点,以及如何解决曲面不完全沿着边界点生成的问题,提出利用微积分模型精确绘制曲面的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义5个点

在这里插入图片描述

    double p[5][3] = { {0.0, 4.0, 0.0},
                       {2.0, 0.0, 0.0},
                       {4.0, 2.0, 0.0},
                       {6.0, 0.0, 0.0},
                       {8.0, 4.0, 0.0} };

定义500个插值点

在这里插入图片描述

示例代码:

    double p[5][3] = { {0.0, 4.0, 0.0},
                       {2.0, 0.0, 0.0},
                       {4.0, 2.0, 0.0},
                       {6.0, 0.0, 0.0},
                       {8.0, 4.0, 0.0} };

    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
    for( int i = 0; i < 5; ++i )
    {
        points->InsertNextPoint( p[i] );
    }

    vtkSmartPointer<vtkParametricSpline> spline =
        vtkSmartPointer<vtkParametricSpline>::New();
    spline->SetPoints(points);

    vtkSmartPointer<vtkPoints> betaPoints = vtkSmartPointer<vtkPoints>::New();
    int index = 0;
    int countOfDeltaPoints = 500;
    double step = 1.0 / ( countOfDeltaPoints - 1 );
    for( double i = 0; i <= 1; i = i + step )
    {
        double tmp[3] = { i, 0, 0 };
        spline->Evaluate( tmp, tmp, NULL );
        betaPoints->InsertPoint( index++, tmp );
    }

使用vtkParametricFunctionSource的polyData,不用开发者自己来create points:

在这里插入图片描述

示例代码:

#include <vtkSmartPointer.h>
#include <vtkParametricFunctionSource.h>
#include <vtkParametricSpline.h>

#include <vtkCellArray.h>
#include <vtkCellData.h>
#include <vtkDoubleArray.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkTransformPolyDataFilter.h>
#include <vtkProperty.h>

#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkTransform.h>

#include <vtkSphereSource.h>
#include <vtkNamedColors.h>
#include <vtkTextSource.h>
#include <vtkCoordinate.h>
#include <vtkPolyDataMapper2D.h>
#include <vtkActor2D.h>

#include <QString>
#include <iostream>
using namespace std;

int main(int, char *[])
{
    vtkSmartPointer<vtkNamedColors> colors =
            vtkSmartPointer<vtkNamedColors>::New();

    double p[5][3] = { {0.0, 4.0, 0.0},
                       {2.0, 0.0, 0.0},
                       {4.0, 2.0, 0.0},
                       {6.0, 0.0, 0.0},
                       {8.0, 4.0, 0.0} };

    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
    for( int i = 0; i < 5; ++i )
    {
        points->InsertNextPoint( p[i] );
    }

    vtkSmartPointer<vtkPar
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值