查看: 5796|回复: 14

[论坛活动] 【伪·论坛活动】Code Art

[复制链接]
梦石
0
星屑
48
在线时间
784 小时
注册时间
2013-1-4
回帖
1057
发表于 2015-9-5 21:23:25 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 墨凌羽 于 2015-9-6 13:39 编辑

前不久看到一个很有意思的活动。是Kyle McCormick在StackExchange上发起的一个叫做Tweetable Mathematical Art的比赛。参赛者用三条推特那么长的代码来生成一张图片。具体是参赛者用c++编写rd、gr、bl三个函数,每个函数接受i、j两个参数并返回一个在0~255之间的数字,分别代表在坐标i,j处的点的颜色的RGB值。每个函数都不能超过140个字符。i和j的区间是0~1023。
感觉这个会很有趣,就想在RM里玩玩。
这是测试程序: Code Art.rar (1.23 MB, 下载次数: 95)
主体代码已经写好,需要参加活动的人员自己编写data/scripts文件夹内的red.rb/green.rb/bule.rb三个文件里的函数。
然后运行程序会自动在output文件夹内输出图片。并附带相应的三个函数的代码。
每个参加活动的都需要下载附件编写函数,然后把生成的图片和相应的代码贴出来。
嗯,差不多这样。一楼是我自己的一张。【特别特别的简单。。。ORZ坐等被各位大触秀一脸
大概就是这样?活动奖励什么的貌似是都没有【前不久在PM里把经验都氪光了。。。现在连糖都赛不了ORZ


9.6更新:
1.。rb文件用任意文本编辑器都可以打开。嗯,最简单是用记事本。
2.上边的那个工程不要放在带中文的路径里
3.bulebule!窝就是喜欢bule肿么样,哼~【好吧,其实是把blue给打错了。对,我英语就是这么渣ORZ

点评

现在看到RB第一反应居然不是ruby代码文件233,利用记事本打开  发表于 2015-9-6 13:51
RB 文件怎么打开呀  发表于 2015-9-6 12:16
RM-GUI延期。。。最近被黑心老板压迫T_T
二次元少女的shitake,长着长脸,身高165,蓝色卷双马尾,FCUP,瞳色黑色,病气和御宅属性,是天才少女。
梦石
0
星屑
48
在线时间
784 小时
注册时间
2013-1-4
回帖
1057
 楼主| 发表于 2015-9-5 21:23:26 | 显示全部楼层
本帖最后由 墨凌羽 于 2015-9-7 04:05 编辑

正切函数生成的密集格
通过简单的正切函数可以生成漂亮而有趣的密集图案。
纯色版在R/G/B三个函数里,任意一个函数返回tan(i,j)。其余两个保持不变(比如说零),会得到一个纯色的密集格。另外,其余的两个函数返回的定值将会影响到图案的底色。
[pre lang="ruby"]#red method
def red(i,j)
   Math.tan(i * j)
end
#green method
def green(i,j)
    0
end
#bule method
def bule(i,j)
  0
end
[/pre]
Code Art221429.png Code Art221004.png Code Art183938.png
如果三个函数返回相同的真切值,最后会得到一张黑白两色的图案:
Code Art221602.png

更加有趣的颜色在上一步得知如果R/G/B三个函数都返回tan(i * j)则生成的图像会是黑白色的。实际上我们可以在R/G/B的函数返回值前乘上不同的系数,则会得到不同的颜色。
例如下边这张 Code Art231544.png [pre lang="ruby"]#red method
def red(i,j)
   Math.tan(i * j) * 0.5
end
#green method
def green(i,j)
    Math.tan(i * j) * 0.2
end
#bule method
def bule(i,j)
  Math.tan(i * j) * 0.5
end
[/pre]

最佳观看大小
正切密集格在太大和太小的时候看起来都不是特别好看当图案处于某种比例的缩放的时候,会出现十分有趣的效果:
2%(7$K3UB5KKUABU31T%]CM.jpg
RM-GUI延期。。。最近被黑心老板压迫T_T
二次元少女的shitake,长着长脸,身高165,蓝色卷双马尾,FCUP,瞳色黑色,病气和御宅属性,是天才少女。
回复

使用道具 举报

梦石
0
星屑
254
在线时间
316 小时
注册时间
2015-7-2
回帖
1629

开拓者

发表于 2015-9-5 21:43:06 | 显示全部楼层
本帖最后由 落雪鸦杀 于 2015-9-5 21:47 编辑

三条推特似乎是420英文字符。。。然而完全对于RGB没有了解
似乎刚刚学C++的那一课可以运用循环做图案什么的。
那么文件已经下载,一会编辑帖子发上来。

进行编辑。、。然而完全不知道该怎么写啊啊啊啊
果然还是功夫不到家QAQ
测试你的东方project认知程度?那就来玩[url=https://store.steampowered.com/app/930840/TouHouAsked/]《东方百问》[/url]吧!
东方风自作曲认知企划绝赞咕咕咕中
回复

使用道具 举报

bluer
公主殿下

梦石
0
星屑
283
在线时间
533 小时
注册时间
2013-10-19
回帖
2017
发表于 2015-9-5 21:45:15 | 显示全部楼层
看完了我只想说




太复杂不看
回复

使用道具 举报

永久原子

梦石
18
星屑
180
在线时间
2054 小时
注册时间
2010-10-25
回帖
3907

开拓者

发表于 2015-9-5 21:45:52 | 显示全部楼层
还真是伪活动啊,因为不是人人都能参加,起码我就不行。

点评

三是有的人不会,,,,  发表于 2015-9-5 22:02
伪 是因为一没申请 二没奖金之类的  发表于 2015-9-5 21:56
我只能是略知一二。。。我老师也说这东西需要比较高的几何基础  发表于 2015-9-5 21:50
人不在了,有事烧纸。
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2015-9-5 22:37:27 | 显示全部楼层
本帖最后由 RyanBern 于 2015-9-6 08:31 编辑

我就是随便参与一下,颜色调的不是很好。
今早起来调了一下颜色,这样调完之后色彩能亮一些。
Code Art.png
[pre lang="Ruby"]#red method
def red(i,j)
  x=i/512.0-1;y=1.5-j/512.0;
  r=x*x+(y-(x*x)**0.3333)**2
  return 255*Math.cos(4*r+2*Math::PI/3)
end
#green method
def green(i,j)
  x=i/512.0-1;y=1.5-j/512.0;
  r=x*x+(y-(x*x)**0.3333)**2
  return 255*Math.cos(4*r-2*Math::PI/3)
end
#bule method
def bule(i,j)
  x=i/512.0-1
  y=1.5-j/512.0
  r=x*x+(y-(x*x)**0.3333)**2
  return 255*Math.cos(4*r)
end
[/pre]

点评

习惯ture和flase之后,bule不再成问题  发表于 2015-9-6 16:38
没人吐槽bule吗?@RyanBern $m5script=0  发表于 2015-9-6 16:11
是时候展示我画直线的实力了  发表于 2015-9-5 23:47
$m5script=0,算  发表于 2015-9-5 23:31
喵呜喵5大触要来大连了吗QAQ【m5script = nil !  发表于 2015-9-5 23:24
回复

使用道具 举报

梦石
0
星屑
1816
在线时间
2527 小时
注册时间
2010-10-12
回帖
1336

开拓者

发表于 2015-9-6 01:23:24 | 显示全部楼层
本帖最后由 刺夜之枪 于 2015-9-5 12:25 编辑







↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
看了楼主帖子后
突然想到这个 2333333333333333
【转】

点评

QAQ我也要吃你的头像  发表于 2015-9-6 01:31

回复

使用道具 举报

唯一的信徒

梦石
0
星屑
1697
在线时间
1359 小时
注册时间
2013-1-29
回帖
1537
发表于 2015-9-6 02:58:34 | 显示全部楼层
本帖最后由 LBQ 于 2015-9-6 03:02 编辑

极其简易的Voronoi图
(直接运行代码会长度报错,不过测过了函数本身内部不超过140字符,包括函数的def green超过)
(严格意义上这个不算合法的代码·,改改应该行,不过那些打代码高尔夫的都不是省油的灯我也懒得继续改了._.)
Code Art.png
[pre lang="ruby"]#red method
def red(i,j)
  alias r rand
  w=h=1024
  @b||=Array.new(100){[r(w),r(h),Array.new(3,r(256))]}
  @p||=Array.new(3){Table.new(w,h)}
  0
end

#green method
def green(i,j)
  w=h=1024
        @s||=w.times{|x|h.times{|y|(@b.min_by{|b|Math::hypot(b[0]-x,b[1]-y)}[2]).each_with_index{|e,i| @p[x,y] = e}};1}
  @p[1][i,j]
end

#bule method
def bule(i,j)
        w=h=1024
        @p[2][i,j]
end
[/pre]

PS:玩code golf需谨慎,参与者的那群人很多很可怕
(然后原来用c的感觉开发起来比用ruby会舒服很多233,ruby干这种事还是慢)

点评

这个不错,估计QQ电脑版客户端那个东西就是这么弄的。不过看到green里面的循环已经意识到效率会十分感人。  发表于 2015-9-6 08:34
LBQ
还想起来貌似这个版本有bug,不打算修了累了  发表于 2015-9-6 03:03
『我只是一个正在潜心修炼的渣乐师罢了』
Dear Time\(^o^)/~


假如上面的图片挂了的话麻烦各位去发个帖 @ 一下 orzFly 让他修复 deartime
回复

使用道具 举报

精灵族の天使<

梦石
0
星屑
1712
在线时间
3039 小时
注册时间
2007-3-16
回帖
33092

开拓者贵宾

发表于 2015-9-6 09:46:37 | 显示全部楼层
Code Art.png
代码如下:
  1. #red method
  2. def red(i,j)
  3. #Your code, do not exceed 140 characters in length.
  4.   return ((i+j) % 256)
  5. end
  6. #green method
  7. def green(i,j)
  8. #Your code, do not exceed 140 characters in length.
  9.         return ((j %128) + (i % 128))
  10. end
  11. #bule method
  12. def bule(i,j)
  13. #Your code, do not exceed 140 characters in length.
  14.         return ((i %128) + (j % 128))
  15. end
复制代码
回复

使用道具 举报

梦石
0
星屑
48
在线时间
784 小时
注册时间
2013-1-4
回帖
1057
 楼主| 发表于 2015-9-6 13:13:09 | 显示全部楼层
@刺夜之枪 任意文本编辑器应该都能打开 最简单是用notepad...不过要记得编码保存为utf-8
RM-GUI延期。。。最近被黑心老板压迫T_T
二次元少女的shitake,长着长脸,身高165,蓝色卷双马尾,FCUP,瞳色黑色,病气和御宅属性,是天才少女。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部