Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
65
Task/Brownian-tree/C/brownian-tree-1.c
Normal file
65
Task/Brownian-tree/C/brownian-tree-1.c
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <FreeImage.h>
|
||||
|
||||
#define NUM_PARTICLES 1000
|
||||
#define SIZE 800
|
||||
|
||||
void draw_brownian_tree(int world[SIZE][SIZE]){
|
||||
int px, py; // particle values
|
||||
int dx, dy; // offsets
|
||||
int i;
|
||||
|
||||
// set the seed
|
||||
world[rand() % SIZE][rand() % SIZE] = 1;
|
||||
|
||||
for (i = 0; i < NUM_PARTICLES; i++){
|
||||
// set particle's initial position
|
||||
px = rand() % SIZE;
|
||||
py = rand() % SIZE;
|
||||
|
||||
while (1){
|
||||
// randomly choose a direction
|
||||
dx = rand() % 3 - 1;
|
||||
dy = rand() % 3 - 1;
|
||||
|
||||
if (dx + px < 0 || dx + px >= SIZE || dy + py < 0 || dy + py >= SIZE){
|
||||
// plop the particle into some other random location
|
||||
px = rand() % SIZE;
|
||||
py = rand() % SIZE;
|
||||
}else if (world[py + dy][px + dx] != 0){
|
||||
// bumped into something
|
||||
world[py][px] = 1;
|
||||
break;
|
||||
}else{
|
||||
py += dy;
|
||||
px += dx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(){
|
||||
int world[SIZE][SIZE];
|
||||
FIBITMAP * img;
|
||||
RGBQUAD rgb;
|
||||
int x, y;
|
||||
|
||||
memset(world, 0, sizeof world);
|
||||
srand((unsigned)time(NULL));
|
||||
|
||||
draw_brownian_tree(world);
|
||||
|
||||
img = FreeImage_Allocate(SIZE, SIZE, 32, 0, 0, 0);
|
||||
|
||||
for (y = 0; y < SIZE; y++){
|
||||
for (x = 0; x < SIZE; x++){
|
||||
rgb.rgbRed = rgb.rgbGreen = rgb.rgbBlue = (world[y][x] ? 255 : 0);
|
||||
FreeImage_SetPixelColor(img, x, y, &rgb);
|
||||
}
|
||||
}
|
||||
FreeImage_Save(FIF_BMP, img, "brownian_tree.bmp", 0);
|
||||
FreeImage_Unload(img);
|
||||
}
|
||||
43
Task/Brownian-tree/C/brownian-tree-2.c
Normal file
43
Task/Brownian-tree/C/brownian-tree-2.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define SIDE 600
|
||||
#define NUM_PARTICLES 10000
|
||||
|
||||
bool W[SIDE][SIDE];
|
||||
|
||||
int main() {
|
||||
srand((unsigned)time(NULL));
|
||||
W[SIDE / 2][SIDE / 2] = true;
|
||||
|
||||
for (int i = 0; i < NUM_PARTICLES; i++) {
|
||||
unsigned int x, y;
|
||||
OVER: do {
|
||||
x = rand() % (SIDE - 2) + 1;
|
||||
y = rand() % (SIDE - 2) + 1;
|
||||
} while (W[y][x]);
|
||||
|
||||
while (W[y-1][x-1] + W[y-1][x] + W[y-1][x+1] +
|
||||
W[y][x-1] + W[y][x+1] +
|
||||
W[y+1][x-1] + W[y+1][x] + W[y+1][x+1] == 0) {
|
||||
unsigned int dxy = rand() % 8;
|
||||
if (dxy > 3) dxy++;
|
||||
x += (dxy % 3) - 1;
|
||||
y += (dxy / 3) - 1;
|
||||
if (x < 1 || x >= SIDE - 1 || y < 1 || y >= SIDE - 1)
|
||||
goto OVER;
|
||||
}
|
||||
|
||||
W[y][x] = true;
|
||||
}
|
||||
|
||||
printf("P1\n%d %d\n", SIDE, SIDE);
|
||||
for (int r = 0; r < SIDE; r++) {
|
||||
for (int c = 0; c < SIDE; c++)
|
||||
printf("%d ", W[r][c]);
|
||||
putchar('\n');
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue