Re: spinning/rotating object with shadow
- To: mathgroup at smc.vnet.net
- Subject: [mg38947] Re: spinning/rotating object with shadow
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Tue, 21 Jan 2003 07:39:19 -0500 (EST)
- Organization: Universitaet Leipzig
- References: <b0g2ah$mrt$1@smc.vnet.net>
- Reply-to: kuska at informatik.uni-leipzig.de
- Sender: owner-wri-mathgroup at wolfram.com
Hi, a) computing the true shadows of the 3 light sources would requite the construction of the shadow volumes and take an half hour per frame b) fake a single shadow is easy with Needs["Graphics`Polyhedra`"] Needs["Graphics`Shapes`"] toShadow[gray_?MatrixQ, {x1_, x2_}, {y1_, y2_}, z_] := Module[{n, m, dx, dy, points, cgraph}, {m, n} = Dimensions[gray]; dx = (x2 - x1)/(n); dy = (y2 - y1)/(m); points = Table[{x1 + dx*i, y1 + dy*j, z}, {j, 0, m}, {i, 0, n}]; poly = Drop [#, -1] & /@ Drop[Transpose[{points, RotateRight[points], RotateLeft /@ RotateRight[points], RotateLeft /@ points}, {3, 1, 2}], -1]; {EdgeForm[], Transpose[{Map[SurfaceColor[GrayLevel[#]] &, gray, {2}], Map[Polygon, poly, {2}]}, {3, 1, 2}]} ] makeShadow[t_, opts___?OptionQ] := Module[{sh}, sh = DensityPlot[ 1 - Exp[-(3 + Sin[t/2])*(x^2 + y^2)], {x, -2, 2}, {y, -2, 2}, DisplayFunction -> Identity, opts]; toShadow[sh[[1]], {-2, 2}, {-2, 2}, -2] ] obj = Table[RotateShape[Icosahedron[], t, t/2, t/3], {t, 0, 8, 1/10}]; MapIndexed[ Show[Graphics3D[{makeShadow[First[#2], PlotPoints -> 30], #1}, Boxed -> False, PlotRange -> {{-2, 2}, {-2, 2}, {-2, 2}}]] &, obj]; but that is *not* the shadow that the three colored light sources would produce -- that would be much more expensive. If some one else would like to have (hard) shadows I can include it into MathGL3d -- just send a mail about it to me. Regards Jens Selwyn Hollis wrote: > > I'm interestied in using Mathematica to do something similar to this: > > http://www.mapleapps.com/powertools/logos/appess3.gif > > Does anyone have a guess at what kind of rotation is being used? > And how one might get a similar shadow effect? (Without resorting to a > different rendering engine.) > > Thanks, > > Selwyn From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com> To: mathgroup at smc.vnet.net Subject: [mg38947] RE: [mg38909] Prefix[f[x]], why is it not working >-----Original Message----- >From: Ashraf El Ansary [mailto:Elansary at btopenworld.com] To: mathgroup at smc.vnet.net >Sent: Saturday, January 18, 2003 6:39 AM >To: mathgroup at smc.vnet.net >Subject: [mg38947] [mg38909] Prefix[f[x]], why is it not working > > >Hi all, >Does anyone why f@a_=2 a gives a proper answer for f[1] >and not in the case of Prefix[s[a_]]= 2 a eventhough that >Prefix[s[a_]]= >f@a_??? > >Thanks >In[1]:= >f@a_=2 a >f[1] >Out[1]= >2 a >Out[2]= >2 >In[3]:= >Prefix[s[a_]] >Prefix[s[a_]]=2 a >s[1] >Out[3]= >s@a_ >Set::write: Tag Prefix in s@a_ is Protected. >Out[4]= >2 a >Out[5]= >s[1] > > > Ashraf, the question is: what behaviour did you expect? An answer to that might solve your problem. First, Prefix[s[a_]] is *not* the same as f@a_ In[1]:= f@a_ := 2 a In[2]:= ?f Global`f f[a_] := 2 a In[3]:= f[1] Out[3]= 2 Compare this to In[4]:= Prefix[s[a_]] Out[4]= s@a_ In[5]:= % // FullForm Out[5]//FullForm= Prefix[s[Pattern[a, Blank[]]]] So Prefix is a wrapper for printing purposes (only). Such you cannot make definitions for it (as it is protected), but also, it is a special form not submitted to the standard evaluation sequence, see: In[7]:= Prefix[s[aaa___]] ^= s[aaa] Out[7]= s[aaa] In[8]:= s[a_] := 2 a In[9]:= ?s Global`s Prefix[s[aaa___]] ^= s[aaa] s[a_] := 2 a In[10]:= Prefix[s[2]] Out[10]= Prefix[4] So even Upvalues won't work. You may however do In[12]:= Prefix[Unevaluated[s[2]]] Out[12]= 4 The very question, however, is whether this is what you intended, or say, what did you want to achieve at all? -- Hartmut Wolf