当我决定今年夏天想玩彩色游戏时,我想到了通常在色轮上描绘色彩的事实。 通常是颜料颜色而不是光,并且您对颜色亮度或亮度的变化没有任何感觉。

作为色轮的替代方案,我想到了使用一系列图形在立方体表面上显示RGB光谱的想法。 RGB值将在带有X,Y和Z轴的三维图中显示。 例如,一个表面将使B(或蓝色)保持为0,其余的轴将显示当我绘制R(红色)和G(绿色)的颜色(从0到255)时所发生的情况。

事实证明,使用Scribus及其Python Scripter功能并不是很难。 我可以创建RGB颜色,制作显示颜色的矩形,然后以2D格式排列它们。 我决定对颜色进行5个值的跳跃,并制作一个在侧面测量5个点的矩形。 因此,对于每个2D图形,我将制作约250种颜色,而该立方体将在一侧测量250个点,即3.5英寸。

我使用以下Python代码来完成Green-Red图的任务:

x 
     
     = 
     
     300 
     
     

y 
     
     = 
     
     300 
     
     

r 
     
     = 
     
     0 
     
     

g 
     
     = 
     
     0 
     
     

b 
     
     = 
     
     0 
     
     

if scribus. 
     
     newDoc 
     
     ( scribus. 
     
     PAPER_LETTER 
     
     , 
     
     ( 
     
     0 
     
     , 
     
     0 
     
     , 
     
     0 
     
     , 
     
     0 
     
     ) 
     
     , scribus. 
     
     PORTRAIT 
     
     , 
     
     1 
     
     ,                  scribus. 
     
     UNIT_POINTS 
     
     , scribus. 
     
     NOFACINGPAGES 
     
     , scribus. 
     
     FIRSTPAGERIGHT 
     
     ) :
     
     

    
     
     while r 
     
     < 
     
     256 :
     
     

        
     
     while g 
     
     < 
     
     256 :
     
     

            newcolor 
     
     = 
     
     str 
     
     ( r 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( g 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( b 
     
     ) 
     
     

            
     
     if newcolor 
     
     == 
     
     '0_0_0' :
     
     

                newcolor 
     
     = 
     
     'Black' 
     
     

            scribus. 
     
     defineColorRGB 
     
     ( newcolor 
     
     , r 
     
     , g 
     
     , b 
     
     ) 
     
     

            rect 
     
     = scribus. 
     
     createRect 
     
     ( x + g 
     
     , y 
     
     , 
     
     5 
     
     , 
     
     5 
     
     ) 
     
     

            scribus. 
     
     setFillColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            scribus. 
     
     setLineColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            g 
     
     = g + 
     
     5 
     
     

        g 
     
     = 
     
     0 
     
     

        r 
     
     = r + 
     
     5 
     
     

        y 
     
     = y – 
     
     5

该脚本开始于300的图形结构,300,其水平和可能的第三的方式从上而下是关于美国信纸大小的页面的中间; 这就是图的原点。 然后,它沿X轴(绿色值)水平构建图形,然后返回到Y轴,在页面上跳5点,并绘制另一条矩形。

立方体体积Python python 立方体_java

看起来很简单; 我只是摆弄数字,换另一边。 但这不仅仅是制作另外两个图形的问题,一个图形是蓝绿色的,另一个图形是红蓝色的。 我想创建一个展开的立方体,以便可以打印,切割,折叠并创建RGB的3D视图。 因此,下一部分(下一页)需要在左上角具有原点(黑色角),绿色水平方向向下,蓝色垂直方向向下。

“摆弄数字”最终或多或少地经过反复试验才能得到我想要的。 创建第二张图之后,我需要第三张图(对于Red–Blue),其原点位于左上角,其中Red向左增加,Blue向下方增加。

这里是:

立方体体积Python python 立方体_数据可视化_02

当然,这只是该多维数据集的前半部分。 除了原点应为白色(而不是黑色)以表示较高的值外,我需要制作相似的形状。 这是我希望变得更聪明的时候,因为我不仅需要做出相似的整体形状,而且还需要以镜像方式与第一个形状进行交互(我认为)。 有时,反复试验是您唯一的朋友。

这是怎么出来的; 我使用了一个单独的脚本,因为在美国字母大小的页面上没有足够的空间来容纳它们:

立方体体积Python python 立方体_游戏开发_03

现在,打印机已启动! 在这里,您可以了解彩色打印机在从RGB到CMYK的转换以及打印色彩密集空间的其他方面的性能。

接下来,男孩和女孩,这是剪切粘贴的时间! 我可以使用胶带,但是我不想更改表面的外观,因此在切割时我在侧面留了一些标签,以便可以将它们粘在里面。 根据经验,我可以说在复印纸上打印时会出现一些不希望有的皱纹,因此在复印纸原型制作完成后,我在较重的纸张上打印了立方体,并进行了磨砂处理。

立方体体积Python python 立方体_游戏开发_04

请记住,这只是RGB空间边界的视图; 为了更准确,您必须制作一个可以在中间切成薄片的实心立方体。 例如,这将是一个通过实心RGB立方体的切片,其中Blue = 120:

立方体体积Python python 立方体_java_05

最后,我很高兴做这个项目。 如果您想参加聚会,请使用以下两个脚本。 这些脚本需要Scribus 1.5.x,它提供了defineColorRGB()函数。

这是前半部分:

#!/usr/bin/env python 
     
     
# black2rgb.py 
     
     
"""

Creates one-half of RGB cube with Black at origin

""" 
     
     

import scribus
     
     


x 
     
     = 
     
     300 
     
     

y 
     
     = 
     
     300 
     
     

r 
     
     = 
     
     0 
     
     

g 
     
     = 
     
     0 
     
     

b 
     
     = 
     
     0 
     
     

if scribus. 
     
     newDoc 
     
     ( scribus. 
     
     PAPER_LETTER 
     
     , 
     
     ( 
     
     0 
     
     , 
     
     0 
     
     , 
     
     0 
     
     , 
     
     0 
     
     ) 
     
     , scribus. 
     
     PORTRAIT 
     
     , 
     
     1 
     
     , scribus. 
     
     UNIT_POINTS 
     
     , scribus. 
     
     NOFACINGPAGES 
     
     , scribus. 
     
     FIRSTPAGERIGHT 
     
     ) :
     
     

    
     
     while r 
     
     < 
     
     256 :
     
     

        
     
     while g 
     
     < 
     
     256 :
     
     

            newcolor 
     
     = 
     
     str 
     
     ( r 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( g 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( b 
     
     ) 
     
     

            
     
     if newcolor 
     
     == 
     
     '0_0_0' :
     
     

                newcolor 
     
     = 
     
     'Black' 
     
     

            scribus. 
     
     defineColorRGB 
     
     ( newcolor 
     
     , r 
     
     , g 
     
     , b 
     
     ) 
     
     

            rect 
     
     = scribus. 
     
     createRect 
     
     ( x + g 
     
     , y 
     
     , 
     
     5 
     
     , 
     
     5 
     
     ) 
     
     

            scribus. 
     
     setFillColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            scribus. 
     
     setLineColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            g 
     
     = g + 
     
     5 
     
     

        g 
     
     = 
     
     0 
     
     

        r 
     
     = r + 
     
     5 
     
     

        y 
     
     = y - 
     
     5 
     
     

        
     
     

    r 
     
     = 
     
     0 
     
     

    g 
     
     = 
     
     0 
     
     

    y 
     
     = 
     
     305 
     
     


    
     
     while b 
     
     < 
     
     256 :
     
     

        
     
     while g 
     
     < 
     
     256 :
     
     

            newcolor 
     
     = 
     
     str 
     
     ( r 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( g 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( b 
     
     ) 
     
     

            
     
     if newcolor 
     
     == 
     
     '0_0_0' :
     
     

                newcolor 
     
     = 
     
     'Black' 
     
     

            scribus. 
     
     defineColorRGB 
     
     ( newcolor 
     
     , r 
     
     , g 
     
     , b 
     
     ) 
     
     

            rect 
     
     = scribus. 
     
     createRect 
     
     ( x + g 
     
     , y 
     
     , 
     
     5 
     
     , 
     
     5 
     
     ) 
     
     

            scribus. 
     
     setFillColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            scribus. 
     
     setLineColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            g 
     
     = g + 
     
     5 
     
     

        g 
     
     = 
     
     0 
     
     

        b 
     
     = b + 
     
     5 
     
     

        y 
     
     = y + 
     
     5 
     
     

        
     
     

    r 
     
     = 
     
     255 
     
     

    g 
     
     = 
     
     0 
     
     

    y 
     
     = 
     
     305 
     
     

    x 
     
     = 
     
     39 
     
     

    b 
     
     = 
     
     0 
     
     


    
     
     while b 
     
     < 
     
     256 :
     
     

        
     
     while r 
     
     >= 
     
     0 :
     
     

            newcolor 
     
     = 
     
     str 
     
     ( r 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( g 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( b 
     
     ) 
     
     

            
     
     if newcolor 
     
     == 
     
     '0_0_0' :
     
     

                newcolor 
     
     = 
     
     'Black' 
     
     

            scribus. 
     
     defineColorRGB 
     
     ( newcolor 
     
     , r 
     
     , g 
     
     , b 
     
     ) 
     
     

            rect 
     
     = scribus. 
     
     createRect 
     
     ( x 
     
     , y 
     
     , 
     
     5 
     
     , 
     
     5 
     
     ) 
     
     

            scribus. 
     
     setFillColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            scribus. 
     
     setLineColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            r 
     
     = r - 
     
     5 
     
     

            x 
     
     = x+ 
     
     5 
     
     

        b 
     
     = b + 
     
     5 
     
     

        x 
     
     = 
     
     39.5 
     
     

        r 
     
     = 
     
     255 
     
     

        y 
     
     = y + 
     
     5 
     
     

        
     
     

scribus. 
     
     setRedraw 
     
     ( 
     
     True 
     
     ) 
     
     

scribus. 
     
     redrawAll 
     
     ( 
     
     )

现在下半场:

#!/usr/bin/env python 
     
     
# white2rgb.py 
     
     
"""

Creates one-half of RGB cube with White at origin

""" 
     
     

import scribus
     
     


x 
     
     = 
     
     300 
     
     

y 
     
     = 
     
     300 
     
     

r 
     
     = 
     
     255 
     
     

g 
     
     = 
     
     255 
     
     

b 
     
     = 
     
     255 
     
     

if scribus. 
     
     newDoc 
     
     ( scribus. 
     
     PAPER_LETTER 
     
     , 
     
     ( 
     
     0 
     
     , 
     
     0 
     
     , 
     
     0 
     
     , 
     
     0 
     
     ) 
     
     , scribus. 
     
     PORTRAIT 
     
     , 
     
     1 
     
     , scribus. 
     
     UNIT_POINTS 
     
     , scribus. 
     
     NOFACINGPAGES 
     
     , scribus. 
     
     FIRSTPAGERIGHT 
     
     ) :
     
     

    
     
     while g 
     
     >= 
     
     0 :
     
     

        
     
     while r 
     
     >= 
     
     0 :
     
     

            newcolor 
     
     = 
     
     str 
     
     ( r 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( g 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( b 
     
     ) 
     
     

            
     
     if newcolor 
     
     == 
     
     '255_255_255' :
     
     

                newcolor 
     
     = 
     
     'White' 
     
     

            scribus. 
     
     defineColorRGB 
     
     ( newcolor 
     
     , r 
     
     , g 
     
     , b 
     
     ) 
     
     

            rect 
     
     = scribus. 
     
     createRect 
     
     ( x + 
     
     255 - r 
     
     , y 
     
     , 
     
     5 
     
     , 
     
     5 
     
     ) 
     
     

            scribus. 
     
     setFillColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            scribus. 
     
     setLineColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            r 
     
     = r - 
     
     5 
     
     

        r 
     
     = 
     
     255 
     
     

        g 
     
     = g - 
     
     5 
     
     

        y 
     
     = y - 
     
     5 
     
     

        
     
     

    r 
     
     = 
     
     255 
     
     

    g 
     
     = 
     
     255 
     
     

    y 
     
     = 
     
     305 
     
     


    
     
     while b 
     
     >= 
     
     0 :
     
     

        
     
     while r 
     
     >= 
     
     0 :
     
     

            newcolor 
     
     = 
     
     str 
     
     ( r 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( g 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( b 
     
     ) 
     
     

            
     
     if newcolor 
     
     == 
     
     '255_255_255' :
     
     

                newcolor 
     
     = 
     
     'White' 
     
     

            scribus. 
     
     defineColorRGB 
     
     ( newcolor 
     
     , r 
     
     , g 
     
     , b 
     
     ) 
     
     

            rect 
     
     = scribus. 
     
     createRect 
     
     ( x + 
     
     255 - r 
     
     , y 
     
     , 
     
     5 
     
     , 
     
     5 
     
     ) 
     
     

            scribus. 
     
     setFillColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            scribus. 
     
     setLineColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            r 
     
     = r - 
     
     5 
     
     

        r 
     
     = 
     
     255 
     
     

        b 
     
     = b - 
     
     5 
     
     

        y 
     
     = y + 
     
     5 
     
     

        
     
     

    r 
     
     = 
     
     255 
     
     

    g 
     
     = 
     
     0 
     
     

    y 
     
     = 
     
     305 
     
     

    x 
     
     = 
     
     39 
     
     

    b 
     
     = 
     
     255 
     
     


    
     
     while b 
     
     >= 
     
     0 :
     
     

        
     
     while g 
     
     < 
     
     256 :
     
     

            newcolor 
     
     = 
     
     str 
     
     ( r 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( g 
     
     ) + 
     
     '_' + 
     
     str 
     
     ( b 
     
     ) 
     
     

            
     
     if newcolor 
     
     == 
     
     '255_255_255' :
     
     

                newcolor 
     
     = 
     
     'White' 
     
     

            scribus. 
     
     defineColorRGB 
     
     ( newcolor 
     
     , r 
     
     , g 
     
     , b 
     
     ) 
     
     

            rect 
     
     = scribus. 
     
     createRect 
     
     ( x + g 
     
     , y 
     
     , 
     
     5 
     
     , 
     
     5 
     
     ) 
     
     

            scribus. 
     
     setFillColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            scribus. 
     
     setLineColor 
     
     ( newcolor 
     
     , rect 
     
     ) 
     
     

            g 
     
     = g + 
     
     5 
     
     

        g 
     
     = 
     
     0 
     
     

        b 
     
     = b - 
     
     5 
     
     

        y 
     
     = y + 
     
     5 
     
     

        
     
     

scribus. 
     
     setRedraw 
     
     ( 
     
     True 
     
     ) 
     
     

scribus. 
     
     redrawAll 
     
     ( 
     
     )

由于我创建了大量颜色,因此看到Scribus文件比使用它制作的PDF更大,我并不感到惊讶。 例如,我的Scribus SLA文件为3.0MB,而我生成的PDF只有70KB。

翻译自: https://opensource.com/article/19/7/rgb-cube-python-scribus