Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Python和Scribus制作RGB立方体【Programming(Python)】

使用Python和Scribus制作RGB立方体【Programming(Python)】

作者头像
Potato
修改于 2019-12-02 03:22:22
修改于 2019-12-02 03:22:22
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

使用Scribus的Python Scripter功能创建一个显示RGB色谱图的3D立方体。

图片来源:Opensource.com
图片来源:Opensource.com

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

作为色轮的替代方案,我想到了使用一系列图形在立方体表面上显示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图形的任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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点,并绘制另一条矩形。

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

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

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

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

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

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

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

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

这是前半部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #!/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()

这是下半部分:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #!/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。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【精选】适合初学者小游戏井字棋(三子棋)(C语言),Easyx图形库应用+源代码分享
1.Visual Studio 2022 2.安装easyx图形库,可以调用头文件
命运之光
2024/03/20
5680
【精选】适合初学者小游戏井字棋(三子棋)(C语言),Easyx图形库应用+源代码分享
【精选】适合初学者小游戏,Easyx图形库运用,跳转页面,窗口句柄简单应用,C语言
一、项目环境 1.Visual Studio 2022 2.安装easyx图形库,可以调用头文件
命运之光
2024/03/20
5260
【精选】适合初学者小游戏,Easyx图形库运用,跳转页面,窗口句柄简单应用,C语言
贪吃蛇
贪吃蛇真正实现的核心代码也就100来行,为了搞一些花里胡哨的东西,我硬是将代码弄成了300多行,但效果是,这游戏还挺好玩的。
DeROy
2020/05/12
9850
贪吃蛇
oblicubes包带你绘制立方体图
R语言数据分析指南
2023/08/18
3440
oblicubes包带你绘制立方体图
第168期:看起来不像立方体
在上一节中,我们用threejs成功创建了一个蓝色的立方体。但是如果我们仔细观察一下,会发现几个非常有意思的现象,比如:
terrence386
2023/10/19
4250
第168期:看起来不像立方体
EasyX图形库学习(一)
EasyX 是针对 C++ 的图形库,可以帮助 C/C++ 初学者快速上手图形和游戏编程。
走在努力路上的自己
2024/02/03
1.5K0
EasyX图形库学习(一)
p5.js 3D图形-立方体
前面写了几篇 p5.js 文章 都还没涉及到3D图形,但其实 p5.js 是提供了基础的3D图形的。
德育处主任
2023/03/19
2.5K0
p5.js 3D图形-立方体
由RGB到HSV的转换详解
在图像处理中,最常见的就是RGB色彩模型。在RGB模型中,每种颜色出现在红、绿、蓝的原色光谱分量中。该模型基于笛卡尔坐标系。如图1所示,RGB原色值位于3个角上;二次色青色,深红色和黄色位于另外三个角上,黑色位于原点处,白色位于里原点最远的角上。
FPGA开源工作室
2020/02/25
3.7K0
俄罗斯方块
俄罗斯方块游戏制作教程,一个我考虑了很久要不要发的项目,因为这个项目代码相对来说有点长,大概500行,最为致命的就是逻辑关系很复杂,想要用语言来表达很困难,最后就是文章太长了,5000字的正文啊,写的我手抽筋~
DeROy
2020/05/11
1.8K0
太阳系行星运行轨道图,C语言,源代码分享
1.Visual Studio 2022 2.安装easyx图形库,可以调用头文件
命运之光
2024/03/20
5130
太阳系行星运行轨道图,C语言,源代码分享
从零开始学习PYTHON3讲义(十五)让画面动起来
虽然看起来绘图和音乐并不相关,但是听过了上一讲的内容你一定知道,这是游戏编程中四个需要处理内容的两部分,这两部分必须同时、并行的处理,不能因为某一项计算的拖延,导致另外一方程序的停滞。要知道人对声音的断续和游戏的卡顿是很敏感的。
俺踏月色而来
2019/01/07
1.5K0
实验5 立方体显示与变换
(1) 修改代码,让立方体平移和旋转,产生两点透视和三点透视,将两种透视图结果存为图1-2,与对应修改的代码一起保存至word实验文档中(20分钟);
步行者08
2019/02/25
1.2K0
6.5编程实例-立方体透视投影
GLint winWidth = 600, winHeight = 600; //设置初始化窗口大小
步行者08
2018/10/09
9990
02-移动端开发教程-CSS3新特性(中)
1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸、背景裁切区域、背景定位参照点、多重背景等。 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比例,保证图片始终填充满背景区域,如有溢出部分则会被隐藏。 contain会自动调整缩放比例,保证图片始终完整显示在背景区域。 也可以使用长度单位或百分比,可以是两个值第一个是水平方向第二个是垂直方向。 .box { width: 300px; height: 200px; border: 1px s
老马
2018/04/02
1.6K0
02-移动端开发教程-CSS3新特性(中)
Python实现立方体纹理映射
本文要点在于扩展库pyopengl的使用,接口与标准的OpenGL基本一致。 import sys from OpenGL.GL import * from OpenGL.GLUT import * from OpenGL.GLU import * from PIL import Image class MyPyOpenGLTest: #初始化OpenGL环境 def __init__(self, width = 640, height = 480, title = b'MyPyOpenGLTest')
Python小屋屋主
2018/04/16
1.4K0
Python实现立方体纹理映射
CSS 还原拉斯维加斯球数字动画
实现一个 3D 立方体,相对另外一个文字和颜色都在随机变化的平面效果而言,属于非常非常简单的一步了。
Sb_Coco
2023/10/23
3970
CSS 还原拉斯维加斯球数字动画
Python实现动态3D立方体:旋转的3D立方体动画
3D动画在数据可视化和图形学中具有重要意义,能够生动地展示复杂的三维结构和运动。在这篇博客中,我们将使用Python来实现一个动态旋转的3D立方体。通过利用Matplotlib库,我们能够轻松创建和动画化3D立方体。
屿小夏
2024/09/25
7150
一篇文章教会你利用html5和css3实现3D立方体效果图
随着HTML5 CSS3的出现和发展,使得我们的网页可以实现更加复杂的效果,也使得我们的浏览体验更加丰富,所以今天我们将制作一个正方体的3D效果。
前端皮皮
2020/11/26
1.2K0
一篇文章教会你利用html5和css3实现3D立方体效果图
带你玩转自定义view系列
View是Android所有控件的基类,接下来借鉴网上的一张图片让大家一目了然(图片出自:http://blog.51cto.com/wangzhaoli/1292313)
Android技术干货分享
2019/03/26
1.8K0
带你玩转自定义view系列
p5.js 光速入门
本文的目标是和各位工友一起有序的快速上手 p5.js ,会讲解 p5.js 的基础用法。
德育处主任
2022/12/07
5.8K0
p5.js 光速入门
相关推荐
【精选】适合初学者小游戏井字棋(三子棋)(C语言),Easyx图形库应用+源代码分享
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档