28 Jul, 2009 von Raimar Wagner 0
Vektorfeldvisualisierung durch Flow Streams
In einem vorherigen Artikel hatte ich bereits über Visualisierungen von Vektorfeldern geschrieben, hier werden wir ein identisches Vektorfeld nutzen. Unser Beispielfeld ist wieder:
Wir setzen wieder gridPoints
, glyPoints
als gegeben vorraus. Des weiteren können wir auch wieder ein Magnituden-Array mag
und ein Beschleunigungs-3Tupel-Array velocity
als gegeben vorraussetzen:
vtkPoints gridPoints vtkPoints glyPoints vtkFloatArray velocity velocity SetNumberOfComponents 3 velocity SetNumberOfValues [expr $x_extend*$y_extend*$z_extend] vtkFloatArray mag mag SetNumberOfComponents 1 mag SetNumberOfValues [expr $x_extend*$y_extend*$z_extend]
Im nächsten Schritt erzeugen wir wieder aus den Punkten und den zwei Arrays ein strukturiertes Gitter.
vtkStructuredGrid sgrid sgrid SetDimensions $x_extend $y_extend $z_extend sgrid SetPoints gridPoints [sgrid GetPointData] SetVectors velocity [sgrid GetPointData] SetScalars mag
Damit wäre die Definition des Feldes abgeschlossen, als erstes müssen die die Streams einen Startpunkt bekommen. In unserem Fall nehmen wir eine Linie auf der die Streams starten sollen.
vtkLineSource rake rake SetPoint1 1 9 9 rake SetPoint2 9 9 9 rake SetResolution 200
Der vtkStreamTracer
wird im nächsten Schritt die Stromlinien erzeugen die dann mit einem vtkTubeFilter
dargestellt werden.
vtkRungeKutta4 integ vtkStreamTracer streamer streamer SetInput sgrid streamer SetSourceConnection [rake GetOutputPort] streamer SetMaximumPropagation 5000 streamer SetMaximumPropagationUnitToTimeUnit streamer SetInitialIntegrationStep 0.005 streamer SetInitialIntegrationStepUnitToCellLengthUnit streamer SetIntegrationDirectionToBoth streamer SetIntegrator integ vtkTubeFilter streamTube streamTube SetInputConnection [streamer GetOutputPort] streamTube SetRadius 0.1 streamTube SetNumberOfSides 12
Im letzten Schritt muss nurnoch alles in Mapper und Aktoren gepackt werden (siehe frühere Posts) und wir bekommen das folgende Bild: