DMUG-Archiv 2005

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: externe skalare Volumendaten mit MVContourPlot3D

Hallo,

nun MathGL3d kann nur seine eigenen *.v3d Volumendaten lesen. Da der Quelltext von savevolume.w und arithcontext.w dabei ist kann man die Funktionen problemlos in eigene C++ Programme einbinden. Wer das nicht will, kann MVWriteVolumeData[] benutzen von Mathematica aus benutzen wenn MathGL3d geladen ist.

Von einer eigenen Version würde ich absehen, da das Format
einen adaptiven kontextabhängingen arithmetischen
Kompressionsalgorithmus benutzt.
Sowas selber zu schreiben ist nicht ganz einfach. Aber damit bekommt man bei verlustfreier Kompression Kompressionsraten von 6-10 hin, jedenfalls bei den CT und MR Daten die ich üblicherweise
habe.

Also entweder savevolume.h/cpp in das eigene Programm einbauen, oder MVWriteVolumeData[] von Mathematica aus benutzen. Auf jeden Fall sollte man bei der Bittiefe aufpassen, sonst
ist es nicht mehr verlustfrei.

Gruß
 Jens

PS: Man kann mir die *.dat Datei auch schicken und ich
konvertiere das dann ...




----- Original Message ----- From: <Gert.Lindner@XXXXXXX.de>
To: <demug@XXXXXXX.ch>
Sent: Thursday, April 28, 2005 11:54 AM
Subject: externe skalare Volumendaten mit MVContourPlot3D



Hallo,

ich habe von einem externen Programm einen Vektor von real-Werten mit der Dimension NX*NY*NZ in Form einer Datei 'fc.dat'. Es handelt sich hierbei um skalare Volumendaten, jedem Raumpunkt im Cube ist ein Wert zugeordnet.

Das Ziel ist es, ein Isosurface (zB. mit marching cube) zu generieren. Dies ist mir auch in MATLAB gelungen. Zur Veranschauung siehe Zeilen unten sowie
Bild.

Gerne möchte ich jetzt eine äquivalente Version für Mathematica
realisieren.

Dokumentation zu MathGL3d:
"MVListContourPlot3D[] it expects a three dimensional array of floating
point values"

"MVListContourPlot3D[volumedatafile,opts ] will make a three-dimensional contour plot of the data read form the volume data file volumedatafile"

Hierbei ist 'volumedatafile' natürlich nicht mein 'fc.dat'.

Frage:
Wie generiere ich aus meinen extern vorliegenden Daten den entsprechenden
Input für MathGL3d?

Mit freundlichen Gruessen
Gert Lindner


Referenzcode -MATLAB-

%----------------------------------------
% read fc.dat from an external program
%----------------------------------------

load fc.dat;

NX = 129; NY = 129; NZ = 131;
v = zeros(NX,NY,NZ);

% source VECTOR fc.dat
% value_pairs(u,v) = NX * NY * NZ
% destination Matrix mit v(NX,NY,NZ)


% Volume Visualization
%----------------------------------------
% Skalar- Volumendaten
%----------------------------------------
% Scalar volume data contains single values for each point

% To select the isovalue, determine the range of values in the volume data
min(v(:));
max(v(:));

% generate a 3-D arrays that can be used to evaluate functions of three
% variables and 3-D volumetric plots.

[X,Y,Z] = meshgrid(1:NX,1:NY,1:NZ);

p = patch(isosurface(X,Y,Z,v,0.4));
isonormals(X,Y,Z,v,p);

set(p,'FaceColor','g','EdgeColor','none');
daspect([1 1 1])
view(3); axis tight; box on
camlight left;
set(gcf,'Renderer','zbuffer'); lighting phong

Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html