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