kopia lustrzana https://github.com/villares/sketch-a-day
50 wiersze
1.1 KiB
Plaintext
50 wiersze
1.1 KiB
Plaintext
// The Nature of Code
|
|
// Daniel Shiffman
|
|
// http://natureofcode.com
|
|
|
|
// Interactive Selection
|
|
// http://www.genarts.com/karl/papers/siggraph91.html
|
|
|
|
class DNA {
|
|
|
|
// The genetic sequence
|
|
float[] genes;
|
|
int len = 40; // Arbitrary length
|
|
|
|
//Constructor (makes a random DNA)
|
|
DNA() {
|
|
// DNA is random floating point values between 0 and 1 (!!)
|
|
genes = new float[len];
|
|
for (int i = 0; i < genes.length; i++) {
|
|
genes[i] = random(0,1);
|
|
}
|
|
}
|
|
|
|
DNA(float[] newgenes) {
|
|
genes = newgenes;
|
|
}
|
|
|
|
|
|
// Crossover
|
|
// Creates new DNA sequence from two (this &
|
|
DNA crossover(DNA partner) {
|
|
float[] child = new float[genes.length];
|
|
int crossover = int(random(genes.length));
|
|
for (int i = 0; i < genes.length; i++) {
|
|
if (i > crossover) child[i] = genes[i];
|
|
else child[i] = partner.genes[i];
|
|
}
|
|
DNA newgenes = new DNA(child);
|
|
return newgenes;
|
|
}
|
|
|
|
// Based on a mutation probability, picks a new random character in array spots
|
|
void mutate(float m) {
|
|
for (int i = 0; i < genes.length; i++) {
|
|
if (random(1) < m) {
|
|
genes[i] = random(0,1);
|
|
}
|
|
}
|
|
}
|
|
}
|