p5实现一个三维有限自动机效果代码
代码语言:html
所属分类:三维
代码描述:p5实现一个三维有限自动机效果代码,可旋转缩放
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> </head> <body style="background-color:rgb(0,0,0);"> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/p5.js"></script> <script > //up and down change the rules for life //spacebar will change the number of nodes //edges and dead/alive are random initially //doodle code for mathober "rule" prompt (needs cleanup) //the last rule is just death //i have many more complex rules in mind, but don't have time to do this all in one day. let n = 50; let r = 200; let rule = 6; let nodeArray = []; let edgeArray = []; let neighborArray = []; let nRules = 8; function setup() { createCanvas(windowWidth, windowHeight, WEBGL); r = min(width, height) / 2.5; angleMode(DEGREES); initializeNodes(); initializeEdges(); //frameRate(1); background(100); fill(191, 214, 212); plotEdges(); ruleDots(); for (let i = 0; i < n; i++) { nodeArray[i].display(); } } function draw() { background(100); orbitControl(); rotateX(frameCount / 10); rotateX(frameCount / 10); ruleDots(); plotEdges(); applyRules(); noStroke(); for (let i = 0; i < n; i++) { nodeArray[i].display(); } livingNeighbors(); } class nodeS { constructor(nId, a) { this.x = r * sin((nId * 360) / n) * sin((nId * 180) / n); this.y = r * cos((nId * 180) / n); this.z = r * sin((nId * 180) / n) * cos((nId * 360) / n); this.alive = a; } display() { if (this.alive) { fill(255); } else { fill(20); } push(); noStroke(); translate(this.x, this.y, this.z); sphere(5, 5, 5); pop(); } } function initializeNodes() { for (let i = 0; i < n; i++) { nodeArray.push(new nodeS(i, randomBool())); } } function initializeEdges() { for (let i.........完整代码请登录后点击上方下载按钮下载查看
网友评论0