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