Условное окрашивание на основе градиента - PullRequest
5 голосов
/ 16 ноября 2011

Пожалуйста, примите во внимание:

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

enter image description here

Использование решения Сабольча для Градиентная заливка

Как можно покрасить диск в цвет под черной линией?

Ответы [ 2 ]

7 голосов
/ 16 ноября 2011

Вот одно решение, которое работает, потому что цвет слева - 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}]]

enter image description here


Если у вас было два разных цвета для каждого конца (то есть что-то отличное от 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}]]

enter image description here

6 голосов
/ 16 ноября 2011

Если вам нужно сделать это для сочетания цветов, отличных от белого и белого, Opacity не подойдет. Вместо этого вы могли бы остаться ближе к исходному решению Сабольча, используя второй аргумент для 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}]

Я разделил i на 3, потому что этот параметр должен варьироваться от 0 до 1.

enter image description here

...