Re: Arrow HeadScaling?
- To: mathgroup at smc.vnet.net
- Subject: [mg59078] Re: [mg59034] Arrow HeadScaling?
- From: "David Park" <djmp at earthlink.net>
- Date: Thu, 28 Jul 2005 02:26:54 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Yes, it is poorly explained. Here is some code that you can experiment with. Needs["Graphics`Arrow`"] With Relative scaling. This specifies the length of the arrowhead in terms of the length of the arrow. Experiment, say by varying the length from 0.1 to 1 and try various imagesizes and aspect ratios. HeadCenter is also useful if you want a barbed instead of a triangular arrowhead. HeadCenter would generally be between 0 and 1. With[ {theta = Pi/4, aspect = Automatic, imagesize = 300, scaling = Relative, center = 0.5, length = 0.2}, Show[Graphics[ {Arrow[{5, 5}, {5, 5} + 3{Re[Exp[I theta]], Im[Exp[I theta]]}, HeadScaling -> scaling, HeadLength -> length, HeadCenter -> center], AbsolutePointSize[5], Point[{5, 5}]}], AspectRatio -> aspect, PlotRange -> {{-0.02, 10.02}, {-0.02, 10.02}}, Frame -> True, ImageSize -> imagesize]]; With Automatic scaling. The length of the arrowhead is specified in terms of the width of the plot. (The height will have no effect.) With[ {theta = Pi/4, aspect = 1/GoldenRatio, imagesize = 300, scaling = Automatic, center = 0.5, length = 0.1}, Show[Graphics[ {Arrow[{5, 5}, {5, 5} + 3{Re[Exp[I theta]], Im[Exp[I theta]]}, HeadScaling -> scaling, HeadLength -> length, HeadCenter -> center], AbsolutePointSize[5], Point[{5, 5}]}], AspectRatio -> aspect, PlotRange -> {{-0.02, 10.02}, {-0.02, 10.02}}, Frame -> True, ImageSize -> imagesize]]; With Absolute scaling the length of the arrowhead is specified in printer points (1/72 inch. But I don't know if this is always transferred exactly to the screen or to a printed page.) Experiment with changing the imagesize and you will see that the arrowhead stays the same size, even though the length of the arrow on the screen changes. With[ {theta = Pi/4, aspect = Automatic, imagesize = 300, scaling = Absolute, center = 0.5, length = 20}, Show[Graphics[ {Arrow[{5, 5}, {5, 5} + 3{Re[Exp[I theta]], Im[Exp[I theta]]}, HeadScaling -> scaling, HeadLength -> length, HeadCenter -> center], AbsolutePointSize[5], Point[{5, 5}]}], AspectRatio -> aspect, PlotRange -> {{-0.02, 10.02}, {-0.02, 10.02}}, Frame -> True, ImageSize -> imagesize]]; When I look at the arrow at 45 degrees it seems that the arrowhead is not quite correctly aligned. Also, there is a bug in the Arrow routine such that if you try to plot arrows that are quite short compared to machine precision, say on a plot that has overall small scale, then the routine falls apart. Fortunately, users seldom try to plot such small arrows. David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: AES [mailto:siegman at stanford.edu] To: mathgroup at smc.vnet.net I know my brainpower is slowly fading with increasing years, but I've now read the Help message for the Arrow graphics primitive -- specifically, the paragraph immediately following the table of Options for the Arrow primitive (also on p. 140 of the Mathematica 3.0 Standard Add-on Packages) -- at least three times, and also done a few experiments; and I'll be damned if I can grasp what it says about the HeadScaling parameter and the Automatic and Absolute options for that parameter. My only concern is controlling the size of the arrowheads, and having them keep the same relative size if I change the ImageSize or AspectRatio of the graphic in which they're imbedded; no special shapes or the like. Can anyone translate this paragraph into English? (And thanks, I know there are some carefully crafted third-party Arrow packages out there; but I'd just prefer to stick with Mathematica's built-in primitive.)