Re: Venn diagrams?
- To: mathgroup at smc.vnet.net
- Subject: [mg118273] Re: Venn diagrams?
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Tue, 19 Apr 2011 06:58:07 -0400 (EDT)
This is 700 times faster at my machine: Clear[area, d, r1, r2, venn] area[r1_, r2_, d_] = -(1/2) Sqrt[(d + r1 - r2) (d - r1 + r2) (-d + r1 + r2) (d + r1 + r2)] + r1^2 ArcCos[(d^2 + r1^2 - r2^2)/(2 d r1)] + r2^2 ArcCos[(d^2 - r1^2 + r2^2)/(2 d r2)]; venn[area1_?Positive, area2_?Positive, overlap_?NonNegative] /; overlap <= Min[area1, area2] := Module[{x2, r1 = Sqrt[area1/Pi], r2 = Sqrt[area2/Pi], d}, d = Which[overlap == 0, r1 + r2, overlap == Min[area1, area2], r1 - r2, True, Chop[d /. FindRoot[area[r1, r2, d] == overlap, {d, r1}]]]; Graphics[{Red, Circle[{0, 0}, r1], Blue, Circle[{d, 0}, r2]}]] venn[5, 3, 1] http://mathworld.wolfram.com/Circle-CircleIntersection.html Bobby On Mon, 18 Apr 2011 05:50:23 -0500, Bob Hanlon <hanlonr at cox.net> wrote: > > venn[ > area1_?Positive, > area2_?Positive, > overlap_?NonNegative ] /; > overlap <= Min[area1, area2] := > Module[{area, m, x2, > r1 = Sqrt[area1/Pi], > r2 = Sqrt[area2/Pi]}, > m = Max[r1, r2]; > area[x0_?NumericQ] := > NIntegrate[ > Boole[x^2 + y^2 <= r1^2 && > (x0 - x)^2 + y^2 <= r2^2], > {x, -r1, r1}, {y, -m, m}]; > x2 = If[overlap == 0, > r1 + r2, > If[overlap == Min[area1, area2], > r1 - r2, > Chop[x0 /. > FindRoot[area[x0] == overlap, > {x0, r1}]]]]; > Graphics[{ > Red, Circle[{0, 0}, r1], > Blue, Circle[{x2, 0}, r2]}]] > > venn[5, 3, 1] > > > Bob Hanlon > > ---- dantimatter <google at dantimatter.com> wrote: > > ============= > > Hey Everyone, > Is there a nice and easy way to make pretty Venn diagrams with > Mathematica, where the areas of the circles and intersecting regions > are to scale? > Cheers > Dan > > > -- DrMajorBob at yahoo.com