Re: Questions about Graph output
- To: mathgroup at smc.vnet.net
- Subject: [mg49235] Re: Questions about Graph output
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Fri, 9 Jul 2004 02:26:06 -0400 (EDT)
- Organization: The University of Western Australia
- References: <200407070542.BAA25007@smc.vnet.net> <ccis7v$4c7$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <ccis7v$4c7$1 at smc.vnet.net>,
Yasvir Tesiram <yat at omrf.ouhsc.edu> wrote:
> Here is a quick modification,
>
> plt2 = ContourPlot[Sin[x y], {x, -1, 1}, {y, -1, 1}, Contours -> {-.5,
> .5}]
> plt3 = ListContourPlot[Table[x^2 + y^2 + Random[Real, {-0.2, 0.2}], {x,
> -2, 2,
> 0.1}, {y, -2, 2, 0.1}]];
>
>
> Cases[InputForm[plt2], ContourGraphics[x__] -> x][[1]]
> Cases[InputForm[plt3], ContourGraphics[x__] -> x][[1]]
This does not give the points on the contour. For example
plt = ContourPlot[x^2 + y^4, {x, -1, 1}, {y, -1, 1},
Contours -> {1/2, 3/4}]
Cases[InputForm[plt], ContourGraphics[x__] -> x][[1]] == plt[[1]]
so Cases is of no advantage here.
If you first coerce the ContourGraphics object into a Graphics object,
you can extract the points on each contour line using Cases:
contourlinepts = Cases[Graphics[plt], Line[x__] -> x, Infinity]
and, if you like, recover the (set of) contour lines as follows:
Show[Graphics[Line /@ contourlinepts], AspectRatio->Automatic];
> On Jul 7, 2004, at 12:42 AM, Daohua Song wrote:
>
> > Dear Friends,
> > (1)I saw several lines about how to save a graph in the forum
> > before,
> > but i can not catch the point. how does it work?
> > plt1 = Plot[Sin[x], {x, 0, 2Pi}];
> > mydata = Flatten[Cases[plt1, Line[x__] -> x, Infinity], 1];
> > Export["mydata.txt", mydata, "CSV"];
> >
> > (2) If i use implicit plot or contour plot, for example
> > draw f[x,y]==Constant. My question is :
> > how to save the curve to data points i can deal with(just like
> > (1)),
> > so i can work out the perimeter of this curve, area if it is closed
> > etc.
Note that, after conversion to polar coordinates (taking the first
contour),
polarpts = contourlinepts[[1]] /.
{(x_)?NumberQ, y_} :> {ArcTan[x, y], Sqrt[x^2 + y^2]}
you can use Interpolation to compute the perimeter and area. Here is the
radius as a function of angle:
r = Interpolation[Rest[polarpts]]
The minimum and maximum angles are
qmin = r[[1,1,1]]
qmax = r[[1,1,2]]
(Note that the interpolated curve is not closed -- this can and should
be fixed to obtain more accurate answers.)
Here is a parametric plot of the contour, to verify that it looks ok:
ParametricPlot[r[q] {Cos[q], Sin[q]}, {q, qmin, qmax},
AspectRatio -> Automatic]
We now compute the perimeter,
NIntegrate[Sqrt[r[q]^2 + r'[q]^2], {q, qmin, qmax}, PrecisionGoal -> 4]
and area
1/2 NIntegrate[r[q]^2, {q, qmin, qmax}, PrecisionGoal -> 4]
using the standard formulae.
Cheers,
Paul
--
Paul Abbott Phone: +61 8 9380 2734
School of Physics, M013 Fax: +61 8 9380 1014
The University of Western Australia (CRICOS Provider No 00126G)
35 Stirling Highway
Crawley WA 6009 mailto:paul at physics.uwa.edu.au
AUSTRALIA http://physics.uwa.edu.au/~paul
- References:
- Questions about Graph output
- From: Daohua Song <ds2081@columbia.edu>
- Questions about Graph output