使用 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));
}