MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Coloring a ListSurfacePlot3D with a n x 4 matrix

  • To: mathgroup at smc.vnet.net
  • Subject: [mg118287] Re: Coloring a ListSurfacePlot3D with a n x 4 matrix
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Wed, 20 Apr 2011 04:28:12 -0400 (EDT)

The interpolation fails because the z dimension of the array is not regular. However, as you state the problem, the z component is not independent and is determined wholly by x and y. Consequently, you can ignore the z component in determining the color.

points = Flatten[Table[
    {x, y, 1 - x - y, (x - 1/2)^2 + (y - 1/2)^2 + RandomReal[]},
    {x, 0, 1, 1/4}, {y, 0, 1, 1/4}], 1];

knots = Most /@ points;

intF = Interpolation[Thread[{Most /@ knots, Last /@ points}]];

colorF = Function[{x, y, z}, ColorData["GreenBrownTerrain"]@intF[x, y]];

ListSurfacePlot3D[knots, ColorFunction -> colorF]


Bob Hanlon

---- David Kahle <david.kahle at gmail.com> wrote: 

=============
Hi Bob!

Thanks for the reply.

Unfortunately, since I only have the points in the matrix I don't know  
what the underlying function is.  I tried to get around the problem  
with Interpolation, but Interpolation (for some reason) wasn't able to  
make a function that I could then pass to ListSurfacePlot3D.  So I  
tried with BSplineFunction, but that didn't work either but for a  
different reason (mis-specification problem?).

Ideas?  Code below.

Thanks again
david.



points = Flatten[
    Table[{x, y, 1 - x - y, (x - 1/2)^2 + (y - 1/2)^2 + RandomReal[]},  
{x, 0,
      1, 1/4}, {y, 0, 1, 1/4}], 1];

knots = Most /@ points;

values = Last /@ points;

list4interpolation = Table[{knots[[k]], values[[k]]}, {k,  
Length[knots]}];

intF = Interpolation[list4interpolation] (* fails *)



f = BSplineFunction[points];

colorF = Function[{x, y, z}, ColorData["GreenBrownTerrain"]@f[x, y, z]];

ListSurfacePlot3D[knots, ColorFunction -> colorF]


On Apr 18, 2011, at 5:37 AM, Bob Hanlon wrote:

>
> The ColorFunction must be defined for all values of {x,y,z} not just  
> discrete values.
>
> points = Flatten[Table[
>    {x, y, 1 - x - y, (x - 1/2)^2 + (y - 1/2)^2},
>    {x, 0, 1, 1/4}, {y, 0, 1, 1/4}], 1];
>
> knots = Most /@ points;
>
> colorF = Function[{x, y, z},
>   ColorData["GreenBrownTerrain"][
>    (x - 1/2)^2 + (y - 1/2)^2]];
>
> ListSurfacePlot3D[knots, ColorFunction -> colorF]
>
>
> Bob Hanlon
>
> ---- David Kahle <david.kahle at gmail.com> wrote:
>
> =============
> Hi all -
>
> I have a matrix whose rows, 4 dimensional vectors, represent (x, y, z)
> values as well as a measurement f which I would like to use to create
> an interpolated surface colored according to the value of f.
> ListSurfacePlot3D gives me the appropriate surface (when I strain out
> the x, y, z values), but I'm having a hard time coloring it.  I've
> tried basic stuff with ColorFunction to no avail, but I'm sure this is
> a simple task.  Ideas?  Small example below.
>
>
> Points = Flatten[
>    Table[{x, y, 1 - x - y, (x - 1/2)^2 + (y - 1/2)^2}, {x, 0, 1,
> 1/4}, {y, 0,
>      1, 1/4}], 1];
> N[Points[[1 ;; 5]]]
>
> Knots = Map[Take[#, {1, 3}] &, Points];
> N[Knots[[1 ;; 5]]]
>
> ListSurfacePlot3D[Knots] (* Works fine, how to I color the surface? *)
>
> Colorf = Function[{x, y, z},  ColorData["GreenBrownTerrain"][
>     Points[[ Position[Knots, {x, y, z}][[1]] ]][[1]][[4]]
> ]];
> ListSurfacePlot3D[Knots, ColorFunction -> Colorf]
>
>
> Many thanks
> david.
>
> ----------------------------------
> ----------------------------------
> David Kahle
> Rice University
> Rm. 1041 Duncan Hall
> Department of Statistics, MS 138
> 6100 Main St.
> Houston, TX 77005
> http://sites.google.com/site/davidkahle
>



  • Prev by Date: Re: trouble printing to PDF
  • Next by Date: Re: SortBy + Sort Strings with apo.marks + CharacterCode
  • Previous by thread: Re: Coloring a ListSurfacePlot3D with a n x 4 matrix
  • Next by thread: Re: Coloring a ListSurfacePlot3D with a n x 4 matrix