2.0.0 • Published 8 months ago

particle-system v2.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

example project using this library https://g-art.vercel.app/

npm install particle-system
yarn install particle-system
import import { GArt, GArtConfig } from "particle-system";


const container =  document.getElementById("app")

const system = new LorenzAttractor();

const config: GArtConfig = {
  system,
  container: document.getElementById('app') as HTMLElement,
  zoom: 100,
  material: {
    color: 'cyan',
    sizeParticle: 0.01,
    opacity: 0.1,
  },
  orbitConfig: {
    autoRotate: true,
  },
  stats: true,
};

const gArt = new GArt(config);
const callbacks = gArt.load();
callbacks.start();

Create system (example lorenz attractor)

https://en.wikipedia.org/wiki/Lorenz_system.

import { GArtParticle, GArtSystem } from "particle-system";

interface LorenzParticle extends GArtParticle {
  a: number;
  b: number;
  c: number;
  dt: number;
}

export class LorenzAttractor extends GArtSystem<LorenzParticle> {
  numberParticles = 4000000;
  speed = 1;

  make() {
    return {
      x: 1,
      y: 1,
      z: 1,
      a: 10,
      b: 39.99,
      c: 8 / 3,
      dt: this.random(0.001, 0.005),
    };
  }

  update() {
    for (let i = 0; i < this.numberParticles; i++) {
      const particle = this.particles[i];

      const dx = particle.a * (particle.y - particle.x) * particle.dt;

      const dy =
        (particle.x * (particle.b - particle.z) - particle.y) * particle.dt;

      const dz =
        (particle.x * particle.y - particle.c * particle.z) * particle.dt;

      particle.x += dx * this.speed;
      particle.y += dy * this.speed;
      particle.z += dz * this.speed;

      this.apply(i, particle.x, particle.y, particle.z);
    }
  }
}

export default LorenzAttractor;

How create ParticleSystem

for create a ParticleSystem we need two necessary functions, make and update.

class ExampleSystem extends GArtSystem {

	numberParticles = 10000 // define number of particles
	speed = 0.8 // speed of particles

	// define basic params for the particle and extra information
	make(){
		return {
			x: 0,
			y: 0,
			z: 0
		}
	}


	//function for update all particles
	update(){

		// iterate all particles
		for (let index = 0; index < this.numberParticles; index++) {

			const particle = this.particles[index];
			// ... calculate
			
			// function to apply changes
			this.apply(index, particle.x,particle.y,particle.z);

		}
	}
}

GArt

Params

interface GArtConfig {
  system: GArtSystem<GArtParticle>;
  container: HTMLElement;
  material: {
    color: string;
    opacity?: number;
    sizeParticle?: number;
  };
  zoom?: number;
  stats?: boolean;
  orbitConfig?: GArtOrbitControlConfig;
}



interface GArtOrbitControlConfig {
  enableDamping?: boolean;
  dampingFactor?: number;
  enableZoom?: boolean;
  autoRotate?: boolean;
  autoRotateSpeed?: number;
}

Callbacks

interface GArtCallbacks {
  start: () => void;
  stop: () => void;
  changeColor: (color: number) => void;
  changeOpacity: (opacity: number) => void;
  takePhoto: () => void;
}
2.0.0

8 months ago

0.0.14

2 years ago

0.0.13

2 years ago

0.0.12

2 years ago

0.0.11

2 years ago

0.0.10

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago

0.0.0

2 years ago