More README.md files updated in 2015/
Fix formatting. Spelling / typo errors fixed. Possibly other changes as well. I still have to check 2015/muth and 2015/schweikhardt and 2015/yang.
This commit is contained in:
1 parent
a23d24f803
commit
35fb326b37
7 files changed
+126
-61
No files matched your search
+59
-25
@@ -1,11 +1,11 @@
|
||||
# Most Diffused Reaction
|
||||
|
||||
Someone Anonymous
|
||||
Twitter: @hirekoke
|
||||
Someone Anonymous
|
||||
Twitter: @hirekoke
|
||||
|
||||
Yusuke Endoh
|
||||
<https://github.com/mame/>
|
||||
Twitter: @mametter
|
||||
Yusuke Endoh
|
||||
<https://github.com/mame/>
|
||||
Twitter: @mametter
|
||||
|
||||
# To build:
|
||||
|
||||
@@ -21,6 +21,11 @@ make
|
||||
|
||||
Connect to port http://localhost:10333 with your browser.
|
||||
|
||||
The author said he had no recent version of macOS to test to see if this works
|
||||
but in 2023 [Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) did this
|
||||
and reported that it works well. He also said he really loved it! Thank you
|
||||
Cody!
|
||||
|
||||
### Try:
|
||||
|
||||
```sh
|
||||
@@ -55,40 +60,55 @@ cc -O3 -std=c99 \
|
||||
```
|
||||
|
||||
Then, run it under `tcpserver` command in
|
||||
[ucspi-tcp](http://cr.yp.to/ucspi-tcp.html) package, which was created by Daniel
|
||||
J. Bernstein, IOCCC 1989 "Best of Show" winner.
|
||||
[ucspi-tcp](http://cr.yp.to/ucspi-tcp.html) package, which was created by
|
||||
[Daniel J. Bernstein](/winners.html#Daniel_J._Bernstein), [IOCCC 1991 "Best of
|
||||
Show"](../../1991/brnstnd/brnstnd.c) ([README.md](../../1991/brnstnd/README.md)).
|
||||
|
||||
$ tcpserver -v 127.0.0.1 10333 ./prog ioccc.txt
|
||||
|
||||
Finally, open `http://127.0.0.1:10333/` by a modern browser supporting HTML5. You can use the mouse cursor to place drops into the Petri dish interactively.
|
||||
Finally, open `http://127.0.0.1:10333/` by a modern browser supporting HTML5.
|
||||
You can use the mouse cursor to place drops into the Petri dish interactively.
|
||||
|
||||
|
||||
### Description
|
||||
|
||||
This is a simulator of *reaction-diffusion systems*.
|
||||
|
||||
Reaction-diffusion systems, proposed by Alan Turing in [1], are mathematical models in which two chemical substances are transformed into each other (*local chemical reactions*) and spread out (*diffusion*). Their interactions sometimes form non-trivial patterns, such as spots, spiral, dappling, and labyrinths.
|
||||
Reaction-diffusion systems, proposed by Alan Turing in [1], are mathematical
|
||||
models in which two chemical substances are transformed into each other (*local
|
||||
chemical reactions*) and spread out (*diffusion*). Their interactions sometimes
|
||||
form non-trivial patterns, such as spots, spiral, dappling, and labyrinths.
|
||||
|
||||
The systems are generally formulated as follows:
|
||||
|
||||
du/dt = F(u, v) + Du * laplacian(u)
|
||||
dv/dt = G(u, v) + Dv * laplacian(v)
|
||||
|
||||
The functions `F(u, v)` and `G(u, v)` represent reactions of each substance, and the parameters `Du` and `Dv` are diffusion coefficients. By changing the functions and parameters, you can see a wide range of behaviors.
|
||||
The functions `F(u, v)` and `G(u, v)` represent reactions of each substance, and
|
||||
the parameters `Du` and `Dv` are diffusion coefficients. By changing the
|
||||
functions and parameters, you can see a wide range of behaviors.
|
||||
|
||||
See [the Wikipedia article of "Reaction-diffusion system"](https://en.wikipedia.org/wiki/Reaction%E2%80%93diffusion_system) in detail.
|
||||
See [the Wikipedia article of "Reaction-diffusion
|
||||
system"](https://en.wikipedia.org/wiki/Reaction%E2%80%93diffusion_system) in
|
||||
detail.
|
||||
|
||||
This program simulates the systems. The field consists of 128 x 128 cells. Each cell includes infomration of an amount of the two substances, and interacts with neighbor cells (in terms of von Neumann neighborhood) in each frame.
|
||||
This program simulates the systems. The field consists of 128 x 128 cells.
|
||||
Each cell includes information of an amount of the two substances, and interacts
|
||||
with neighbor cells (in terms of von Neumann neighborhood) in each frame.
|
||||
|
||||
|
||||
### Configuration
|
||||
|
||||
You can change the model, initial pattern, simulation speed, and color via macro definition.
|
||||
You can change the model, initial pattern, simulation speed, and color via macro
|
||||
definition.
|
||||
|
||||
|
||||
#### Model: `-Delta_u=<expression> -Delta_v=<expression>`
|
||||
|
||||
The definitions represent the equations of reaction-diffusion system. For example, the following is [the Gray-Scott model](http://groups.csail.mit.edu/mac/projects/amorphous/GrayScott/) in TeX notation.
|
||||
The definitions represent the equations of reaction-diffusion system. For
|
||||
example, the following is [the Gray-Scott
|
||||
model](http://groups.csail.mit.edu/mac/projects/amorphous/GrayScott/) in TeX
|
||||
notation.
|
||||
|
||||
\frac{\partial u}{\partial t} = D_u \Delta u - u v^2 + F (1 - u)
|
||||
\frac{\partial v}{\partial t} = D_v \Delta v + u v^2 - v (F + K)
|
||||
@@ -102,9 +122,13 @@ You can specify this model as follows:
|
||||
|
||||
#### Initial pattern: `-DUV_BACKGROUND=<u0>,<v0> -DUV_DROP=<u1>,<v1>`
|
||||
|
||||
The definitions specifies the initial amount of the two substances u and v. All cells have `(u0, v0)` by default.
|
||||
The definitions specifies the initial amount of the two substances u and v. All
|
||||
cells have `(u0, v0)` by default.
|
||||
|
||||
You can specify a pattern file when the executable is invoked (not compile-time). The file should include a sequence of points, see `ioccc.txt`, `center.txt`, or `line.txt` as examples. Each amount in cells near to the point included in the file, will be added by `(u1, v1)`.
|
||||
You can specify a pattern file when the executable is invoked (not
|
||||
compile-time). The file should include a sequence of points, see `ioccc.txt`,
|
||||
`center.txt`, or `line.txt` as examples. Each amount in cells near to the point
|
||||
included in the file, will be added by `(u1, v1)`.
|
||||
|
||||
#### Simulation speed: `-DTIMESTEP=ts -DSPEED=spd`
|
||||
|
||||
@@ -121,7 +145,8 @@ This specifies a color used for rendering.
|
||||
|
||||
### Examples
|
||||
|
||||
Some interesting parameters are included in `Makefile`. Do one of the following command and open `http://127.0.0.1:10333`.
|
||||
Some interesting parameters are included in `Makefile`. Do one of the following
|
||||
command and open `http://127.0.0.1:10333`.
|
||||
|
||||
$ make gray-scott-1 && tcpserver -v 127.0.0.1 10333 ./gray-scott-1 ioccc.txt
|
||||
$ make gray-scott-1 && tcpserver -v 127.0.0.1 10333 ./gray-scott-1 center.txt
|
||||
@@ -133,27 +158,32 @@ Some interesting parameters are included in `Makefile`. Do one of the following
|
||||
$ make fitzhugh-nagumo-2 && tcpserver -v 127.0.0.1 10333 ./fitzhugh-nagumo-2 ioccc.txt
|
||||
$ make oregonator && tcpserver -v 127.0.0.1 10333 ./oregonator ioccc.txt
|
||||
|
||||
These examples are created by drawing (and modifying) the pattern files of [Ready](https://github.com/GollyGang/ready), a cross-platform implementation of various reaction-diffusion systems [2].
|
||||
These examples are created by drawing (and modifying) the pattern files of
|
||||
[Ready](https://github.com/GollyGang/ready), a cross-platform implementation of
|
||||
various reaction-diffusion systems [2].
|
||||
|
||||
### Compatibility
|
||||
|
||||
#### C part
|
||||
|
||||
This program compiles clean with no warnings under `-std=c99 -Wall -Wextra -pedantic`. Since it uses `long long` for 64bit integers, C99 is required.
|
||||
This program compiles clean with no warnings under `-std=c99 -Wall -Wextra
|
||||
-pedantic`. Since it uses `long long` for 64bit integers, C99 is required.
|
||||
|
||||
#### Browser part
|
||||
|
||||
You must use a modern browser that supports the latest specification of WebSocket [3]. All the following browsers worked for me:
|
||||
You must use a modern browser that supports the latest specification of
|
||||
WebSocket [3]. All the following browsers worked for me:
|
||||
|
||||
* Google Chrome 45
|
||||
* Mozilla Firefox 39
|
||||
* Microsoft Internet Explorer 11 (works but sluggish)
|
||||
|
||||
I think Safari 6 will work but I haven't tested. (I have no recent os x.)
|
||||
I think Safari 6 will work but I haven't tested. (I have no recent macOS.)
|
||||
|
||||
#### tcpserver alternatives
|
||||
|
||||
I think you may use `inetd` and `xinetd` instead of `tcpserver`. Here is an example of inetd configuration.
|
||||
I think you may use `inetd` and `xinetd` instead of `tcpserver`. Here is an
|
||||
example of inetd configuration.
|
||||
|
||||
10333 stream tcp nowait nobody /path/to/prog /path/to/prog /path/to/initial-pattern.txt
|
||||
|
||||
@@ -161,10 +191,14 @@ But note that I didn't test well.
|
||||
|
||||
### Internal
|
||||
|
||||
1. The C program accepts HTTP connection from the browser, and sends a HTML document.
|
||||
1. The C program accepts HTTP connection from the browser, and sends a HTML
|
||||
document.
|
||||
2. The browser tries to upgrade the connection to WebSocket.
|
||||
3. The C program accepts WebSocket upgrade. This negotiation process requires SHA1 hash [4] and Base64 encoding [5]. The C program calculates them without the aid of any external libraries.
|
||||
4. The C program simulates the reaction-diffusion system, and then send the field data to the browser on each frame.
|
||||
3. The C program accepts WebSocket upgrade. This negotiation process requires
|
||||
SHA1 hash [4] and Base64 encoding [5]. The C program calculates them without
|
||||
the aid of any external libraries.
|
||||
4. The C program simulates the reaction-diffusion system, and then send the
|
||||
field data to the browser on each frame.
|
||||
4. The browser receives and renders the field data onto the HTML5 canvas.
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user