matlab julia分形图,Three.js 朱丽亚集(Julia set)分形图案

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

var container;

var scene, camera, renderer;

var material, shaderUniforms = {},

shaderAttributes = {};

var plane;

var center = {

cx: 0,

cy: 0

};

var infoText = document.getElementById("complex-number");

var complexC = {

cx: -0.13573,

cy: -0.650

};

var time = 0;

var control = function() {

this.cx = 0.24;

this.cy = 0.64;

this.useMouse = true;

};

var gui = new dat.GUI({

width: 500

});

var controller = new control();

gui.add(controller, 'cx', -2.0, 2.0).step(0.01).listen();

gui.add(controller, 'cy', -2.0, 2.0).step(0.01).listen();

gui.add(controller, 'useMouse');

init();

createPlane();

tick();

function init() {

createScene();

center = {

x: window.innerWidth / 2,

y: window.innerHeight / 2

};

}

window.onresize = function() {

camera.aspect = window.innerWidth / window.innerHeight;

camera.updateProjectionMatrix();

renderer.setSize(window.innerWidth, window.innerHeight);

scene.getObjectByName("plane").geometry = new THREE.PlaneGeometry(window.innerWidth, window.innerWidth);

shaderUniforms.uResolution.x = window.innerWidth;

shaderUniforms.uResolution.y = window.innerHeight;

render();

};

window.onmousemove = function(e) {

complexC = {

cx: (e.clientX - center.x) / (window.innerWidth / 2) * 1,

cy: -(e.clientY - center.y) / (window.innerHeight / 2) * 1

};

};

function setUniforms() {

shaderUniforms = {

uResolution: {

type: "v2",

value: new THREE.Vector2(window.innerWidth, window.innerHeight)

},

uC: {

type: "v2",

value: new THREE.Vector2(complexC.cx, complexC.cy)

}

};

}

function createScene() {

container = document.getElementById('container');

scene = new THREE.Scene();

camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);

camera.position.z = 250;

camera.lookAt(scene.position);

renderer = new THREE.WebGLRenderer();

renderer.setSize(window.innerWidth, window.innerHeight);

renderer.setClearColor(0xffccff, 1);

container.appendChild(renderer.domElement);

}

function render() {

renderer.render(scene, camera);

}

function tick() {

requestAnimationFrame(tick);

update();

render();

}

function createPlane() {

setUniforms();

material = new THREE.ShaderMaterial({

attributes: shaderAttributes,

uniforms: shaderUniforms,

vertexShader: document.getElementById("vertexShader").textContent,

fragmentShader: document.getElementById("fragmentShader").textContent

});

var planeGeom = new THREE.PlaneGeometry(window.innerWidth, window.innerWidth);

plane = new THREE.Mesh(planeGeom, material);

plane.name = "plane";

scene.add(plane);

}

function update() {

if (controller.useMouse) {

shaderUniforms.uC.value.x = complexC.cx;

shaderUniforms.uC.value.y = complexC.cy;

controller.cx = complexC.cx;

controller.cy = complexC.cy;

} else {

shaderUniforms.uC.value.x = controller.cx;

shaderUniforms.uC.value.y = controller.cy;

}

infoText.innerHTML = 'C = ( ' + complexC.cx.toFixed(5) + ', ' + complexC.cy.toFixed(5) + 'i )';

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值