RE: Illumination or obfuscation?
- To: mathgroup at smc.vnet.net
- Subject: [mg43986] RE: [mg43943] Illumination or obfuscation?
- From: "David Park" <djmp at earthlink.net>
- Date: Thu, 16 Oct 2003 04:16:45 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Steven, It is not meant to illuminate but to be compact and efficient. The trouble with one-liners is that they are difficult to follow. But all you have to do is unravel them. Needs["Graphics`Arrow`"] Needs["Graphics`Colors`"] px = {1, 0}; py = {0, 1}; m[th_] := {{Cos[th], Sin[th]}, {-Sin[th], Cos[th]}} We can experiment and see what the routine does. It clearly draws two arrows. crossPoint[{1, 1}] {Arrow[{0.5, 1.}, {1.5, 1.}, HeadLength -> 0.015], Arrow[{1., 0.5}, {1., 1.5}, HeadLength -> 0.015]} Play around with the parameters in the following plot to see what it does Show[Graphics[ {crossPoint[pt = {1, 3}, 45°, 6], Red, AbsolutePointSize[5], Point[pt]}], AspectRatio -> Automatic, PlotRange -> All, Frame -> True]; Now we can unravel it... p = {1, 3}; th = \[Pi]/4; L = 6; Print["Initial vectors"] {px, py} Print["Stretching them"] L%% Print["Forming two symmetrical points for Arrow"] {-#, #} & /@ %% Print["Rotating and shifting the coordinates"] p + #.m[th] & /@ %% Print["Inserting each row into the Arrow command"] Arrow[##, HeadLength -> 0.015] & @@ # & /@ %% Only the last instruction is a little difficult. It is inserting two arguments into the Arrow primitive by apply the function to each row of the preceding matrix. David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Steven T. Hatton [mailto:hattons at globalsymmetry.com] To: mathgroup at smc.vnet.net To an experienced Mathematica user, is the following snippet clear, and easy to understand, or simply an exercise in obfuscation? Assume I already have px,py and m[] lying around. px = {1, 0}; py = {0, 1}; m[th_] := {{Cos[th], Sin[th]}, {-Sin[th], Cos[th]}} crossPoint[p_, th_:0, L_:0.5] := Arrow[##,HeadLength -> 0.015]&@@#&/@(p+#.m[th]&/@{-#, #}&/@(L{px, py}))