MathGroup Archive 2003

[Date Index] [Thread Index] [Author Index]

Search the Archive

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
>
>



  • Prev by Date: Re: Mathematica, Windows 2000 and Service Pack 3 (The good, the bad and the ugly ?)
  • Next by Date: Method of line
  • Previous by thread: Re: spinning/rotating object with shadow
  • Next by thread: Re: spinning/rotating object with shadow