https://github.com/kchapelier/convchain
Javascript port of https://github.com/mxgmn/ConvChain
https://github.com/kchapelier/convchain
javascript procedural-generation
Last synced: 13 days ago
JSON representation
Javascript port of https://github.com/mxgmn/ConvChain
- Host: GitHub
- URL: https://github.com/kchapelier/convchain
- Owner: kchapelier
- License: mit
- Created: 2016-08-20T14:37:19.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2016-11-04T13:24:21.000Z (almost 9 years ago)
- Last Synced: 2024-12-29T23:16:05.186Z (9 months ago)
- Topics: javascript, procedural-generation
- Language: JavaScript
- Homepage:
- Size: 10.7 KB
- Stars: 50
- Watchers: 4
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# convchain
Vanilla javascript port of [ConvChain](https://github.com/mxgmn/ConvChain).
[Interactive demo](http://www.kchapelier.com/convchain-demo/)
## Installing and testing
With [npm](http://npmjs.org) do:
```
npm install convchain
```## Basic example
```js
var ConvChain = require('convchain');var samplePattern = Uint8Array.from([
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1
]);var width = 45,
height = 20;var convChain = new ConvChain(samplePattern);
var generatedPattern = convChain.generate([width, height], 3, 0.5, 4); // a flat Uint8Array
// some code to display the result
for (var y = 0; y < height; y++) {
var s = '';
for (var x = 0; x < width; x++) {
s += ' ' + generatedPattern[x + y * width];
}
console.log(s);
}
```## Public API
### Constructor
**new ConvChain(sample[, sampleSize])**
- *sample :* Sample pattern as a flat array or a 2D array.
- *sampleSize :* Indicate the width and height of the sample when used with a flat array, if omitted the sample pattern is assumed to be a square.```js
var testSample = Uint8Array.from([
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
]); //flat arrayvar convChain = new ConvChain(testSample, [14, 10]);
``````js
var testSample = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]; //2D arrayvar convChain = new ConvChain(testSample);
```### Methods
**convChain.setSample(sample[, sampleSize])**
Same arguments as the constructor.
**convChain.generate(resultSize, n, temperature, iterations[, rng])**
Generate a new pattern based on the sample pattern. The generated pattern is returned as a flat Uin8Array.
- *resultSize :* Width and height of the generated pattern.
- *n :* Receptor size, an integer greater than 0.
- *temperature :* Temperature, a float.
- *iterations :* Number of iterations.
- *rng :* A function to use as random number generator, defaults to Math.random.```js
var result = convChain.generate([100, 50], 3, 0.5, 4);
```**convChain.iterate(field, resultSize, n, temperature[, tries[, rng]])**
Execute a specific number of operations on a given pattern.
- *field :* An existing pattern given as a flat Uint8Array. If *null* is given, a noisy pattern will be used instead.
- *resultSize :* Width and height of the generated pattern.
- *n :* Receptor size, an integer greater than 0.
- *temperature :* Temperature, a float.
- *tries :* Number of operations to execute, default to the result's width multiplied by the result's height
- *rng :* A function to use as random number generator, defaults to Math.random.```js
var field = null;for (var i = 0; i < 32; i++) {
field = convChain.iterate(field, [64, 64], 3, 0.2, 128);// ... do something with the return pattern here
}
```## Changelog
### [1.1.0](https://github.com/kchapelier/convchain/tree/1.1.0) (2016-08-25)
* Implement the iterate method.
### [1.0.0](https://github.com/kchapelier/convchain/tree/1.0.0) (2016-08-21)
* First implementation.
### License
MIT