實驗三

依據(jù)processing的代碼在P5.js上實現(xiàn)類似的結(jié)果


一酗失、代碼本色0章——Perlin噪聲生成起伏地形

【參考例子】


參考例子


【實現(xiàn)結(jié)果】

[代碼]

var canvas = document.getElementById("canvas");

var ctx = canvas.getContext("2d");

var c = {}

var cw = canvas.width = 600;

c.x = cw / 2;

var ch = canvas.height = 600;

c.y = ch / 2;

ctx.lineJoin = "round";

ctx.strokeStyle = "#fff";

ctx.fillStyle = "rgba(0,0,0,1)";

var rad = Math.PI / 180;

var x, y;

var amplitude = 5;

var frequency = .02;

var phi = 0;

var increment = 0.05;

var lines = [];

function SquigglyLine(y) {

? ? this.y = y;

? ? this.xoff = Math.random() * 10000;

? ? this.Xoff = this.xoff;

? ? this.phi = Math.random() * 10000;

? ? this.draw = function(i) {

? ? ? ? ctx.beginPath();

? ? ? ? this.xoff = this.Xoff; // reset xoff;

? ? ? ? for (var x = -2; x < cw + 2; x++) {

? ? ? ? ? ? if (x > cw / 3 && x < 2 * cw / 3) {

? ? ? ? ? ? ? ? var k = map(x, cw / 3, 2 * cw / 3, 0, 180);

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? k = 0;

? ? ? ? ? ? }

? ? ? ? ? ? var y = -Math.abs(Math.sin((x + noise(this.xoff) * 100) * frequency + this.phi) * (amplitude + Math.sin(k * rad) * 50)) + this.y;

? ? ? ? ? ? ctx.lineTo(x, y);

? ? ? ? ? ? this.xoff += increment;

? ? ? ? }

? ? ? ? ctx.lineTo(cw + 2, ch + 2);

? ? ? ? ctx.lineTo(-2, ch + 2);

? ? ? ? ctx.closePath();

? ? ? ? ctx.fill();

? ? ? ? ctx.stroke();

? ? }

}

for (var y = 60; y < ch; y += 16) {

? ? var line = new SquigglyLine(y);

? ? lines.push(line);

}

function Draw() {

? ? requestId = window.requestAnimationFrame(Draw);

? ? ctx.fillRect(0, 0, cw, ch);

? ? noiseDetail(2, .5);

? ? for (var i = 0; i < lines.length; i++) {

? ? ? ? lines[i].phi += 1 / 30;

? ? ? ? lines[i].draw(i);

? ? }

}

requestId = window.requestAnimationFrame(Draw);

function map(n, a, b, _a, _b) {

? ? var d = b - a;

? ? var _d = _b - _a;

? ? var u = _d / d;

? ? return _a + (n - a) * u;

}

[效果圖]

效果圖



二义钉、向量

【參考例子】


參考例子1


參考例子2

【實驗結(jié)果】

[實驗代碼]

var x=0;

var y=0;

var targetX=0;

var targetY=0;

var easing=0.1;

function setup() {

? createCanvas(400, 400);

? x=mouseX;

? y=mouseY;

}

function draw() {

? background(220);

? targetX=mouseX;

? targetY=mouseY;

? x+=(targetX-x)*easing;

? y+=(targetY-y)*easing;

? ellipse(x,y,20,20);

}

[實驗效果圖]


小球跟隨鼠標移動



三、力學

【參考例子】



【實驗結(jié)果】


[代碼]

