Re: 3D Plot of frequency data
- To: mathgroup at smc.vnet.net
- Subject: [mg62723] Re: 3D Plot of frequency data
- From: dh <dh at metrohm.ch>
- Date: Fri, 2 Dec 2005 05:53:35 -0500 (EST)
- References: <dmjrcm$5ud$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi Leigh, a linear transformation that transforms v1 = {0, 0, 0}; v2 = {1, 0, 0}; v3 = {0, 1, 0}; v4 = {0, 0, 1}; into a regular tetrahedron centered at {0,0,0}: w1 = {0, 0, Sqrt[2/3]}; w2 = {1/2, -1/Sqrt[12], 0}; w3 = {-1/2, -1/Sqrt[12], 0}; w4 = {0, 1/Sqrt[3], 0}; is: lintrans[v_]:=Module[{ mat={{1/2, -1/2, 0}, {-1/(2*Sqrt[3]), -1/(2*Sqrt[3]), 1/Sqrt[3]}, {-Sqrt[2/3], -Sqrt[2/3], -Sqrt[2/3]}}, tr={0, 0, Sqrt[2/3]} }, mat.v+tr ] Concerning the surface, the implicite equation can be made explicite by solving for x3 (for x1 and x2 !=0): x3= (x1 - x1^2 - x1*x2)/(x1 + x2) the parametrized (by x1,x2) surface in old coordinates are(note that x1=x2= 0 is excluded): {x1, x2, (x1 - x1^2 - x1*x2)/(x1 + x2)} and in new coordinates: lintrans[ {x1, x2, (x1 - x1^2 - x1*x2)/(x1 + x2)} ] we can plot this by: g1=ParametricPlot3D[lintrans[ {x1, x2, (x1 - x1^2 - x1*x2)/(x1 + x2)} ],{x1, 0.001, 1}, {x2, 0.001, 1}] To display the tetrahedron by a wire frame, we change the definition of "thedrahedron": tetrahedron[{v1_, v2_, v3_, v4_}] := {Line[{v1, v2, v3, v1}], Line[{v1, v2, v4, v1}], Line[{v1, v4, v3, v1}], Line[{v4, v2, v3, v1}]}; the tetraedron canthen be plotted by: g2 = Graphics3D[{Thickness[0.01], tetrahedron[lintrans /@ {{0, 0, 0}, {1, 0, 0} , {0, 1, 0}, {0, 0, 1}}] }]; and we may combine the plots by: Show[g1, g2, PlotRange -> {0, 1}] have fun, Daniel leigh pascoe wrote: > Dear Mathgroup, > > I would like to do a 3D plot of several functions where the coordinates > (x, y,z) are subject to the restrictions > > x>=0 > y>=0 > z>=0 > x+y+z<=1 > > These restrictions arise naturally when considering the frequencies of > four types in a population. The fourth frequency, subject to similar > restrictions, is just 1-x-y-z. > > I believe this range of possible values defines a tetrahedron with > vertices (0,0,0),(1,0,0), (0,1,0),(0,0,1) that could be drawn using the > code recently posted by David Park. i.e. > > v1 = {0, 0, 0}; > v2 = {1, 0, 0}; > v3 = {0, 1, 0}; > v4 = {0, 0, 1}; > > tetrahedron[{v1_, v2_, v3_, v4_}] := {Polygon[{v1, v2, v3}], Polygon[{v1, v2, v4}], Polygon[{v1, v4, v3}], Polygon[{v4, v2, v3}]}; > > Show[Graphics3D[tetrahedron[{v1, v2, v3, v4}]]]; > > If possible (for symmetry) I would like to apply a shear function (say > to the y and z directions) so that the resulting tetrahedron would be > regular. A point (x1,x2,x3) could then be plotted by measuring along > each of the sides of the tetrahedron corresponding to the original axes > and finding the intersection point of the perpendiculars. I imagine a > transformation can be defined to convert the (x1,x2,x3) or (x',y',z') > coordinates to the orthogonal (x,y,z) system if this is necessary. > > Now to the functions. As first step I would like to plot within this > regular tetrahedron the implicit function > > x2 x3-x1(1-x1-x2-x3)=0 > > This is a twisted surface that would have edges corresponding to the axes > x'=y'=0 (z' axis) and > x'=z'=0 (y' axis) > and the tetrahedral sides defined by > 1-x'-y'-z'=0=y' and > 1-x'-y'-z'=0=z' > > For easy visualisation the tetrahedron should be a wireframe and the > function surface should be shown as a grid mesh. I would then like to > add some individual points, both on and off the surface and ultimately > some trajectories (lines) defined by a series of points. The ability to > visualise points and functions in this manner would be very useful when > considering problems related to frequency data. Can anyone help me to do > this in Mathematica? > > Thanks > > Leigh > > > >