1234567891011121314151617181920212223242526272829303132333435 |
- """Streamlines originating from a set of seed points in space
- subjected to a vectorial field defined on a small set of points."""
- from vedo import *
- import pandas as pd
- data = "https://raw.githubusercontent.com/plotly/datasets/master/vortex.csv"
- df = pd.read_csv(data)
- pts = np.c_[df['x'], df['y'], df['z']]
- wind = np.c_[df['u'], df['v'], df['w']]
- vpts = Points(pts, r=10)
- vpts.pointdata["Wind"] = wind
- # Convert points to a volume to create a domain for the streamlines
- vol = vpts.tovolume(kernel='shepard', n=4, dims=(20,20,20))
- vol_pts = vol.coordinates
- iwind = vol.pointdata["Wind"] # interpolated wind
- arrs = Arrows(vol_pts, vol_pts + iwind*0.5, alpha=0.2)
- # Subsample the points to use as seed points
- seeds = vpts.clone().subsample(0.2)
- # Compute stream lines with Runge-Kutta integration
- # vol.pointdata.select("Wind") # in case there are other vectors
- streamlines = vol.compute_streamlines(seeds.points)
- streamlines.pointdata["wind_intensity"] = mag(streamlines.pointdata["Wind"])
- streamlines.cmap("Reds").add_scalarbar()
- print(streamlines)
- show(seeds, arrs, streamlines, __doc__, axes=1, viewup='z').close()
- # Create a tube around the streamlines
- streamtubes = Tubes(streamlines, r=0.01, vary_radius_by_scalar=True)
- streamtubes.cmap("Reds").add_scalarbar()
- print(streamtubes)
- show(streamtubes, __doc__, axes=1, viewup='z').close()
|