У меня проблема с реализацией алгоритма средней точки с восьмым октантом.Текущая ситуация показана на рисунке ниже, когда ось Y инвертирована.
, так что пока мне удается заставить зону 1 работать префектом, у меня нетидеи, как заставить это работать для другой зоны, я был Google, и все, что я нахожу, является примером зоны 1 не в другой зоне.
здесь мой код для зоны 1
void Line2D::MPOct1(const Window& window, const Point2D& start,
const Point2D& end, const float& delta_x, const float& delta_y) const
{
Color color = mStartVtx.GetColor();
int int_delta_x = static_cast<int>(round(delta_x));
int int_delta_y = static_cast<int>(round(delta_y));
int start_x = static_cast<int>(round(start.GetX()));
int start_y = static_cast<int>(round(start.GetY()));
int const end_x = static_cast<int>(round(end.GetX()));
int f = 2 * int_delta_y - int_delta_x;
int f_e = 2 * int_delta_y ;
// should be se due to y axis inverted
int f_ne = 2 * int_delta_y + 2 * int_delta_x;
while (start_x <= end_x )
{
if (f >= 0)
{
window.SetPixel(start_x, start_y, color);
f += f_e;
start_x ++;
}
else
{
window.SetPixel(start_x, start_y, color);
f += f_ne;
start_x ++;
// y axis inveted so --
start_y --;
}
}
}
по умолчанию задан параметр решения 2deltaY -deltaX
, и я предполагаю, что направление 8:
east = 2deltaY
west = -2deltaY
north = 2deltaX (-2deltaX due to inverse of y axis)
south = -2deltaX (2deltaX due to inverse of y axis)
north-east = 2deltaY -2deltaX (2deltaY +2deltaX due to inverse of y axis )
north-west = -2deltaY -2deltaX (-2deltaY +2deltaX due to inverse of y axis )
south-east = 2deltaY +2deltaX (2deltaY -2deltaX due to inverse of y axis )
south-west = -2deltaY +2deltaX (-2deltaY -2deltaX due to inverse of y axis )
любой может сказать мне, как решить другую октавную зону, манипулируя обновлением, которое мне удается сделать зоной 14,5 и 8 работы