I would like to apply a matrix plot to the surface of a 3D cylinder. The matrix plot is the output from a custom cellular-automata, and it would be nice to see the lefthand side of the plot connected to the righthand side.
Edit
This is the solution I ended up using:
mrt =
ArrayPlot[CellularAutomaton[30, RandomInteger[{0, 1}, 100], 30],
Frame -> False,
ImagePadding -> 0,
PlotRangePadding -> 0];
ParametricPlot3D[{Sin[t]/2Pi, Cos[t]/2Pi,u},{t,0,2Pi},{u,0,2},
Boxed -> False,
Axes -> False,
PerformanceGoal -> "Quality",
ImageSize -> {300, 300},
Lighting -> "Neutral",
PlotStyle -> Texture[mrt],
Mesh -> None,
ViewPoint -> {0, 3, 1}]
Answer
You can use the raster image produced by MatrixPlot
as Texture
directive if you construct Cylinder
using ParametricPlot3D
or ContourPlot3D
.
mplt = MatrixPlot[Table[Sin[x y/100], {x, -10, 10}, {y, -10, 10}],
ColorFunction -> "Rainbow", Frame -> False, ImagePadding -> 0,
PlotRangePadding -> 0]
ParametricPlot3D
ParametricPlot3D[{Cos[theta], Sin[theta], rho}, {theta, -Pi, Pi}, {rho, 0, 2},
PlotStyle -> Directive[Specularity[White, 30], Texture[mplt]],
TextureCoordinateFunction -> ({#1, #3} &), Lighting -> "Neutral",
Mesh -> None, PlotRange -> All, TextureCoordinateScaling -> True]
Update: To wrap the matrix plot around the cylinder
Change the setting for TextureCoordinateFunction
to
TextureCoordinateFunction -> ({#4, #5} &) (*Thanks: @Rahul *)
Or leave out the TextureCoordinate...
options out and use PlotStyle -> Texture[mplt]
(thanks: @DROP TABLE):
ParametricPlot3D[{Cos[theta], Sin[theta], rho}, {theta, -Pi, Pi}, {rho, 0, 2},
PlotStyle -> Texture[mplt], Lighting -> "Neutral", Mesh -> None,
PlotRange -> All, ImageSize -> 400]
ContourPlot3D
ContourPlot3D[x^2 + y^2 == 1, {x, -1, 1}, {y, -1, 1}, {z, -1, 1},
Mesh -> None, Lighting -> "Neutral",
ContourStyle -> Directive[Specularity[White, 30], Texture[mplt]],
TextureCoordinateFunction -> ({#1, #3} &)]
Related:
How to Texturize Disk/Circle/Rectangle
Heike's answer MathGroup: Texture on Disk in Mathematica 8
Wraping a Rectangle to Form a Cylinder
ColorFunction and ColorFunctionScaling Issue with ParametricPLot3D
Comments
Post a Comment