受slandarer大佬启发,自己用Python复现了一下七年前的一个颜色图绘图大赛的一些作品。把复现过程记录如下:
这场比赛居然已经是七年前的事情了,大佬A Frayed Knot在StackExchange
上发起了挑战,举办了名为“Tweetable数学艺术”的比赛(实际上活动整整进行了一年半)
比赛规则如下:
使用C++代码或格式与C++类似的代码,使用不多于140个字符,通过输入x,y坐标输出R,G,B颜色值的形式构造函数,并生成一张1024x1024大小的图片。
挑战发起者给出了的一个基础示例:
/* RED */
return i&&j?(i%j)&(j%i):0;
/* GREEN */
return i&&j?(i%j)+(j%i):0;
/* BLUE */
return i&&j?(i%j)|(j%i):0;
但这个我拿c++和Python跑了一遍发现效果与之有差异,估计是有写错的地方或者C++各种版本不同格式转换的特性,期待大家的指出。我将其改写为python版本:
import cv2
import numpy as np
#导入python绘图matplotlib
import matplotlib.pyplot as plt
#使用ipython的魔法方法,将绘制出的图像直接嵌入在notebook单元格中
%matplotlib inline
#定义可视化图像函数
def look_img(img):
'''opencv读入图像格式为BGR,matplotlib可视化格式为RGB,因此需将BGR转RGB'''
try: #显示彩图
img_RGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img_RGB)
plt.show()
except: #显示灰度图或黑白图
plt.imshow(img,cmap="gray")
#plt.axis('off')
plt.show()
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
img[i,j,2] = ((i%j)&(j%i))&255 if (i&j) else 0
img[i,j,1] = ((i%j)+(j%i))&255 if (i&j) else 0
img[i,j,0] = ((i%j)|(j%i))&255 if (i&j) else 0
look_img(img)
同时自己也做了一些尝试,发现若是将代码微调,其结果也非常有意思:以下是改写版:
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
img[i,j,2] = ((i%j)&(j%i))&200 if (i&j) else 0
img[i,j,1] = ((i%j)+(j%i))&200 if (i&j) else 0
img[i,j,0] = ((i%j)|(j%i))&200 if (i&j) else 0
look_img(img)
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
img[i,j,2] = ((i%j)&(j%i))&255 if (i&j) else 0
img[i,j,1] = ((i%j)^(j%i))&255 if (i&j) else 0
img[i,j,0] = ((i%j)|(j%i))&255 if (i&j) else 0
look_img(img)
trichoplax大佬——方格布
正常方格布:
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
DIM=1024
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
s=3./(j+99)
img[i,j,2] = (round((i+DIM)*s+j*s)%2+round((DIM*2-i)*s+j*s)%2)*127
img[i,j,1] = (round((i+DIM)*s+j*s)%2+round((DIM*2-i)*s+j*s)%2)*127
img[i,j,0] = (round((i+DIM)*s+j*s)%2+round((DIM*2-i)*s+j*s)%2)*127
look_img(img)
扭曲并添加颜色:
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
DIM=1024
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
s=3./(j+99)
y=(j+np.sin((i*i+(j-700)**2*5)/100./DIM)*35)*s
img[i,j,2] = (round((i+DIM)*s+y)%2+round((DIM*2-i)*s+y)%2)*127
img[i,j,1] = (round(5*((i+DIM)*s+y))%2+round(5*((DIM*2-i)*s+y))%2)*127
img[i,j,0] = (round(29*((i+DIM)*s+y))%2+round(29*((DIM*2-i)*s+y))%2)*127
look_img(img)
大佬cjfaure——尖锐漩涡
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
img[i,j,2] = int(int(np.sqrt((73-i)**2+(609-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((860-i)**2+(162-j)**2))/115)))+1)/200)*90
img[i,j,1] = int(int(np.sqrt((160-i)**2+(60-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((86-i)**2+(860-j)**2))/115)))+1)/200)*90
img[i,j,0] = int(int(np.sqrt((844-i)**2+(200-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((250-i)**2+(20-j)**2))/115)))+1)/200)*90
look_img(img)
对参数进行微调:
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
img[i,j,2] = int(int(np.sqrt((148-i)**2+(1000-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((500-i)**2+(400-j)**2))/115)))+1)/200)*90
img[i,j,1] = int(int(np.sqrt((610-i)**2+(60-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((864-i)**2+(860-j)**2))/115)))+1)/200)*90
img[i,j,0] = int(int(np.sqrt((180-i)**2+(100-j)**2)+1)/(np.sqrt(abs(np.sin(int(np.sqrt((5-3-i)**2+(103-j)**2))/115)))+1)/200)*90
look_img(img)
cjfaure大佬——音乐谱
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
img[i,j,2] = (((int(100*np.sin(int((i+400)*(j+100)/11115)))&i)*1029)%256)*5
img[i,j,1] = (((int(100*np.sin(int((i+400)*(j+100)/11115)))&i)*1029)%256)*5
img[i,j,0] = (((int(100*np.sin(int((i+400)*(j+100)/11115)))&i)*1029)%256)*5
look_img(img)
色带代码及图片:
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
img[i,j,2] = np.cos(np.arctan2(j-512,i-512)/2)**2*255
img[i,j,1] = (np.cos(np.arctan2(j-512,i-512)/2-2*np.arccos(-1)/3))**2*255
img[i,j,0] = (np.cos(np.arctan2(j-512,i-512)/2+2*np.arccos(-1)/3))**2*255
look_img(img)
Snake大佬——三色谢宾斯基三角形
h = 1024
w = 1024
img = 255 * np.ones((h ,w , 3), dtype=np.uint8) #生成一张1024*1024像素的白图
for i in range(h): # 循环遍历所有像素点,替换像素点
for j in range(w):
img[i,j,2] = int(np.cos(i&j))*255
img[i,j,1] = int(np.cos((1024-i)&(1024-j)))*255
img[i,j,0] = int(np.tan((i|j)))*125
look_img(img)
(The End)
本篇文章用来实现一个简单的通讯录,如有不当的地方还希望能够多加指正。要求:实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人 test.c#include "...
JPAJava Persistence API, 即Java 持久化APIJPA规范本质上就是一种ORM规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现。 入门案例1.创建maven ,导入坐标2.配置jpa的核心配置文件,创建在META-INFO目录下,persistence.xml3.编写客户实体类4.配...
33事实证明我得每天写csdn,因为少写了25号的,就少报了一天,245块啊啊啊啊啊啊啊啊啊够我4天的饭钱了,又不敢重新跟老大讲,哭泣。不过想想人生找到的第一份实习,竟然钱给的还好,不用打卡能偷偷溜出去,迟到也没被说过(每次都是意外迟到,很不好我知道),晚上很早出去吃饭也没事,有三周左右没写代码只是在看,公司作为作为做算法的不算小有名气,算个中厂?环境特别好(桌子宽靠窗户亮),mentor虽然知道我比较菜平时也很忙,但是跟我讲东西的时候非常耐心(我很笨,听不懂人话的那种),感觉增删改查熟悉了很多,组件啊
fromhttp://blog.csdn.net/newchenxf/article/details/53169016手动安装gradle时, 即sudo apt-get install gradle然后,要使用gradle,输入 gradle -version,结果,出现了一下错误:[email protected]:~$ gradle --version
介绍介绍今天我们学习如何通过Python操作MySQL数据库。在Python2.7下使用的是pymysql这个软件包,跟着福哥来操作吧。安装安装pymysql直接使用pip安装即可pip insall pymysql授权MySQL数据库服务器默认只能在安装了数据库服务器的本机操作,也就是在TFLinux上操作,但是我们的python是安装在TFWindows上的啊!所以,我们要授权任何电脑都可以操...
题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。(n<=39)斐波那契数列公式为:思路这道题递归很好写,但是存在很严重的效率问题。我们以求解f(10)为例类分析递归的求解过程。想求f(10),需要先求得f(9)和f(8)。同样,想求得f(9),需要先求的f(8)和f(7)....我们可以用树形结构来表示这种依赖关系,如下图所示:我...
1wifi模块可以连接路由器,是不是就能实现远程控制呢? wifi模块可以连接路由器,说明实现路由器的局域网控制没有问题。 2 远程控制的过程中,自己家里面搭建服务器可以吗? 远程控制需要服务器,但是用户通过自己的电脑在家里搭建服务器实现的可能性很小,因为搭建服务器需要公网的Ip还有服务器相关的软件开发,并且维护过程是一个成本较高的开支。3 现在...
http://bmzclub.cn/challenges#2020sdnisc-%E6%8D%9F%E5%9D%8F%E7%9A%84%E6%B5%81%E9%87%8F%E5%8C%851.pcapng无法使用wireshark打开可能破坏了pcapng的文件结构,但是应该不会破坏数据内容,尝试使用foremost看看能不能从这个数据包中分离出什么东西得到一个zip压缩包,解压得到key.txtZmxhZ3tzZG5pc2NfbmV0X3NRMlgzUTl4fQ==PS C:\User
如果上传的时候,是同步上传的,不会出现问题。如果是异步上传的,如果你传入的异步方法是 MultipartFile file,就会包下面的错java.io.FileNotFoundException: D:\usr\local\tomcat\work\Tomcat\localhost\upload_46ba607a_d50c_4618_9b66_234953a0ba1f_00000002.tmp...
在讲这个函数之前。最好先了解欧拉函数。我们用 \ 记为整除。 记得小学的时候整除和整除以的概念么?别混淆。 2整除4 记作 2\4。欧拉函数用来表示。那么根据法里级数的展开(这个感觉和ACM关系不大就先不介绍了。大概讲的就是构造所有最简分数的一种树。而法里级数n定义分母<=n的最简分数。)比如对于分母为12.化简后:分别为:1/12 1/6 1/...