RegionPlot3D中具有InterpolationFunction的ColorFunction

时间:2014-11-18 14:53:59

标签: colors wolfram-mathematica interpolation

我正在写一篇关于在Mathematica的3d区域图中实现依赖于场的颜色的问题。

具体来说,我创建了下面的图,其中f [x,y,z]是三维数组的插值函数(这样做可以很容易地得到较低分辨率的图,因为数据量在数组很重要。)

我遇到的问题是,如果我运行以下指令:

RegionPlot3D[f[x, y, z] >= 0.5 && f[x, y, z] <= 0.6, {x, 0, 1}, {y, 0,0.416}, {z, 0, 0.666}, 
 ColorFunction ->  Function[{x, y, z}, Hue[Rescale[f[x, y, z], {0, 1}]]]]

颜色没有正确施加(我得到一个颜色均匀的区域)。如果我在Hue中使用函数g(可以是任何函数,例如点位置的范数),那么

Hue[Rescale[g[x, y, z], {0, 1}]]

正确传递颜色信息。我假设我在处理InterpolatingFunction对象时犯了一个错误。该如何处理这个问题?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

RegionPlot3D将4个参数传递给ColorFunction

尝试此操作(只需将假arg添加到Function

 RegionPlot3D[f[x, y, z] >= 0.5 && f[x, y, z] <= 0.6, {x, 0, 1}, {y, 0,0.416}, {z, 0, 0.666}, 
      ColorFunction ->  Function[{x, y, z, p}, Hue[Rescale[f[x, y, z], {0, 1}]]]]

或者像这样:

 RegionPlot3D[f[x, y, z] >= 0.5 && f[x, y, z] <= 0.6, {x, 0, 1}, {y, 0,0.416}, {z, 0, 0.666}, 
      ColorFunction ->  ( Hue[Rescale[f[#1, #2, #3 ], {0, 1}]] &)]