# vtkDelaunay2D

**URL:** https://discourse.vtk.org/t/vtkdelaunay2d/11447
**Category:** Support
**Created:** [May 13, 2023, 6:54am UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447 "2023-05-13T06:54:44Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![Frankenstein](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/f/0ea827/32.png) [@Frankenstein](https://discourse.vtk.org/u/Frankenstein)
#### Post date: [May 13, 2023, 6:54am UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/1 "2023-05-13T06:54:44Z")

</div>

I have created a surface using the vtkDelaunay2D class, but due to different data, it often causes surface distortion  
 ![image](https://discourse.vtk.org/uploads/default/original/2X/1/1ef9621090234971e95eaeb87c0de60bfb785adc.png)like this ,How should I make these surfaces smoother? By the way, I have used several smoothing functions included in vtk, but the results are not ideal,Thank you for your suggestion

---

<div class="post-metadata">

### Author: ![Paulo\_Carvalho](https://discourse.vtk.org/user_avatar/discourse.vtk.org/paulo_carvalho/32/370_2.png) [@Paulo\_Carvalho](https://discourse.vtk.org/u/Paulo_Carvalho)
#### Post date: [May 14, 2023, 12:38pm UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/2 "2023-05-14T12:38:11Z")

</div>

Hello,

To smooth out such artifacts, you can refine the mesh while interpolating the finer triangles. You can try either `vtkLinearSubdivisionFilter` or `vtkButterflySubdivisionFilter` classes.

[https://vtk.org/doc/nightly/html/classvtkLinearSubdivisionFilter.html](https://vtk.org/doc/nightly/html/classvtkLinearSubdivisionFilter.html)

[https://vtk.org/doc/nightly/html/classvtkButterflySubdivisionFilter.html](https://vtk.org/doc/nightly/html/classvtkButterflySubdivisionFilter.html)

take care,

PC

---

<div class="post-metadata">

### Author: ![Frankenstein](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/f/0ea827/32.png) [@Frankenstein](https://discourse.vtk.org/u/Frankenstein)
#### Post date: [May 16, 2023, 7:24am UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/3 "2023-05-16T07:24:31Z")

</div>

Actually, this picture I haved used class vtkLinearSubdivisionFilter to create it, tried class vtkButterflySubdivisionFilter, too，But it didn’t work. Thanks for the advice anyway，If you have any better suggestions, I’d appreciate it

---

<div class="post-metadata">

### Author: ![Charles\_Gueunet](https://discourse.vtk.org/user_avatar/discourse.vtk.org/charles_gueunet/32/239_2.png) [@Charles\_Gueunet](https://discourse.vtk.org/u/Charles_Gueunet)
#### Post date: [May 16, 2023, 7:29am UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/4 "2023-05-16T07:29:28Z")

</div>

Dear @Frankenstein ,

If you can deal with the CGAL’s GPLv3 license, I would recommand you to have a look at the [vespa project](https://gitlab.kitware.com/vtk-cgal/vespa).  
As presented in [this blog](https://www.kitware.com/vespa-advanced-mesh-processing-based-on-cgal-for-vtk-and-paraview/), this VTK module (and ParaView plugin) expose CGAL smoothing methods, as well as isotropic remeshing, alpha wrapping, boolean operations …

---

<div class="post-metadata">

### Author: ![Paulo\_Carvalho](https://discourse.vtk.org/user_avatar/discourse.vtk.org/paulo_carvalho/32/370_2.png) [@Paulo\_Carvalho](https://discourse.vtk.org/u/Paulo_Carvalho)
#### Post date: [May 16, 2023, 1:59pm UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/5 "2023-05-16T13:59:51Z")

</div>

> [@Frankenstein](#):
>
> But it didn’t work.

Don’t give up so early. Those algorithms have lots of parameters. Have you tried them all?

---

<div class="post-metadata">

### Author: ![Paulo\_Carvalho](https://discourse.vtk.org/user_avatar/discourse.vtk.org/paulo_carvalho/32/370_2.png) [@Paulo\_Carvalho](https://discourse.vtk.org/u/Paulo_Carvalho)
#### Post date: [May 16, 2023, 2:00pm UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/6 "2023-05-16T14:00:52Z")

</div>

> [@Frankenstein](#):
>
> If you have any better suggestions

No, I haven’t. Why don’t you post the code you used before dismissing the algorithms?

---

<div class="post-metadata">

### Author: ![Frankenstein](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/f/0ea827/32.png) [@Frankenstein](https://discourse.vtk.org/u/Frankenstein)
#### Post date: [May 18, 2023, 8:06am UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/7 "2023-05-18T08:06:53Z")

</div>

My Bad. Here’s my code

#ifndef INITIAL\_OPENGL  
#define INITIAL\_OPENGL  
#include \<vtkAutoInit.h\>  
VTK\_MODULE\_INIT(vtkRenderingOpenGL2)  
VTK\_MODULE\_INIT(vtkRenderingVolumeOpenGL2)  
VTK\_MODULE\_INIT(vtkInteractionStyle)  
VTK\_MODULE\_INIT(vtkRenderingFreeType)  
#endif  
#include   
#define pi 3.1415926535  
#include \<vtkDelaunay2D.h\>  
#include \<vtkLoopSubdivisionFilter.h\>  
#include \<vtkPolyDataMapper.h\>  
#include \<vtkActor.h\>  
#include \<vtkRenderer.h\>  
#include \<vtkRenderWindow.h\>  
#include \<vtkRenderWindowInteractor.h\>  
#include   
#include \<vtkButterflySubdivisionFilter.h\>  
#include \<vtkDoubleArray.h\>  
#include \<vtkPointData.h\>  
#include \<vtkLookupTable.h\>  
#include \<vtkLinearSubdivisionFilter.h\>  
#include \<vtkVertexGlyphFilter.h\>  
#include \<vtkSmartPointer.h\>  
#include \<vtkPoints.h\>  
#include \<vtkCellArray.h\>  
#include \<vtkLine.h\>  
#include \<vtkPolyData.h\>  
#include \<vtkScalarBarActor.h\>  
#include \<vtkAlgorithm.h\>  
int main() {

```
std::ifstream ifs_p1;
ifs_p1.open("C:/Users/15409/Desktop/ver1/result_p1.txt");
std::vector<std::vector<double>>pp1;
std::vector<double> pp1_tmp;
double tmp;
for(int i=0;i<72+1;i++)
{
    for(int j=0;j<36+1;j++)
    {
    ifs_p1>>tmp;
    pp1_tmp.push_back(tmp);
    }
    pp1.push_back(pp1_tmp);
    pp1_tmp.clear();
}
std::vector<std::vector<double>>XX,XX1;
std::vector<double> X;
std::vector<std::vector<double>>YY,YY1;
std::vector<double> Y;
std::vector<std::vector<double>>ZZ;
std::vector<double> Z;
double wzj=150;double r=40;
int m=73;int n=37;double B=32;

```

for(int i=0;i\<37;i++)  
{  
for(int j=0;j\<73;j++)  
{  
X.push\_back(cos(((180-wzj)/2+180+wzj\*j/(m-1))_pi/180)_(r+pp1[j][i]_500));  
Y.push\_back(sin(((180-wzj)/2+180+wzj_j/(m-1))_pi/180)_(r+pp1[j][i]_500));  
Z.push\_back(i_B/(n-1)-(B/2));  
}  
XX.push\_back(X);  
YY.push\_back(Y);  
ZZ.push\_back(Z);  
Z.clear();  
X.clear();  
Y.clear();  
}

```
vtkSmartPointer<vtkPoints> pts =vtkSmartPointer<vtkPoints>::New();
for(int i=0;i<37;i++)
{
    for(int j=0;j<73;j++)
    {
       pts->InsertNextPoint(ZZ[i][j],XX[i][j],YY[i][j]);
    }
}
for(int i=0;i<37;i++)
{
    for(int j=0 ;j<73;j++)
    {
       X.push_back(i);
       Y.push_back(j);
    }
    XX1.push_back(X);
    YY1.push_back(Y);
    X.clear();
    Y.clear();
}

vtkSmartPointer<vtkPoints> pts_surf =vtkSmartPointer<vtkPoints>::New();
for(int i=0;i<37;i++)
{
    for(int j=0;j<73;j++)
    {
       pts_surf->InsertNextPoint(XX1[i][j],YY1[i][j],pp1[j][i]*500);
    }
}

vtkSmartPointer<vtkPolyData> poly_surf = vtkSmartPointer<vtkPolyData>::New();
        poly_surf->SetPoints(pts_surf);
vtkSmartPointer<vtkDelaunay2D>Delaunay_surf =vtkSmartPointer<vtkDelaunay2D>::New();
    Delaunay_surf->SetInputData(poly_surf);
    Delaunay_surf->Update();

vtkSmartPointer<vtkLinearSubdivisionFilter> subdiv_surf = vtkSmartPointer<vtkLinearSubdivisionFilter>::New();
    subdiv_surf->SetInputConnection(Delaunay_surf->GetOutputPort());
    subdiv_surf->SetNumberOfSubdivisions(3);
    subdiv_surf->Update();

vtkSmartPointer<vtkPolyDataMapper> mapper_surf = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper_surf->SetInputConnection(Delaunay_surf ->GetOutputPort());
vtkSmartPointer<vtkActor> actor_surf = vtkSmartPointer<vtkActor>::New();
actor_surf->SetMapper(mapper_surf);

vtkSmartPointer<vtkPolyData> poly = vtkSmartPointer<vtkPolyData>::New();
        poly->SetPoints(pts);
vtkSmartPointer<vtkDelaunay2D>Delaunay =vtkSmartPointer<vtkDelaunay2D>::New();
    Delaunay->SetInputData(poly);
    Delaunay->Update();

vtkSmartPointer<vtkLinearSubdivisionFilter> subdiv = vtkSmartPointer<vtkLinearSubdivisionFilter>::New();
    subdiv->SetInputConnection(Delaunay->GetOutputPort());
    subdiv->SetNumberOfSubdivisions(3);
    subdiv->Update();

vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(subdiv ->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

vtkSmartPointer<vtkRenderer> leftRenderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderer> rightRenderer = vtkSmartPointer<vtkRenderer>::New();
leftRenderer->AddActor(actor);
leftRenderer->SetBackground(0.53, 0.64, 0.89);
leftRenderer->SetViewport(0, 0, 0.5, 1.0);
rightRenderer->AddActor(actor_surf);
rightRenderer->SetViewport(0.5, 0, 1.0, 1.0);

vtkSmartPointer<vtkRenderWindow> window = vtkSmartPointer<vtkRenderWindow>::New();
window->AddRenderer(leftRenderer);
window->AddRenderer(rightRenderer);
window->SetSize(640, 480);
vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(window);
interactor->Initialize();
interactor->Start();

return 0;

```

}  
the result is here  
 ![image](https://discourse.vtk.org/uploads/default/original/2X/d/da4b8009a7710a60871edd1f71047581bd2b8c97.png)

---

<div class="post-metadata">

### Author: ![Frankenstein](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/f/0ea827/32.png) [@Frankenstein](https://discourse.vtk.org/u/Frankenstein)
#### Post date: [May 18, 2023, 8:10am UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/8 "2023-05-18T08:10:00Z")

</div>

![image](https://discourse.vtk.org/uploads/default/original/2X/4/4faf85c0faf7a0e5092e9f857434acf6029a7583.png)  
I already know that I can control the parameter input here to improve the smoothness of the surface, but it takes too much time. Maybe I should change the computer

---

<div class="post-metadata">

### Author: ![Paulo\_Carvalho](https://discourse.vtk.org/user_avatar/discourse.vtk.org/paulo_carvalho/32/370_2.png) [@Paulo\_Carvalho](https://discourse.vtk.org/u/Paulo_Carvalho)
#### Post date: [July 20, 2023, 2:08pm UTC](https://discourse.vtk.org/t/vtkdelaunay2d/11447/9 "2023-07-20T14:08:33Z")

</div>

> [@Frankenstein](#):
>
> the result is here  
> ![image](https://discourse.vtk.org/uploads/default/original/2X/d/da4b8009a7710a60871edd1f71047581bd2b8c97.png)

Well, looks like the output if fine for me. I assume the second image is what you need.

regards,

PC
