Coordinates from Graphics3D images
- To: mathgroup at smc.vnet.net
- Subject: [mg117424] Coordinates from Graphics3D images
- From: Russell Chipman <rchipman at optics.arizona.edu>
- Date: Fri, 18 Mar 2011 05:59:46 -0500 (EST)
Dear MathGroup I am searching for a way to find the {x,y,z} coordinates at every pixel in a Graphics3D view. I found a way to do this in ParametricPlot3D using ColorFunction, but Graphics3D does not accept ColorFunction as an option. To get the pixels at every coordinate ParametricPlot3D view, I encode the coordinates into an RGBColor image, then recover them from the three color planes. Because the arguments to RGBColor are 0 < x < 1, first I scale all coordinates into this range. Later I unscale them. Take the example function ff[u_,v_]:={(2+Cos[v])Cos[u]/\[Pi],(2+Cos[v])Sin[u]/\[Pi],Sin[v]} and the view ParametricPlot3D[ff[u,v],{u,0,2\[Pi]},{v,0,2 \[Pi]},ViewPoint->{4,-4,8}] My scaling and unscaling utilities need the maximum and minimum coordinates as inputs squeeze[x_,min_,max_]:=(x-min)/(max-min) unsqueeze[fx_,min_,max_]:=fx (max-min)+min Now I can get an list with each pixel's {x,y,z} as xyz=Map[unsqueeze[#,-1,1]&,ImageData[Image[ParametricPlot3D[ff[u,v],{u,0, 2\[Pi]},{v,-\[Pi]/2,\[Pi]/2}, ColorFunction->Function[{x,y,z},Glow[RGBColor[squeeze[x,-1,1],squeeze[y,-1, 1],squeeze[z,-1,1]]]], ColorFunctionScaling->False,ViewPoint->{4,-4,8},Mesh->False,Boxed->False,Axes->False,Background->Black]]],{2}]; Now, for example, you can print the pixel coordinates or view the points in 3D with a function like Graphics3D[Map[{Hue[(#[[3]]+1)/2],Point[#]} &,xyz[[ ;; ;;10, ;; ;;10,All]],{2}]] My question is if there is a method for Graphics3D which can recover pixel coordinates with a similar result? Thank you, Russell Chipman