function Mover(loc, c) {

? ? this.loc = createVector(width / 2, height / 2);

? ? this.vel = createVector();

? ? this.acc = createVector();

? ? this.r = random(3, 7);

? ? this.c = c;

? ? this.alpha = 1;

? ? if (typeof loc !== "undefined") {

? ? ? ? this.loc = createVector(loc.x, loc.y);

? ? }

? ? this.applyForce = function(a) {

? ? ? ? this.acc.add(a);

? ? }

? ? this.update = function() {

? ? ? ? this.vel.add(this.acc);

? ? ? ? this.acc.mult(0);

? ? ? ? this.alpha *= .98;

? ? ? ? if (this.loc.x < 0 || this.loc.x > width) {

? ? ? ? ? ? this.vel.x *= -.8;

? ? ? ? ? ? if (this.loc.x < 0) this.loc.x = 0;

? ? ? ? ? ? if (this.loc.x > width) this.loc.x = width;

? ? ? ? }

? ? ? ? if (this.loc.y < 0 || this.loc.y > height) {

? ? ? ? ? ? this.vel.y *= -.8;

? ? ? ? ? ? if (this.loc.y < 0) this.loc.y = 0;

? ? ? ? ? ? if (this.loc.y > height) this.loc.y = height;

? ? ? ? }

? ? ? ? this.loc.add(this.vel);

? ? }

? ? this.display = function() {

? ? ? ? fill(this.c, 255, 255, this.alpha);

? ? ? ? noStroke();

? ? ? ? ellipse(this.loc.x, this.loc.y, this.r + (1 / this.alpha), this.r + (1 / this.alpha));

? ? }

}

var movers = [];

function setup() {

? ? colorMode(HSB);

? ? createCanvas(window.innerWidth, window.innerHeight);

? ? background(50);

}

function draw() {

? ? background(20);

? ? if (mouseDown || frameCount % 3 == 0) {

? ? ? ? for (var x = 0; x < (mouseDown ? 2 : 1); x++) {

? ? ? ? ? ? var m = new Mover(createVector(mouseX, mouseY), ((frameCount + 128) / 1 % 360));

? ? ? ? ? ? m.applyForce(createVector(random(-1, 1), random(-1, 1)).mult(.5));

? ? ? ? ? ? movers.push(m);

? ? ? ? }

? ? }

? ? for (var x = movers.length - 1; x >= 0; x--) {

? ? ? ? var mov = movers[x];

? ? ? ? if (mov.alpha < .001) {

? ? ? ? ? ? movers.shift(x);

? ? ? ? } else {

? ? ? ? ? ? // randomize movement a bit:

? ? ? ? ? ? mov.applyForce(createVector(random(-1, 1), random(-1, 1)).mult(.1));

? ? ? ? ? ? // enables gravity:

? ? ? ? ? ? //mov.applyForce(createVector(0,.25));

? ? ? ? ? ? mov.update();

? ? ? ? ? ? mov.display();

? ? ? ? }

? ? }

}

var mouseDown = false;

function mousePressed() {

? ? mouseDown = true;

}

function mouseReleased() {

? ? mouseDown = false;

}


[實驗結(jié)果]


四规肴、振蕩

[參考例子]



參考例子1


參考例子2

【實驗結(jié)果】

[實驗代碼]

function setup() {

? ? createCanvas(windowWidth - 100, windowHeight - 100);

? ? frameRate(30);

? ? pixelDensity(2);

}

var print = function(msg) {

? ? console.log(msg);

}

r = 2;

function draw() {

? ? if (frameCount * 5 <= windowWidth - 100)

? ? ? ? ellipse(frameCount * 5, (height / 2), r, r);

? ? else {

? ? ? ? var wave = sin(radians(frameCount) * 30) * 20 + (height / 2);

? ? ? ? fill('#ffffff');

? ? ? ? ellipse(frameCount * 5 % (windowWidth - 100), (height / 2), r, r);

? ? ? ? fill('#000000');

? ? ? ? ellipse(frameCount * 5 % (windowWidth - 100), wave, r, r);

? ? }

}


[實驗結(jié)果]



五捶闸、粒子

【參考例子】


【實驗結(jié)果】

[實驗代碼]

var stars = [], // Array that contains the stars

? ? WIDTH = window.innerWidth,

? ? HEIGHT = window.innerHeight,

? ? FPS = 15, // Frames per second

? ? NUM_STARS = WIDTH * 2; // Number of stars

function setup() {

? ? createCanvas(WIDTH, HEIGHT);

? ? // Push stars to array

? ? for (var i = 0; i < NUM_STARS; i++) {

? ? ? ? stars.push({

? ? ? ? ? ? x: 0,

? ? ? ? ? ? y: 0,

? ? ? ? ? ? offset: Math.random() * 360,

? ? ? ? ? ? // Weight orbit a little to be outside origin

? ? ? ? ? ? orbit: (Math.random() + 0.01) * max(WIDTH, HEIGHT),

? ? ? ? ? ? radius: Math.random() * 2,

? ? ? ? ? ? vx: Math.floor(Math.random() * 10) - 5,

? ? ? ? ? ? vy: Math.floor(Math.random() * 10) - 5

? ? ? ? });

? ? }

? ? frameRate(FPS);

? ? loop();

}

