Контроль количества промежуточных точек между двумя вершинами — расширение алгоритма Брезенхэма

У меня есть следующий рабочий алгоритм Брезенхэма, который находит промежуточные точки между двумя вершинами. Но это для пикселя размером 1.

void Bresenham(int x1,
int y1,
int const x2,
int const y2)
{
int delta_x(x2 - x1);
// if x1 == x2, then it does not matter what we set here
signed char const ix((delta_x > 0) - (delta_x < 0));
delta_x = std::abs(delta_x) << 1;

int delta_y(y2 - y1);
// if y1 == y2, then it does not matter what we set here
signed char const iy((delta_y > 0) - (delta_y < 0));
delta_y = std::abs(delta_y) << 1;

cout << "(" << x1 << "," << y1 << ")\n";
//plot(x1, y1);

if (delta_x >= delta_y)
{
// error may go below zero
int error(delta_y - (delta_x >> 1));

while (x1 != x2)
{
// reduce error, while taking into account the corner case of error == 0
if ((error > 0) || (!error && (ix > 0)))
{
error -= delta_x;
y1 += iy;
}
// else do nothing

error += delta_y;
x1 += ix;

cout << "(" << x1 << "," << y1 << ")\n";
//plot(x1, y1);
}
}
else
{
// error may go below zero
int error(delta_x - (delta_y >> 1));

while (y1 != y2)
{
// reduce error, while taking into account the corner case of error == 0
if ((error > 0) || (!error && (iy > 0)))
{
error -= delta_y;
x1 += ix;
}
// else do nothing

error += delta_x;
y1 += iy;

cout << "(" << x1 << "," << y1 << ")\n";
//plot(x1, y1);
}
}
}

Я хочу контролировать количество промежуточных точек, образованных между двумя заданными вершинами. В приведенном выше коде я не могу контролировать это в настоящее время.

Например, если у меня есть вершины (0,0) и (3,3); если я хочу 2 балла между ними, это будет (1,1) и (2,2).

Не могли бы вы предложить изменения, которые должны быть сделаны в моем коде, чтобы я мог контролировать количество промежуточных точек между заданными двумя вершинами, а также, пожалуйста, дайте мне знать способ определения длины каждого пикселя (поскольку в настоящее время размер пикселя равен фиксировано быть 1)

Я хочу, чтобы моя общая функция выглядела так: void Bresenham (int x1,
int y1,
int const x2,
int const y2, int TotalIntermediatePoints)

Заранее спасибо!

-4

Решение

Кажется, вам не нужен алгоритм Брезенхема.
А промежуточные точки могут иметь нецелые координаты.

Просто используйте линейную интерполяцию

 x[i] = x0 + (x1-x0) * i / (N + 1)
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector