Skip to main content
replaced http://mathematica.stackexchange.com/ with https://mathematica.stackexchange.com/
Source Link

You can use the undocumented ReturnMeshObject method like @Simon Woods used herehere to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

Graphics`Mesh`MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken herehere looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

Edit: Tweaking parameters

Still no luck making splines work. It shouldn't seem to be as hard as it feels. Does anyone else have the required savoir-faire?

I wanted to add some pictures of how things look with different parameters. Increasing MaxPlotPoints too much tends to overfit the points, but that's a matter of taste.

 (*Mesh -> 50, MaxPlotPoints -> 15*)

Mesh -> 50, MaxPlotPoints -> 15

 (*Mesh -> 50, MaxPlotPoints -> 25*)

Mesh -> 50, MaxPlotPoints -> 25

You can use the undocumented ReturnMeshObject method like @Simon Woods used here to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

Graphics`Mesh`MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken here looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

Edit: Tweaking parameters

Still no luck making splines work. It shouldn't seem to be as hard as it feels. Does anyone else have the required savoir-faire?

I wanted to add some pictures of how things look with different parameters. Increasing MaxPlotPoints too much tends to overfit the points, but that's a matter of taste.

 (*Mesh -> 50, MaxPlotPoints -> 15*)

Mesh -> 50, MaxPlotPoints -> 15

 (*Mesh -> 50, MaxPlotPoints -> 25*)

Mesh -> 50, MaxPlotPoints -> 25

You can use the undocumented ReturnMeshObject method like @Simon Woods used here to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

Graphics`Mesh`MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken here looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

Edit: Tweaking parameters

Still no luck making splines work. It shouldn't seem to be as hard as it feels. Does anyone else have the required savoir-faire?

I wanted to add some pictures of how things look with different parameters. Increasing MaxPlotPoints too much tends to overfit the points, but that's a matter of taste.

 (*Mesh -> 50, MaxPlotPoints -> 15*)

Mesh -> 50, MaxPlotPoints -> 15

 (*Mesh -> 50, MaxPlotPoints -> 25*)

Mesh -> 50, MaxPlotPoints -> 25

Added new pictures of different parameters
Source Link
hYPotenuser
  • 542
  • 3
  • 12

This hardly feels like a complete solution, but I haven't got the reputation to contribute it as a comment or in chat. Here's what I've got:

You can use the undocumented ReturnMeshObject method like @Simon Woods used here to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

Graphics`Mesh`MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken here looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

Edit: Tweaking parameters

Still no luck making splines work. It shouldn't seem to be as hard as it feels. Does anyone else have the required savoir-faire?

I wanted to add some pictures of how things look with different parameters. Increasing MaxPlotPoints too much tends to overfit the points, but that's a matter of taste.

 (*Mesh -> 50, MaxPlotPoints -> 15*)

Mesh -> 50, MaxPlotPoints -> 15

 (*Mesh -> 50, MaxPlotPoints -> 25*)

Mesh -> 50, MaxPlotPoints -> 25

This hardly feels like a complete solution, but I haven't got the reputation to contribute it as a comment or in chat. Here's what I've got:

You can use the undocumented ReturnMeshObject method like @Simon Woods used here to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

Graphics`Mesh`MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken here looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

You can use the undocumented ReturnMeshObject method like @Simon Woods used here to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

Graphics`Mesh`MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken here looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

Edit: Tweaking parameters

Still no luck making splines work. It shouldn't seem to be as hard as it feels. Does anyone else have the required savoir-faire?

I wanted to add some pictures of how things look with different parameters. Increasing MaxPlotPoints too much tends to overfit the points, but that's a matter of taste.

 (*Mesh -> 50, MaxPlotPoints -> 15*)

Mesh -> 50, MaxPlotPoints -> 15

 (*Mesh -> 50, MaxPlotPoints -> 25*)

Mesh -> 50, MaxPlotPoints -> 25

Bounty Ended with 50 reputation awarded by g3kk0
typo: fixed context to "Graphics`Mesh`MeshInit[]"
Source Link
hYPotenuser
  • 542
  • 3
  • 12

This hardly feels like a complete solution, but I haven't got the reputation to contribute it as a comment or in chat. Here's what I've got:

You can use the undocumented ReturnMeshObject method like @Simon Woods used here to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

MeshInit[];Graphics`Mesh`MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken here looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

This hardly feels like a complete solution, but I haven't got the reputation to contribute it as a comment or in chat. Here's what I've got:

You can use the undocumented ReturnMeshObject method like @Simon Woods used here to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken here looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

This hardly feels like a complete solution, but I haven't got the reputation to contribute it as a comment or in chat. Here's what I've got:

You can use the undocumented ReturnMeshObject method like @Simon Woods used here to get ListSurfacePlot3D to do the smoothing for you. With this option added, it returns a GraphicsComplex ready to be used by DiscretizeGraphics.

Graphics`Mesh`MeshInit[]; 
mc = MeshCoordinates[surface]; 
extractedmesh = DiscretizeGraphics[
   First@ListSurfacePlot3D[mc, Method -> {"ReturnMeshObject" -> True}, 
     Mesh -> {15, 15, 15}, MaxPlotPoints -> 10]]

A new mesh created by hijacking ListSurfacePlot3D

This returns a new mesh with many more interpolated sample points. One can play with the plotting parameters or directly operate on the new region to get the surface to acceptable smoothness.

As for BSplineSurface et al., the approach taken here looks good, where @Belisarius chopped the datapoints into z-slices, interpolated, and used regular points from the interpolated curves to construct BSplineFunctions. I'm presently trying to replicate this and will add that if I succeed.

Source Link
hYPotenuser
  • 542
  • 3
  • 12
Loading