zoukankan      html  css  js  c++  java
  • VTK初学一,a Mesh from vtkImageData—球冠

    #ifndef INITIAL_OPENGL
    #define INITIAL_OPENGL
    #include <vtkAutoInit.h>
    VTK_MODULE_INIT(vtkRenderingOpenGL)
    VTK_MODULE_INIT(vtkInteractionStyle)
    #endif
    #include <iostream>
    using namespace std;
    #include <vtkVersion.h>
    #include <vtkPolyData.h>
    #include <vtkProperty.h>
    #include <vtkMath.h>
    #include <vtkSmartPointer.h>
    #include <vtkPolyDataMapper.h>
    #include <vtkActor.h>
    #include <vtkRenderWindow.h>
    #include <vtkRenderer.h>
    #include <vtkRenderWindowInteractor.h>
    #include <vtkImageData.h>
    #include <vtkGreedyTerrainDecimation.h>
    #include <vtkInteractorStyleTrackballCamera.h>
    #include <vtkInteractionWidgetsModule.h>
    void myShow(vtkGreedyTerrainDecimation* anInput)
    {
        vtkSmartPointer<vtkPolyDataMapper> aMapper=vtkSmartPointer<vtkPolyDataMapper>::New();
        aMapper->SetInputConnection(anInput->GetOutputPort());
        aMapper->ScalarVisibilityOn();
        vtkSmartPointer<vtkActor> anActor=vtkSmartPointer<vtkActor>::New();
        anActor->SetMapper(aMapper);
        anActor->GetProperty()->SetInterpolationToFlat();
        anActor->GetProperty()->EdgeVisibilityOn();
        anActor->GetProperty()->SetEdgeColor(1,0,0);
        vtkSmartPointer<vtkRenderer> ren1=vtkSmartPointer<vtkRenderer>::New();
        vtkSmartPointer<vtkRenderWindow> renWin=vtkSmartPointer<vtkRenderWindow>::New();
        ren1->AddActor(anActor);
        ren1->ResetCamera();
        ren1->SetBackground(1,1,1);
        renWin->AddRenderer(ren1);
        renWin->SetSize(512,512);
        vtkSmartPointer<vtkRenderWindowInteractor> iren=vtkSmartPointer<vtkRenderWindowInteractor>::New();
        vtkSmartPointer<vtkInteractorStyleTrackballCamera> style=vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
        iren->SetRenderWindow(renWin);
        iren->SetInteractorStyle(style);
        iren->Start();
    }
    int main()
    {
        vtkSmartPointer<vtkImageData> image=vtkSmartPointer<vtkImageData>::New();
        image->SetDimensions(120,120,1);
        image->AllocateScalars(VTK_UNSIGNED_CHAR,1);
        int dims[3];
    //    double max=sqrt(dims[0]*dims[0]+dims[1]*dims[1]);
        image->GetDimensions(dims);
        double R=100;//球面半径
        double r=0;//任意x、y坐标点,到(0,0)点的距离
        double r2=r*r;
        double rCrown=dims[0]/2;
        double rCrown2=rCrown*rCrown;//球冠半径的平方
        double hmax2=R*R-rCrown2;//最大弧矢高的平方
        double hmax=R-sqrt(hmax2);//最大弧矢高
        for(double i=0;i<dims[0];i++)
        {
            for(double j=0;j<dims[1];j++)
            {
                unsigned char* pixel=static_cast<unsigned char*>(image->GetScalarPointer(i,j,0));
                double x=(i-dims[0]/2),y=(j-dims[1]/2);
                r2=x*x+y*y;
                r=sqrt(r2);
                if(r<rCrown)
                    //不知道为什么,要在后面多加一个最大弧矢高hmax,才能得到正确的球冠,大概是坐标方向问题吧
                    pixel[0]=sqrt(R*R-r2)-(R-hmax)+hmax;
                else
                    pixel[0]=hmax;
            }
        }
        vtkSmartPointer<vtkGreedyTerrainDecimation>decimation=vtkSmartPointer<vtkGreedyTerrainDecimation>::New();
        decimation->SetInputData(image);
        decimation->Update();
        //可视化
        myShow(decimation);
        return 0;
    }
    
    
    
    
  • 相关阅读:
    尚筹网11阿里云OSS对象存储
    阿里云的OSS对象存储
    尚筹网10用户登录
    尚筹网09用户注册
    尚筹网08环境搭建
    实体类的进一步划分
    尚筹网07分布式架构
    临时弹出一个QQ对话窗口
    Input框改placeholder中字体的颜色
    判断银行卡号的正则
  • 原文地址:https://www.cnblogs.com/phoenixdsg/p/6120500.html
Copyright © 2011-2022 走看看