Groshik писал(а):
Алгоритм написан, он прост. Что еще-то?
Вот этот?
"Берете точку, случайно определяется изменится ли ее абсцисса на один, на минус один, либо не изменится, если абсцисса уже 0, то она не может уменьшиться, к ординате добавляете единицу. Соединяем новую точку с предыдущей. И так пару сотен раз, начиная с (0,0)"
Мне даже стало интересно, что получится
Вот для 500 точек. По горизонтали растянуто в 20 раз.
И какой из этого следует вывод?Исходник:
Код:
#include "bitmap_image.hpp"
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <time.h>
const int MIN_POINT = 10;
const int MAX_POINT = 10000;
const int KOF = 20;
int main(int argc, char *argv[])
{
int n_points = 0;
if (argc > 1)
n_points = std::atoi(argv[1]);
if (n_points < 10 || n_points > MAX_POINT || (argc != 3 && argc != 2)) {
std::cerr << "usage:\n"
<< argv[0] << " N path\n"
<< "N\t- number of points from " << MIN_POINT << " to " << MAX_POINT
<< "\npath\t- path to output bmp-file. Default output.bmp\n";
return -1;
}
const char* path = "output.bmp";
if (argc == 3)
path = argv[2];
/// initialize random seed
srand(time(NULL));
int* array = new int[n_points + 1];
int max_x = 0;
int x = 0;
for (int i = 0; i < n_points; ++i) {
/// generate random int from -1 to 1
int n = rand() % 3 - 1;
array[i] = n;
x = x + n;
if (x < 0)
x = 0;
if (x > max_x)
max_x = x;
}
try
{
bitmap_image image(max_x * KOF, n_points);
// set background to white
image.set_all_channels(255,255,255);
image_drawer draw(image);
draw.pen_width(1);
draw.pen_color(0,0,0);
int x1 = 0;
for (int i = 0; i < n_points; ++i) {
int x2 = x1 + array[i];
if (x2 < 0)
x2 = 0;
int y = n_points - i - 1;
draw.line_segment(x1 * KOF, y, x2 * KOF, y);
x1 = x2;
}
image.save_image(path); /// "output.bmp"
}
catch(...)
{
std::cerr << "Error!\n";
}
delete [] array;
return 0;
}