作者H45 (!H45)
站内Prob_Solve
标题Re: 给阵列上颜色...
时间Mon Dec 24 11:12:07 2007
※ 引述《PsMonkey (痞子军团团长)》之铭言:
: 我承认这个标题给的很烂,但是... 实在不知道还能怎麽下 Orz
: 我有一个整数阵列 a,长度为 L
: 里头元素值域为 0~X
: 我希望能显示 a 的时候,不同值可以有不同颜色
: 例如: 0→红色,1→蓝色,2→绿色....
: 以数学的方式来说,就是弄个函数,从 0~X 对应到 0~FFFFFF
: 但重点是,颜色又希望能用肉眼看出差异
: →太亮 or 太暗都不容易分出差异
: →同色系能看得出差异
: 还请高手指点 or 惠赐关键字...
: (是的,连要用什麽 keyword 去找演算法都不知道 Orz)
: ====
: 我有考虑过建表,但是 X 可能破百,甚至近千....... 囧
我收回 HSI 的方法。
现在手边有书,来看看书上的作法吧。
这是一个 Gray Level to Color Transformations 的问题
把阵列索引值想成灰阶值,输出想成彩色像素值,问题就解了。
转换法核心:
Red = |sin(ax + p)|
Green = |sin(ax + q)|
Blue = |sin(ax + r)|
其中 x 是灰阶值,a, p, q, r 是可调参数,Red, Green, Blue 是彩色像素值
这边的 x, Red, Green, Blue 都是假定在 [0, 1], 如果需要 [0, 255] 请自行调整。
sin 的输入乘上系数 a 是为了决定颜色改变的周期
然而每一个 (或半个?) 周期会出现一次相似的颜色,所以要让颜色尽可能的不同
就请把 a 值调小一点,这样周期会加长,重复的次数相对就会减少
sin 的输入分别加上不同的位移,p, q, r 是为了转换成彩色
p, q, r 值请不要设定太接近的值,相同的 p, q, r 会使输出变成灰色
尽可能在一个周期内位移不同但是适当的距离,这样出来的颜色会好看的多。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:推 PsMonkey:囧... 我後来适用 HSI 硬干说 XDXD 12/24 11:23
2F:→ H45:啊,时效过了 12/24 11:38