那个站在科学与艺术路口撸码绘的女同学(一)

> 因本学期接触了《互动媒体》这门课程,了解到了“码绘”的神奇,所以总结两篇文章,记录自己码绘路上的辛酸喜乐。《那个站在科学与艺术路口撸码绘的女同学(一)》主要为静态码绘,而(二)主要为动态码绘分享,若有错误请指出,欢迎下方留言区评论交流。

码绘是啥?

码绘是啥?你看这个是吗?

这就是颗大白菜上画了几条向量,是个啥码绘啊?!博主你不要逗我。

那你再看这个,又是啥?

这就是刚刚那颗大白菜啊,舞动的大白菜,现在算码绘了吧?

这颗大白菜其实是圆心出发每一个弧度上半径都不一样的一个圆,然后嵌套另外一个圆,用迭代的方法生成不同的弧度然后根据弧度生成不同的半径,然后再利用sin正弦波+时间,让半径动起来,于是就是一颗跳舞的大白菜。

//作者:叶师傅

//链接:用Processing写一颗跳舞的大白菜是什么感受?

//来源:知乎

//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

void setup() {

size(1280, 720, OPENGL);

}

void draw() {

background(0);

strokeWeight(2);

stroke(255);

noFill();

//迭代生成带半径不停变化的圆

for (int i = 0; i < 300; i=i+40) {

int vertexCount = int(map(i, 0, 299, 3, 100));

//圆上点的个数随着半径不同而不同

mPolygon(width/2, height/2, vertexCount, i, i/10);

}

}

void mPolygon(int x, int y, int numOfVertx, int br, int rOff) {

beginShape();

for (int i=0; i<numOfVertx; i++) {

//正玄波结合时间给一个周而复始的时间区间

float pingPong = sin(radians(millis()/10.0+100*i));

//圆的半径在时间区间内循环往复

float r = br+map(pingPong, -1, 1, -rOff, rOff);

//根据圆心位置和半径计算圆上的点

vertex(x+cos(radians(i*360/numOfVertx))*r,

y+sin(radians(i*360/numOfVertx))*r);

}

endShape(CLOSE);

}

```

所以啥是码绘呢?简而言之就是“用代码绘画”。

我的码绘之旅

(答应我,看我第一幅码绘别说“chiou”!!)

了解了什么是码绘,我就兴致勃勃的开始尝试第一幅码绘,我的工具是P5.js。((p5.js Web Editor)有自己的在线编辑器,使用js语言在VsCode中编辑也十分方便,(p5.js | reference)也可以直接翻译成中文,方便阅读。)

本次实验,我先构思好要画的图,把他们分解成每一个基础的单一图形,比如点、线、圆形、矩形等等,然后确定每个图形的坐标和大小,最后用P5.js来编写代码,实现静态图片的绘制。而用手绘的方法,我就是照猫画虎,对照着代码画出来的图画,只考虑了图形图案的大致位置,而没有像编程一样,要精确的计算每一个元素图案的准确位置。

这个看似丑陋并且简单的图画,当时却画了很久来调整大小、位置。完整P5.js代码如下:

let sun_y=0;

function setup() {

createCanvas(1000, 500);

// noStroke();

}

function draw() {

background(237,222,139);

strokeWeight(20);

sun_y += 1

if(sun_y==200){

sun_y=1

}

background(204);

// 绘制一个太阳

fill(255,0,0)

stroke(255, 255, 0)

strokeWeight(6)

ellipse(360, sun_y, 100, 100)

// 开始绘制山的图形

// 设置颜色为灰色

fill(45,45,45)

stroke(0, 0, 0)

strokeWeight(1)

quad(10,200,280,40,300,350,0,350);

quad(200,160,500,100,500,350,280,350);

quad(650,220,800,170,1000,350,680,350);

quad(450,200,600,50,700,350,400,350);

// 结束绘制图形

ellipse(350, 400, 90, 90); // 车轮

ellipse(650, 400, 90, 90);

fill(0, 0, 160); // Red color

quad(450,180,550,180,750,400,250,400);//顶

fill(255, 0, 160); // Red color

quad(250,300,750,300,750,400,250,400);//车厢

fill(96,13,159);

fill(0,255,0);//树

triangle(100,200,170,300,30,300);

triangle(100,280,170,380,30,380);

fill(155,74,18);

quad(95,380,105,380,105,480,95,480);

fill(0,255,0);

triangle(900,200,970,300,830,300);//树

triangle(900,280,970,380,830,380);

fill(155,74,18);

quad(895,380,905,380,905,480,895,480);

}

使用P5.js作画的困难在于,需要先确定好要怎么做,做什么样,精确的计算坐标、大小,不能出现一点错误,不然会影响全局。而手绘可以边画边想,并且修改容易,局部对整体的影响没有代码的大,可以画的图形可选性也大。

码绘不是都像我这么low的,下面我用大佬的码绘作品证明给你看。

码绘能有多性感?

先前,Kyle McCormick 在 StackExchange 上发起了一个叫做Tweetable Mathematical Art 的比赛,参赛者需要用三条推这么长的代码来生成一张图片。具体地说,参赛者需要用 C++ 语言编写 RD 、 GR 、 BL 三个函数,每个函数都不能超过 140 个字符。每个函数都会接到 i 和 j 两个整型参数(0 ≤ i, j ≤ 1023),然后需要返回一个 0 到 255 之间的整数,表示位于 (i, j) 的像素点的颜色值。举个例子,如果 RD(0, 0) 和 GR(0, 0) 返回的都是 0 ,但 BL(0, 0) 返回的是 255 ,那么图像的最左上角那个像素就是蓝色。参赛者编写的代码会被插进下面这段程序当中(我做了一些细微的改动),最终会生成一个大小为 1024×1024 的图片。

这是网站上暂时排名第一的作品,它的代码是:

unsigned char RD(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127;

}

unsigned char GR(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;

}

unsigned char BL(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;

}

还有其他一些优秀作品和代码,可以进入链接查看[用三段 140 字符以内的代码生成一张 1024×1024 的图片](用三段 140 字符以内的代码生成一张 1024×1024 的图片)

> 以上内容来自知乎——烧茄子,原文 by Matrix67

以上就是来自刚接触码绘并且被大佬码绘震惊吸引的小白——珠珠同学。下篇博客中我将继续分享动态码绘的相关知识。欢迎各位大佬点赞、留言评论,带小白我一起飞。

本篇首发于CSDN,引用请注明出处。

那个站在科学与艺术路口撸码绘的女同学(一) - weixin_41662865的博客 - CSDN博客

那个站在科学与艺术路口撸码绘的女同学(二) - weixin_41662865的博客 - CSDN博客

知乎:Karmy - 知乎

也欢迎微信联系交流:DDA-zhu-

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,343评论 0 2
  • 前方是一片迷雾 像我和你 没有结和果 近了 又近了 害怕也期待 车轮卷起的不只是烟尘 路过一片闪亮的光 我想 你或...
    氵川阅读 186评论 2 1
  • 晚上带孩子上厕所,孩子突然跟我说起:“妈妈,我发现了一只蜘蛛,我告诉爸爸了,但是爸爸都弄不到他,我好怕怕呀。”我忙...
    香草山66阅读 140评论 2 1
  • 俗话说的话,没有p过的皂片不是好皂片。没有磨过皮的脸拿不出手 虽然现在市面上各种磨皮打光亮白的自拍相机一抓一大把,...
    菜花小噗噗阅读 239评论 0 4
  • javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都...
    丶灰太狼他叔阅读 444评论 0 1