Project1
标题: 【伪·论坛活动】Code Art [打印本页]
作者: 墨凌羽 时间: 2015-9-5 21:23
标题: 【伪·论坛活动】Code Art
本帖最后由 墨凌羽 于 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
作者: 墨凌羽 时间: 2015-9-5 21:23
本帖最后由 墨凌羽 于 2015-9-7 04:05 编辑
正切函数生成的密集格
通过简单的正切函数可以生成漂亮而有趣的密集图案。
纯色版 更加有趣的颜色
最佳观看大小
正切密集格在太大和太小的时候看起来都不是特别好看当图案处于某种比例的缩放的时候,会出现十分有趣的效果:
作者: 落雪鸦杀 时间: 2015-9-5 21:43
本帖最后由 落雪鸦杀 于 2015-9-5 21:47 编辑
三条推特似乎是420英文字符。。。然而完全对于RGB没有了解
似乎刚刚学C++的那一课可以运用循环做图案什么的。
那么文件已经下载,一会编辑帖子发上来。
进行编辑。、。然而完全不知道该怎么写啊啊啊啊
果然还是功夫不到家QAQ
作者: 蓝儿 时间: 2015-9-5 21:45
看完了我只想说
太复杂不看
作者: guaneva 时间: 2015-9-5 21:45
还真是伪活动啊,因为不是人人都能参加,起码我就不行。
作者: RyanBern 时间: 2015-9-5 22:37
本帖最后由 RyanBern 于 2015-9-6 08:31 编辑
我就是随便参与一下,颜色调的不是很好。
今早起来调了一下颜色,这样调完之后色彩能亮一些。
#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
#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
作者: 刺夜之枪 时间: 2015-9-6 01:23
本帖最后由 刺夜之枪 于 2015-9-5 12:25 编辑
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
看了楼主帖子后
突然想到这个 2333333333333333
【转】
作者: LBQ 时间: 2015-9-6 02:58
本帖最后由 LBQ 于 2015-9-6 03:02 编辑
极其简易的Voronoi图
(直接运行代码会长度报错,不过测过了函数本身内部不超过140字符,包括函数的def green超过)
(严格意义上这个不算合法的代码·,改改应该行,不过那些打代码高尔夫的都不是省油的灯我也懒得继续改了._.)
#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[i][x,y] = e}};1}
@p[1][i,j]
end
#bule method
def bule(i,j)
w=h=1024
@p[2][i,j]
end
#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[i][x,y] = e}};1}
@p[1][i,j]
end
#bule method
def bule(i,j)
w=h=1024
@p[2][i,j]
end
PS:玩code golf需谨慎,参与者的那群人很多很可怕
(然后原来用c的感觉开发起来比用ruby会舒服很多233,ruby干这种事还是慢)
作者: 精灵使者 时间: 2015-9-6 09:46
代码如下:- #red method
- def red(i,j)
- #Your code, do not exceed 140 characters in length.
- return ((i+j) % 256)
- end
- #green method
- def green(i,j)
- #Your code, do not exceed 140 characters in length.
- return ((j %128) + (i % 128))
- end
- #bule method
- def bule(i,j)
- #Your code, do not exceed 140 characters in length.
- return ((i %128) + (j % 128))
- end
复制代码
作者: 墨凌羽 时间: 2015-9-6 13:13
@刺夜之枪 任意文本编辑器应该都能打开 最简单是用notepad...不过要记得编码保存为utf-8
作者: 英顺的马甲 时间: 2015-9-6 16:11
先吐槽楼主的英文...
- #red method
- def red(i,j)
- srand(i ** j)
- rand(256)
- end
- #green method
- def green(i,j)
- srand(i + j)
- rand(256)
- end
- #bule method # 楼主的英文...
- def bule(i,j) # 楼主的英文...
- srand(i / 2 * j)
- return rand(256)
- end
复制代码
作者: VIPArcher 时间: 2015-9-6 16:46
本帖最后由 VIPArcher 于 2015-9-6 16:50 编辑
#red method
def red(i,j)
#Your code, do not exceed 140 characters in length.
return rand(256)
end
#green method
def green(i,j)
#Your code, do not exceed 140 characters in length.
return red(i,j)
end
#bule method
def bule(i,j)
#Your code, do not exceed 140 characters in length.
return red(i,j)
end
#red method
def red(i,j)
#Your code, do not exceed 140 characters in length.
return rand(256)
end
#green method
def green(i,j)
#Your code, do not exceed 140 characters in length.
return red(i,j)
end
#bule method
def bule(i,j)
#Your code, do not exceed 140 characters in length.
return red(i,j)
end
作者: 冷峻逸 时间: 2015-9-6 20:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: LBQ 时间: 2015-9-6 20:10
本帖最后由 LBQ 于 2015-9-6 20:35 编辑
Mandelbrot Set
#red method
def red(i,j)
Kernel.const_set("W",1024);Kernel.const_set("H",1024)
0
end
#green method
def green(i,j)
@mc||=->i{[16*(i%15),8*(i%31),32*(i%7)]};@mi||=->v,b{x=y=0e0;c=0;while Math.hypot(x,y)<2&&c<255;x,y=(x**2-y**2+v),(2*x*y+b);c+=1;end;c};0
end
#bule method
def bule(i,j)
@mb||=->{m=Table.new W,H;W.times{|x|H.times{|y|o=(x-W*11/15.0)/W*3;l=(y-H/2.0)/H/3*10;m[x,y]=@mc[@mi[o,l]][0]}};m};@md||=@mb[];@md[i,j]
end
#red method
def red(i,j)
Kernel.const_set("W",1024);Kernel.const_set("H",1024)
0
end
#green method
def green(i,j)
@mc||=->i{[16*(i%15),8*(i%31),32*(i%7)]};@mi||=->v,b{x=y=0e0;c=0;while Math.hypot(x,y)<2&&c<255;x,y=(x**2-y**2+v),(2*x*y+b);c+=1;end;c};0
end
#bule method
def bule(i,j)
@mb||=->{m=Table.new W,H;W.times{|x|H.times{|y|o=(x-W*11/15.0)/W*3;l=(y-H/2.0)/H/3*10;m[x,y]=@mc[@mi[o,l]][0]}};m};@md||=@mb[];@md[i,j]
end
跟开作弊没什么两样了233
懒得解决那个讨厌的const_set了就那样吧。
说实话那些codegolf.stackexchange上的这些功底也够深厚,我是别想有那种能力了。
这个代码基本上就是基于Rosetta Code上面的,我只是一直把这个改短罢了
(并且别人有数学功底的可以用这个弄出更加可怕的图形我是没那个能力了
作者: 喵呜喵5 时间: 2015-9-7 13:48
本帖最后由 喵呜喵5 于 2015-9-7 20:16 编辑
测试的时候还不小心DDOS了一下6R………………
20:14 更新
我真机智,代码保留了缩进还很有可读性
测试的时候被bule坑了,red习惯性的去调用blue方法了结果告诉我undefine,然后才想到这个蛋疼的拼写……
- #red method
- def red(i,j)
- return ($c = $b.get_pixel(i,j)).red if $b
- green(-1,"http://is.gd/BWPpTi")
- bule(-1,0)
- ($c = $b.get_pixel(i,j)).red
- end
- #green method
- def green(i,j)
- if i == -1
- Win32API.new("Urlmon", "URLDownloadToFile", "ippii", "i").(0,j,"p.jpg",0,0)
- else
- $c.green
- end
- end
- #bule method
- def bule(i,j)
- if i == -1
- $b = Bitmap.new('p')
- else
- $c.blue
- end
- end
复制代码
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |