Project Development
- Fertility & Death Rate Integration: By this phase, I fully incorporated fertility and death rates. Each region now grows or shrinks based on these factors, and in Stability Mode, populations stabilize around a 2.1 replacement rate.
- Mode Switching: Users can toggle between Growth, Random, and Stability modes using the keyboard.
- Visual Feedback: The size of each circle dynamically adjusts based on the population changes, offering a visual representation of how populations are evolving in each region.
- Significant Code Progress: Implemented the full logic for handling different population behaviors across modes.
Code Refinements
In this phase, I added full functionality for fertility and death rates, and populations now stabilize in Stability Mode.
let regions = []; let mode = 0; // Mode selector function setup() { createCanvas(800, 800); let gridSize = 4; let spacing = width / gridSize; for (let i = 0; i < gridSize; i++) { for (let j = 0; j < gridSize; j++) { let x = spacing * i + spacing / 2; let y = spacing * j + spacing / 2; let population = random(50, 200); let fertilityRate = random(1.5, 5); let deathRate = random(0.5, 3); regions.push(new Region(x, y, population, fertilityRate, deathRate)); } } } function draw() { background(255); switch (mode) { case 0: growthMode(); break; case 1: randomMode(); break; case 2: stabilityMode(); break; } } function keyPressed() { if (key === '1') mode = 0; if (key === '2') mode = 1; if (key === '3') mode = 2; } function growthMode() { for (let region of regions) { region.grow(); region.display(); } } function randomMode() { for (let region of regions) { region.randomizeRates(); region.grow(); region.display(); } } function stabilityMode() { for (let region of regions) { region.stabilize(); region.grow(); region.display(); } }
Three Variations for Export
- Growth Mode: Populations grow or shrink based on initial fertility and death rates.
- Random Mode: Random changes in fertility and death rates cause erratic population behaviors.
- Stability Mode: Populations gradually stabilize around the replacement rate.
I exported these three variations in SVG format using the save()
function in p5.js.
function keyPressed() { if (key === 's') { save(); // Saves the current state as SVG } }