function draw() {

? ? background(24, 24, 24);

? ? push();

? ? noFill();

? ? colorMode(RGB, 255, 255, 255, 1);

? ? stroke(255, 255, 255, 1);

? ? strokeCap(1);

? ? strokeWeight(2);

? ? for (var i = 0, x = stars.length; i < x; i++) {

? ? ? ? var s = stars[i];

? ? ? ? ellipse(s.x, s.y, s.radius, 0);

? ? }

? ? pop();

? ? update();

}

function update() {

? ? var originX = WIDTH / 2;

? ? var originY = HEIGHT / 2;

? ? for (var i = 0, x = stars.length; i < x; i++) {

? ? ? ? var s = stars[i];

? ? ? ? var rad = (frameCount * (1 / (s.orbit * 2 + s.offset)) + s.offset) % TAU;

? ? ? ? s.x = (originX + cos(rad) * (s.orbit * 2));

? ? ? ? s.y = (originY + sin(rad) * (s.orbit));

? ? }

}


[實驗結(jié)果]


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拖刃,隨后出現(xiàn)的幾起案子删壮,更是在濱河造成了極大的恐慌,老刑警劉巖兑牡,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件央碟,死亡現(xiàn)場離奇詭異,居然都是意外死亡均函,警方通過查閱死者的電腦和手機亿虽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苞也,“玉大人洛勉,你說我怎么就攤上這事∪绯伲” “怎么了收毫?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長殷勘。 經(jīng)常有香客問我此再,道長,這世上最難降的妖魔是什么劳吠? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任引润,我火速辦了婚禮巩趁,結(jié)果婚禮上痒玩,老公的妹妹穿的比我還像新娘淳附。我一直安慰自己,他們只是感情好蠢古,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布奴曙。 她就那樣靜靜地躺著,像睡著了一般草讶。 火紅的嫁衣襯著肌膚如雪洽糟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天堕战,我揣著相機與錄音坤溃,去河邊找鬼。 笑死嘱丢,一個胖子當著我的面吹牛薪介,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播越驻,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼汁政,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缀旁?” 一聲冷哼從身側(cè)響起记劈,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎并巍,沒想到半個月后目木,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡懊渡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年嘶窄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片距贷。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡柄冲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忠蝗,到底是詐尸還是另有隱情现横,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布阁最,位于F島的核電站戒祠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏速种。R本人自食惡果不足惜姜盈,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望配阵。 院中可真熱鬧馏颂,春花似錦示血、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亿絮,卻和暖如春告喊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背派昧。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工黔姜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒂萎。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓地淀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岖是。 傳聞我的和親對象是個殘疾皇子帮毁,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 先看下復雜參數(shù) 一般的都是key Value的鍵值對.現(xiàn)在字典里面包含數(shù)組,數(shù)組中還有字典. 通常情況下我們使用下...
    司馬捷閱讀 5,351評論 1 7
  • 生活或許會有許多的茍且與不堪,親愛的自己呀豺撑,你不要失望烈疚,總會有那么一個人會在你看不到的地方默默的愛著你。 ...
    流諳閱讀 153評論 0 0
  • 家有一年級小學生聪轿,每個月會有一次大作業(yè)爷肝,作業(yè)內(nèi)容是做一個project和一個presentation,內(nèi)容一般是調(diào)...
    懸崖上的小樹閱讀 754評論 5 9
  • 歲月從背后 溫柔地掏出 一把利劍 在世人冷如巖石的臉上 兇殘地刻下 到此一游 誰讓世人,得罪了日子呢音瓷? 日子追趕著...
    江南墨白閱讀 352評論 0 5
  • 日本重松清《維他命F》(我命名為:七個歐吉桑的中年綜合癥)讀后記对嚼。 “怎么辦?” 阿秀把盆子里的菜反反復復地洗绳慎,一...
    風生閱讀 374評論 0 2