HSV 颜色空间中的渐近线阴影梯度

HSV 颜色空间中的渐近线阴影梯度

使用 asymptote,我尝试在 HSV 颜色空间中用渐变阴影填充形状。不幸的是,我认为 HSV 不是 asymptote 中可用的颜色空间。但是,asymptote 确实具有在 RGB 颜色空间中hsv返回 的函数pen。我使用以下代码生成了如图所示的两个正方形。

unitsize(1inch);

// left square
pen p1 = hsv(240,1,1); // blue
pen p2 = hsv(  0,1,1); // red
axialshade(unitsquare, p1, (0,0), p2, (0,1));

// right square
real hband = 0.05;
for (real y = 0.0; y < 1.0; y += hband)
{
    fill(shift(1.2,y)*scale(1,hband)*unitsquare, hsv((1.0-y)*240,1,1));
}

axialshade函数在左侧的 RGB 颜色空间中生成渐变。右侧方块显示了我想要的 HSV 渐变。但是,它是通过用纯色 HSV 颜色填充带手动生成的。有没有自动生成 HSV 渐变的方法?

在此处输入图片描述

编辑: 我在评论中看到这个问题自 2012 年起,PDF 不再支持此颜色模型。如果真是这样,那可能意味着我要求的是不可能的。

答案1

感谢@CharlesStaats 就该latticeshade功能提供的精彩建议。

在阅读更多内容后维基百科我了解到 HSV 颜色空间仅由颜色序列红-黄-绿-青-蓝-洋红-红之间的 RGB 线性插值组成。修剪该序列以满足我的需求,得到以下代码。

unitsize(1inch);

// left square
pen[][] pens = { {red}, {yellow}, {green}, {cyan}, {blue} };
latticeshade(unitsquare, pens);

// right square
real hband = 0.05;
for (real y = 0.0; y < 1.0; y += hband)
{
    fill(shift(1.2,y)*scale(1,hband)*unitsquare, hsv((1.0-y)*240,1,1));
}

在此处输入图片描述

相关内容