基于渐变的条件着色

500*_*500 5 graphics wolfram-mathematica

请考虑 :

Manipulate[
Row[{
Graphics[Disk[]], 
Graphics[{
 Polygon[{{0, 0}, {3, 0}, {3, 1}, {0, 1}},
 VertexColors -> {White, Blend[{White, Blue}], 
 Blend[{White, Blue}], White}],
 Black, Thick,
 Line[{{i, 0}, {i, 1}}]}, ImageSize -> 300]}], 
{i, 0, 3}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

使用Szabolcs的梯度填充解决方案

如何使用位于黑线下方的颜色为磁盘着色?

abc*_*bcd 7

这是一个有效的解决方案,因为左边的颜色White和渐变是线性的.

With[{max = 3, color = Blend[{White, Blue}]}, 
 Manipulate[
  Row[{Graphics[{Opacity[i/max], color, Disk[]}], 
    Graphics[{Polygon[{{0, 0}, {max, 0}, {max, 1}, {0, 1}}, 
       VertexColors -> {White, color, color, White}], Black, Thick, 
      Line[{{i, 0}, {i, 1}}]}, ImageSize -> 300]}], {i, 0, max}]]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


如果每个末端都有两种不同的颜色(即不同的颜色White),则该Opacity方法不起作用.相反,您可以将可选的混合分数参数用于Blend所需比例的颜色.这是一个例子:

With[{max = 3, color1 = Red, color2 = Green}, 
 Manipulate[
  Row[{Graphics[{Blend[{color1, color2}, i/max], Disk[]}], 
    Graphics[{Polygon[{{0, 0}, {max, 0}, {max, 1}, {0, 1}}, 
       VertexColors -> {color1, color2, color2, color1}], Black, 
      Thick, Line[{{i, 0}, {i, 1}}]}, ImageSize -> 300]}], {i, 0, 
   max}]]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Ver*_*eia 6

如果你需要这样做,除了某些东西和白色的混合颜色,Opacity将不适合.你可以使用第二个参数更接近Szabolcs的原始解决方案,Blend如下所示:

skyBlue = Blend[{White,Blue}];
Manipulate[ Row[{ Graphics[{Blend[{White,skyBlue},i/3], Disk[]}],  
 Graphics[{  Polygon[{{0, 0}, {3, 0}, {3, 1}, {0, 1}},  
 VertexColors -> {White, skyBlue,   
 skyBlue, White}],  Black, Thick,  
 Line[{{i, 0}, {i, 1}}]}, ImageSize -> 300]}],  {i, 0, 3}]
Run Code Online (Sandbox Code Playgroud)

我除以i3是因为该参数意味着在0和之间变化1.

在此输入图像描述

  • 但是,有时候有多个答案,或者不止一个"让我们看看这种方法的去向"是有帮助的.有不同风格的解决方案,像我这样的初学者从各个角度发现视图有趣...... (4认同)
  • *叹气*我的打字速度不够快. (2认同)
  • @Verbeia Rep积分是一款不错的游戏,但学习效果更好.请不要放弃回答.我很喜欢你的帖子. (2认同)