Re: color space curve
- To: mathgroup at smc.vnet.net
- Subject: [mg8304] Re: [mg8220] color space curve
- From: jpk at max.mpae.gwdg.de
- Date: Sun, 24 Aug 1997 04:46:49 -0400
- Sender: owner-wri-mathgroup at wolfram.com
--b7c_7187-2458_861-3ae1_4dbb
Content-MD5: IZHn5262wbdnQQB77lQhlw==
>
> I want to plot a three-dimensional space curve (with ParametricPlot3D)
> but in color and according to X and Y values (not Z values),
> to give the sense of depth.
In my (german) book about Mathematica & C (ISBN 3-540-61489-3) a DepthCue
function is implemented.
I appen the relevant Mathematica package.
It works only for { Line[_], Line[_],..} and will not break up
lines with more than 2 points into shorter ones.
The option ColorFunction allows You to set colors with respect to the
distance from the users ViewPoint. At least You may be able to change the
code for You coloring due to x-y.
Hope that helps
Jens
--b7c_7187-2458_861-3ae1_4dbb
Content-Description: DepthCue.m
Content-MD5: WyjO08RE977mJl3mv+MbQQ==
BeginPackage["DepthCue`"]=0D
=0D
UsersViewPoint::usage=3D=0D
"UsersViewPoint[graph3d] of a Graphics3D object returns the position=0D
of the view point in modell coordinates rather than in world =
coordinates."=0D
=0D
DepthCuedLines::usage=3D=0D
"DepthCuedLines[graph3d] colors the lines in a Graphics3D object with=0D
respect to the distance of the line center to the view point. The =0D
color function used can be given by the ColorFunction option. The=0D
default ColorFunction is GrayLevel."=0D
=0D
Begin["`Private`"]=0D
=0D
UsersViewPoint[gr_Graphics3D]:=3D=0D
Module[{boundb,rbox,vp,scale,ctr},=0D
boundb=3DFullOptions[gr,PlotRange];=0D
rbox=3DFullOptions[gr,BoxRatios];=0D
vp=3DFullOptions[gr,ViewPoint];=0D
(* calculate the scaling *)=0D
scale=3DMax[rbox] ((Last[#]-First[#] ) & /@ boundb)/rbox;=0D
(* calculate the center *)=0D
ctr=3D ((First[#] + Last[#]) & /@ boundb)/2;=0D
vp*scale+ctr=0D
]=0D
=0D
Options[DepthCuedLines]:=3D{ColorFunction->(GrayLevel[1.0-#] &)}=0D
=0D
DepthCuedLines[gr_Graphics3D,opts___]:=3D=0D
Module[{graph,uvp,lines,mind,maxd,delta,colorfun},=0D
colorfun=3DColorFunction /. {opts} /. Options[DepthCuedLines];=0D
(* split the lines into segments *)=0D
graph =3D gr //. =0D
Line[{a_,b_,c__}] :> (Sequence @@ {Line[{a,b}],Line[{b,c}]}); =0D
uvp=3DUsersViewPoint[gr];=0D
lines=3DSelect[Flatten[First[graph]],Head[#]=3D=3D=3DLine &];=0D
(* get the distance range of the lines *) =0D
{mind,maxd}=3D{Max [#],Min[#]} & @ =0D
Flatten[(lines /. Line[{a_,b_}] :> (d=3D((a+b)/2-uvp); =
Sqrt[d.d]))];=0D
delta=3Dmaxd-mind;=0D
graph /. Line[{a_,b_}] :> =0D
(d=3D((a+b)/2-uvp); =0D
d=3D(Sqrt[d.d]-mind)/delta;=0D
{colorfun[d],Line[{a,b}]})=0D
]=0D
End[]=0D
EndPackage[]=0D
--b7c_7187-2458_861-3ae1_4dbb--