1
$\begingroup$

See the link to plot at the bottom of this post, it is a function of the spherical coordinates theta and phi. It is generated by MatrixPlot of an Array of data. I would like to plot this onto a sphere of arbitrary radius. Any ideas?

Here's the code used to generate the plot.

  lp=1;
  a = 1;
  e1 = a {-Sqrt[3]*lp/2 + Sqrt[3]/2, lp/2 - 3/2};
  e2 = a {-Sqrt[3]*lp/2 + Sqrt[3], lp/2};
  e3 = a*lp {-Sqrt[3]/2, 1/2};

  phi1 = ArcTan[e1[[1]], e1[[2]]] - phi0 + Pi/2;
  phi2 = ArcTan[e2[[1]], e2[[2]]] - phi0 + Pi/2;
  phi3 = ArcTan[e3[[1]], e3[[2]]] - phi0 + Pi/2;

  c1 = (1 - 3*(Sin[theta0])^2*(Cos[phi1])^2)/(Norm[e1]^3);
  c2 = (1 - 3*(Sin[theta0])^2*(Cos[phi2])^2)/(Norm[e2]^3);
  c3 = (1 - 3*(Sin[theta0])^2*(Cos[phi3])^2)/(Norm[e3]^3);

  Clear[phi0];
  Clear[theta0];
  Clear[colorMat];
  count1 = 0;
  count2 = 0;
  step = 0.003;
  nstepsPhi = Floor[(2*Pi - 0)/step + 1];
  nstepsTheta = Floor[(Pi - 0)/step + 1];
  colorMat = ConstantArray[0, {nstepsPhi, nstepsTheta}];
  Do[
    count1 = count1 + 1;
    count2 = 0;
    Do[
     count2 = count2 + 1;
     thing = (c1^2 - c2^2 - c3^2)/(2*c2*c3);
     If[thing>=0 && thing<=1, colorMat[[count2, count1]] = 0.1 , 
      colorMat[[count2, count1]] = 1]
     , {phi0, 0, 2*Pi, step}]
    , {theta0, 0, Pi, step}]


     MatrixPlot[colorMat]

Solution

First, MatrixPlot includes a small border around the image which appears on the final sphere. Even using the option PlotRangePadding->None, this appeared. So, instead let's use Image to create the image.

img = Image[Map[If[# == 1, {0.94, 0.49, 0.02}, {0.87, 0.77, 0.43}] &, 
  Transpose[colorMat], {2}]];

In this bit of code, the If[#==1, rgb1,rgb2]& business can be interpreted as follows: The colorMat is a 0-1 matrix and we want to change each element into an RGB triple. If the # is 1, we change to rgb1 and If the # is 0, we change it to rgb2. The # / & business refers to a pure function, as you can read about in the Wolfram documentation.

Now, let's map that onto the sphere.

ParametricPlot3D[{Cos[theta] Sin[phi], Sin[theta] Sin[phi], Cos[phi]},
  {theta, -Pi, Pi}, {phi, 0, Pi}, Mesh -> None, PlotPoints -> 101,
  Boxed -> False, PlotStyle -> Texture[img],
  Lighting -> "Neutral", Axes -> False]

enter image description here

$\endgroup$
  • $\begingroup$ It appears that your image was generated with Mathematica. Do you have the code? Regardless, this type of thing has been discussed before. You might be able to adapt the techniques listed here: mathematica.stackexchange.com/questions/15047/… $\endgroup$ – Mark McClure Mar 12 '13 at 16:57
  • $\begingroup$ If you search this site, you'll find several similar questions. Here's one: mathematica.stackexchange.com/questions/52/… $\endgroup$ – Szabolcs Mar 12 '13 at 17:00
  • $\begingroup$ Yes. I'll add it now :) just had a look at that link and it boggles my mind a bit but i'll see what sense i can make of it. thanks for the reply. $\endgroup$ – Tom Mar 12 '13 at 17:04
  • $\begingroup$ Um, how do I add mathematica code so it looks pretty like in all the other questions? =S $\endgroup$ – Tom Mar 12 '13 at 17:09
  • $\begingroup$ @ThomasJebbSturges Just indent the code 4 spaces. $\endgroup$ – Mark McClure Mar 12 '13 at 17:11

Browse other questions tagged or ask your own question.