Re: plot3D over a triangular domain
- To: mathgroup at smc.vnet.net
- Subject: [mg58014] Re: [mg57984] plot3D over a triangular domain
- From: "David Park" <djmp at earthlink.net>
- Date: Thu, 16 Jun 2005 05:36:44 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Tun Myint, The DrawGraphics package at my web site below has two methods for making plots over triangular, or many other, domains. Needs["DrawGraphics`DrawingMaster`"] f[x_, y_] := Sin[2x]Cos[2y] The first method uses IteratorSubstitution to substitute a new variable w for y and then reparametrize the function so that w has fixed limits. IteratorSubstitution[{x, y, f[x, y]}, {y, (1/2)*(x - 1), (1/2)*(1 - x)}]//Simplify {{x, (-(1/2))*(-1 + 2*w)*(-1 + x), Cos[(-1 + 2*w)*(-1 + x)]* Sin[2*x]}, {w, 0, 1}} Notice that I obtained an expression for {x, y, f[x,y]}. We can then use ParametricPlot3D to directly plot the surface. ParametricPlot3D[{x, (-(1/2))*(-1 + 2*w)*(-1 + x), Cos[(-1 + 2*w)*(-1 + x)]*Sin[2*x]}, {x, -1, 1}, {w, 0, 1}, PlotPoints -> {25, 15}, ViewPoint -> {-0.836, -2.556, 2.054}, AxesLabel -> {x, y, ""}, ImageSize -> 450]; The following does the same plot using the DrawGraphics routines Draw3DItems, ParametricDraw3D, ColorMix and NeutralLighting. This allows us to color the surface and subdue the 'mesh' lines. Draw3DItems[{SurfaceColor[LightSteelBlue], EdgeForm[ColorMix[LightSteelBlue, Black][0.5]], ParametricDraw3D[{x, (-(1/2))*(-1 + 2*w)*(-1 + x), Cos[(-1 + 2*w)*(-1 + x)]*Sin[2*x]}, {x, -1, 1}, {w, 0, 1}, PlotPoints -> {25, 15}]}, ViewPoint -> {-2.278, -2.142, 1.294}, NeutralLighting[0.3, 0.5, 0.1, 5*Degree], BoxRatios -> {1, 1, 1}, BoxStyle -> Gray, PlotLabel -> f[x, y], Background -> Linen, ImageSize -> 450]; The second method is to use what I call a HollisGrid, devised by Selwyn Hollis. It will divide up any star-like or convex region into more or less equal area polygons. The region can be defined by vertices or by a curve. Here we use vertices that define your triangular region. I plot the grid so we can see what it looks like. vertices = {{-1, -1}, {1, 0}, {-1, 1}}; grid = HollisGrid[vertices, GridExtraSmoothing -> True]; Draw2D[ {Line /@ grid}, AspectRatio -> Automatic, Frame -> True, PlotRange -> {{-1, 1}, {-1, 1}}, Background -> Linen, ImageSize -> 350]; We can then raise the grid to a 3D surface. Draw3DItems[{SurfaceColor[Melon], EdgeForm[ColorMix[Melon, Black][0.4]], RaiseTo3D[f][Polygon /@ grid]}, NeutralLighting[0.3, 0.5, 0.1, 85*Degree], BoxRatios -> {1, 1, 1/2}, BoxStyle -> Gray, ViewPoint -> {-1.014, -2.149, 2.409}, PlotLabel -> f[x, y], Background -> ColorMix[Peacock, White][0.8], ImageSize -> 450]; David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Tun Myint Aung [mailto:TMA at nus.edu.sg] To: mathgroup at smc.vnet.net Hi All, I would like to plot a function over a isosceles triangular domain. I mean Plot3D[function, {x,-1,1},{y, -0.5+0.5x, 0.5-0.5x}]. But I got message that the limit must be real number. Anyone can help me? Best Regards, Tun Myint Aung Graduate Student National University of Singapore E1A #02-18 E-mail g0202015 at nus.edu.sg <mailto:g0202015 at nus.edu.sg>