Вы находитесь на странице: 1из 1

Пиксели

Одно из простых решений - нарисовать отрезки на таком экране. Но понятно, что размер экрана
большой и ограничения по памяти будут превышены. Можно но так как суммарная длина линий
не может превышать 3 000 000, то можно воспользоваться структурой map(или ассоциативным
массивом), где хранятся не все значения, а только нужные нам. Мы определим структуру, в которой
будут координаты точки(point) и так же объявим map, где помомимо координат будет хранится цвет
точки. На языке C++:
struct point
{
int x;
int y;
};

map<point, int> mp;


После этого нам остается только рисовать линии. Понятно. что нужен быстрый алгоритм рисо-
вания линий. Можно взять алгоритм Брезенхема:
void drawLine(int x1, int y1, int x2, int y2, int cl) {
const int deltaX = abs(x2 - x1);
const int deltaY = abs(y2 - y1);
const int signX = x1 < x2 ? 1 : -1;
const int signY = y1 < y2 ? 1 : -1;
int error = deltaX - deltaY;
mp[{x2, y2}] = cl;
while (x1 != x2 || y1 != y2)
{
mp[{x1, y1}]= cl;
int error2 = error * 2;
if (error2 > -deltaY)
{
error -= deltaY;
x1 += signX;
}
if (error2 < deltaX)
{
error += deltaX;
y1 += signY;
}
}

}
Теперь мы рисуем линии и потом просто проходя по map считаем количество точек разного
цвета.
Стоит упомянуть, что можно решить задачу просто геометрически, вычислив аналитически, как
пересекаются отрезки.

Страница 1 из 1

Вам также может понравиться