Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.soft-sys.math.mathematica > #1793

Re: Coloring a ListSurfacePlot3D with a n x 4 matrix

From Heike Gramberg <heike.gramberg@gmail.com>
Newsgroups comp.soft-sys.math.mathematica
Subject Re: Coloring a ListSurfacePlot3D with a n x 4 matrix
Date 2011-04-20 08:28 +0000
Organization Steven M. Christensen and Associates, Inc and MathTensor, Inc.
Message-ID <iom5fg$t92$1@smc.vnet.net> (permalink)

Show all headers | View raw


What about 

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];

interpf = 
  Interpolation[
   Transpose[{Points[[All, {1, 2}]], Points[[All, 4]]}]];
ListSurfacePlot3D[Points[[All, {1, 2, 3}]], 
 ColorFunction -> 
  Function[{x, y}, ColorData["GreenBrownTerrain"][interpf[x, y]]] ]

Heike

On 19 Apr 2011, at 11:58, David Kahle 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@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
>> 
>> 
> 
> 

Back to comp.soft-sys.math.mathematica | Previous | Next | Find similar | Unroll thread


Thread

Re: Coloring a ListSurfacePlot3D with a n x 4 matrix Heike Gramberg <heike.gramberg@gmail.com> - 2011-04-20 08:28 +0000

csiph-web