将复数编码为RGB像素并返回

时间:2010-04-02 13:20:34

标签: language-agnostic math graphics complex-numbers

如何将复数编码为RGB像素,反之亦然?

可能(对数)绝对值变为亮度,参数变为色调。

去饱和像素应在逆向变换中接收随机参数。

Something like:
0 -> (0,0,0)
1 -> (255,0,0)
-1 -> (0,255,255)
0.5 -> (128,0,0)
i -> (255,255,0)
-i -> (255,0,255)

(0,0,0) -> 0
(255,255,255) -> e^(i * random)
(128,128,128) -> 0.5 * e^(i *random)
(0,128,128) -> -0.5

是否有现成的公式?

编辑:看起来我只需要将RGB转换为HSB并返回。

编辑2:现有RGB - > HSV转换器片段:

if (hsv.sat == 0) {
    hsv.hue = 0; // !
    return hsv;
}

我不想要0.我想要随机。而且不仅仅是hsv.sat==0,而是它应该更低(“应该是”意味着最大饱和度,饱和度是从复数转换后的。)

3 个答案:

答案 0 :(得分:4)

你会遇到很多问题:

| RGB | = 2 ^ 24 | C | =?

假设您的复数设置是有限且离散的,我认为RGB系统的最佳方法是这样的:
笛卡尔轴:

alt text

极轴:

alt text

我认为这将是独一无二的,有点语义:类似计数器网格和地理地图着色以及医学图像分析。

您可以改用HSL系统和极轴:

alt text

你想用这种编码做什么?

答案 1 :(得分:0)

首先对你的问题发表几点意见:

  • 1 + i - > (510,255,0)?
  • '亮度'和'色调'通常是 HSV颜色模型的组件 而不是RGB

也许您可以使用复数形式的极性形式并将它们映射到HSV等色轮,并修复了V?由于复数的大小可以是无限的,因此您可能无法将它们映射到任何颜色模型,所有这些(我所知道的都是)都是有界的。也许您可以使用非欧几里德几何将复数映射到单位圆。

但是,为了回答你的问题,我从来没有遇到任何现成的问题解决方案。

我们等着向SO学习。

答案 2 :(得分:0)

看起来OP有一个不同的问题......但无论如何,这里有一个地方。它是GPL代码,因此您可以根据需要使用它。

Sage的complex_to_rgb函数通过Numpy和Python实现了这一功能。 Mathematica有这么复杂的情节(事实上Sage的灵感来自于它们),所以可能它内部也有这样的东西,尽管可能不是代码。