Re: Re: spinning/rotating object with shadow
- To: mathgroup at smc.vnet.net
- Subject: [mg38954] Re: [mg38947] Re: spinning/rotating object with shadow
- From: Selwyn Hollis <selwynh at earthlink.net>
- Date: Wed, 22 Jan 2003 06:11:01 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Danke schoen Jens! That's just what I needed. After some refinement, here's the result as a QuickTime movie (140k): http://www.appliedsymbols.com/mma/icosaspin.mov (If WRI had the same mediocre standards as their competition, they'd feature this on their website.. :-) ---- Selwyn Hollis On Tuesday, January 21, 2003, at 07:39 AM, Jens-Peer Kuska wrote: > 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 > To: mathgroup at smc.vnet.net > Subject: [mg38954] [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 > To: mathgroup at smc.vnet.net >> Sent: Saturday, January 18, 2003 6:39 AM >> To: mathgroup at smc.vnet.net >> Subject: [mg38954] [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 > >