代码之家  ›  专栏  ›  技术社区  ›  Vi.

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

  •  1
  • Vi.  · 技术社区  · 15 年前

    如何更好地将复数编码为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 回复  |  直到 14 年前
        1
  •  4
  •   Community CDub    8 年前

    你会遇到很多问题:

    rgb=2^24 and c=?

    假设你的复数集是有限的和离散的,我认为对RGB系统最好的方法是这样的:
    笛卡尔轴:

    极轴:

    我认为它将是独特的,有点语义性:比如反网格和地理地图的着色以及医学图像分析。

    您可以使用HSL系统和极轴代替:

    您想如何处理此编码?


    笛卡尔轴:

    alt text

    极轴:

    alt text

    我认为它将是独特的和一点语义:像反网格和地理地图着色和医学图像分析。

    您可以使用HSL系统和极轴代替:

    alt text

    您想如何处理此编码?

        2
  •  0
  •   High Performance Mark    15 年前

    首先是对你的问题的几点评论:

    • 1+i->(510255,0)?
    • “亮度”和“色调”通常是 HSV颜色模型的组成部分 而不是RGB

    也许你可以使用复数的极坐标形式,把它们映射到一个颜色轮上,比如带有v固定的hsv?因为复数的大小可以是无穷大的,所以你可能很难将它们映射到任何颜色模型,所有这些颜色模型(我知道的所有颜色模型)都是有界的。也许可以使用非欧几里得几何将复数映射到单位圆中。

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

    我们等着向他学习。

        3
  •  0
  •   kcrisman    14 年前

    好像手术室有一个不同的问题在想…但不管怎样,这里有一个地方是合并的。它是GPL代码,所以您可以根据需要使用它。

    鼠尾草 complex_to_rgb 函数通过numpy和python来实现这一点。Mathematica有如此复杂的情节(事实上,圣人是受其启发的),所以推测它内部也有类似的情节,尽管可能不是代码。