Re: Conditional Plots
- To: mathgroup at smc.vnet.net
- Subject: [mg50487] Re: Conditional Plots
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Tue, 7 Sep 2004 05:43:48 -0400 (EDT)
- Organization: Universitaet Leipzig
- References: <chblrt$rme$1@smc.vnet.net>
- Reply-to: kuska at informatik.uni-leipzig.de
- Sender: owner-wri-mathgroup at wolfram.com
Hi, something like Clear[BlendSplit] BlendSplit[{{p1_, f1_}, {_, f2_}}, _] /; Sign[f1] == Sign[f2] := {p1, f1} If[$VersionNumber < 5.0, BlendSplit[{{p1_, f1_}, {p2_, f2_}}, blend_] := Module[{func, t, sol, crossp}, func = blend @@ (p1*(1 - t) + p2*t); sol = t /. FindRoot[Evaluate[func], {t, {0, 1}}]; crossp = p1*(1 - sol) + p2*sol; Sequence @@ {{p1, f1}, {crossp, 0}, {p2, f2}} ], (* Else *) BlendSplit[{{p1_, f1_}, {p2_, f2_}}, blend_] := Module[{func, t, sol, crossp}, func = blend @@ (p1*(1 - t) + p2*t); sol = First[t /. FindRoot[Evaluate[func], {t, {0, 1}}]]; crossp = p1*(1 - sol) + p2*sol; Sequence @@ {{p1, f1}, {crossp, 0}, {p2, f2}} ] ] BlendPoly[Polygon[pnts_], blend_] := Module[{feval, p1, p2, addp1, i, n}, feval = {#, blend @@ #} & /@ pnts; feval = BlendSplit[##, blend] & /@ Transpose[{feval, RotateLeft[feval]}]; If[And @@ (Last[#] > 0 & /@ feval), Return[Polygon[pnts]], ]; p1 = First /@ Select[feval, Last[#] >= 0 &]; Polygon[p1] ] gg = Graphics3D[ Plot3D[Sin[(x + y)*y], {x, -2Pi, 2Pi}, {y, -2Pi, 2Pi}, PlotPoints -> 60]]; Show[Graphics3D[ Cases[gg, _Polygon, Infinity] /. p_Polygon :> BlendPoly[p, Function[{x, y, z}, - ( x^2 + y^2 - 4)]], PlotRange -> All] ] ?? Regards Jens matt wrote: > > Dear all, > > Í´m trying to produce a 3D plot with a 2D ploygon (within unit circle) > as its base. Equivalently, I want my 3D surface to sit inside (be > bounded by) a cylinder with n-gon cross section. > > How can I trim off the edges? > I´ve tried to use > If[ (condition), Plot, Blah] but it doesn´t seem to work.....