рдЧрд╛рд░реНрдбреЗрди рдХреЗ рд╡рд┐рдХрд░реНрдгреЛрдВ рдкрд░ рдмреНрд░реЗрд╕реЗрдирд╣рдо рдФрд░ рдпреВ



рдЕрдм рдХреНрдпрд╛ рджреЗрдЦ рд░рд╣реЗ рд╣реЛ? рдпрджрд┐ рдЖрдк рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдмреНрд░рд╣реНрдорд╛рдВрдб рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рд╡реЗрдХреНрдЯрд░ рдореЙрдирд┐рдЯрд░ рдкрд░ рдмреИрдард╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрд┐рдЯрдореИрдк рдЫрд╡рд┐ рд╣реИред рдЗрд╕ рдкрдЯреНрдЯреА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ: /ред рдпрджрд┐ рдЖрдк рдореЙрдирд┐рдЯрд░ рдХреЗ рдХрд░реАрдм рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд┐рдХреНрд╕реЗрд▓ рдХрджрдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗрдХреНрдЯрд░ рд▓рд╛рдЗрди рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реЗрдЦрд╛рдВрдХрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдмреНрд░реЗрд╕реЗрдирд╣реИрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рдпреВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреЛ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдЦрдВрдб рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдкреНрд▓рд╛рди рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЬрдирд░реЗрдЯрд░ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд░реИрд╕реНрдЯреЛрд░реЗрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдПрдХ рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдорд░реЗ рдХреА рджреАрд╡рд╛рд░реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдпрджрд┐ рдЕрдВрддрд░рд┐рдХреНрд╖ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╢рд╛рд░реАрд░рд┐рдХ рдЧрдгрдирд╛, рдкрде рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдпрд╛ рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдХрд┐рд╕рдиреЗ рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд░рд╛рд╕реНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЬрд╛рдирдирд╛ рдХрд┐рд╕реА рджрд┐рди рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ?

рдмреНрд░реЗрд╕реЗрдирд╣рдо рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд▓рд╛рдЗрди рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдордиреНрд╡рдп x рдХреЛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрдХреНрд░ рдореЗрдВ рдПрдХреНрд╕ рддрдХ рд╣рдо рдЦрдВрдб рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ - рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ y рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдФрд░ рдирд┐рдХрдЯрддрдо рдЧреНрд░рд┐рдб рд╕реЗрд▓ред рдпрджрд┐ рддреНрд░реБрдЯрд┐ рд╕реЗрд▓ рдХреА рдКрдБрдЪрд╛рдИ рд╕реЗ рдЖрдзреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рдкреВрд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИред

рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рд╛рд░ рдерд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдгреАрдп рдЧреБрдгрд╛рдВрдХ (y1 - y0) / (X1 - x0) рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЦрдВрдб (0,0) рдХреЗ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдкрд░ рддреНрд░реБрдЯрд┐ рдорд╛рди рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рд╕реЗрд▓ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдХреЛрдгреАрдп рдЧреБрдгрд╛рдВрдХ рдХреЛ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рддреНрд░реБрдЯрд┐ 0.5 рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╕реЗрд▓ (x0 + 1, 0) рднрд░рд╛ рд╣реИ, рдпрджрд┐ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╕реЗрд▓ (x0 + 1, 0 + 1) рднрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрдХрд╛рдИ рдХреЛ рддреНрд░реБрдЯрд┐ рдорд╛рди рд╕реЗ рдШрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ, рд░реЗрдЦрд╛рдВрдХрди рд╕реЗ рдкрд╣рд▓реЗ рдХреА рд░реЗрдЦрд╛ рдХреЛ рдкреАрд▓реЗ, рд╣рд░реЗ рдФрд░ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдирд┐рдХрдЯрддрдо рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рджреВрд░реАред рдХреЛрдгреАрдп рдЧреБрдгрд╛рдВрдХ рдПрдХ рдЫрдареЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдХреЛрдгреАрдп рдЧреБрдгрд╛рдВрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреЛ 0.5 рд╕реЗ рдХрдо рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдордиреНрд╡рдп рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИред рд░реЗрдЦрд╛ рдХреЗ рдордзреНрдп рддрдХ, рддреНрд░реБрдЯрд┐ рд╕реАрдорд╛ рдкрд╛рд░ рдХрд░рддреА рд╣реИ, рдПрдХ рдЗрдХрд╛рдИ рдХреЛ рдЗрд╕рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдирдпрд╛ рдкрд┐рдХреНрд╕реЗрд▓ рдКрдкрд░ рдЙрдарддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдЦрдВрдб рдХреЗ рдЕрдВрдд рддрдХред



рдПрдХ рдФрд░ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ред рдпрджрд┐ x рдЕрдХреНрд╖ рдкрд░ рдЦрдВрдб рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг y рдЕрдХреНрд╖ рдкрд░ рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕реЗ рдХрдо рд╣реИ рдпрд╛ рдЦрдВрдб рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реЗрдХреНрдЯрд░ рдФрд░ рдЙрд╕рдХреЗ рдврд▓рд╛рди рдХреА рджрд┐рд╢рд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЦрдВрдб рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд╕реНрд╡реИрдк рдХрд░реЗрдВ, рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдШреБрдорд╛рдПрдВ, рдФрд░, рдЕрдВрддрддрдГ, рдПрдХ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрдо рдХрд░реЗрдВред рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рджреМрд░рд╛рди рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдХреНрд╖ рдХреЛ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред

рдЧрдгрдирд╛рдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, dx = (X1 - x0) рджреНрд╡рд╛рд░рд╛ рд╕рднреА рднрд┐рдиреНрди рдЪрд░ рдХреЗ рдЧреБрдгрди рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд╛рд▓ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред рдлрд┐рд░, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░, рддреНрд░реБрдЯрд┐ рдХреЛ = (y1 - y0) рджреНрд╡рд╛рд░рд╛ рдХреЛрдгреАрдп рдЧреБрдгрд╛рдВрдХ рдХреЗ рдмрдЬрд╛рдп рдФрд░ рдПрдХрддрд╛ рдХреЗ рдмрдЬрд╛рдп dx рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рддрд░реНрдХ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреНрд░реБрдЯрд┐ рдХреЛ "рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕реАрдорд╛ рд╢реВрдиреНрдп рдкрд░ рд╣реЛ, рдФрд░ рдЖрдк рддреНрд░реБрдЯрд┐ рд╕рдВрдХреЗрдд рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рддреЗрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ Bresenham рдХрд▓рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░реЗрдЦрд╛рдкреБрдВрдЬ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╕реА # рдХреЗ рддрд╣рдд рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдЫрджреНрдо рдХреЛрдб рд╕реЗ рдЫрджреНрдо рдХреЛрдбред
void BresenhamLine(int x0, int y0, int x1, int y1) { var steep = Math.Abs(y1 - y0) > Math.Abs(x1 - x0); //           //    ,      if (steep) { Swap(ref x0, ref y0); //         Swap(ref x1, ref y1); } //      ,        if (x0 > x1) { Swap(ref x0, ref x1); Swap(ref y0, ref y1); } int dx = x1 - x0; int dy = Math.Abs(y1 - y0); int error = dx / 2; //       dx,      int ystep = (y0 < y1) ? 1 : -1; //     y int y = y0; for (int x = x0; x <= x1; x++) { DrawPoint(steep ? y : x, steep ? x : y); //       error -= dy; if (error < 0) { y += ystep; error += dx; } } } 


рдмреНрд░реЗрд╕реЗрдирд╣реИрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдбреНрд░рд╛рдЗрдВрдЧ рд╕рд░реНрдХрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрди рд╣реИред рд╕рдм рдХреБрдЫ рдПрдХ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рдФрд░ рднреА рдЖрд╕рд╛рдиред рдЧрдгрдирд╛ рдПрдХ рдЕрд╖реНрдЯрдХ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рд╕рд░реНрдХрд▓ рдХреЗ рдЕрдиреНрдп рд╕рднреА рдЯреБрдХрдбрд╝реЗ рд╕рдорд░реВрдкрддрд╛ рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред

C # рдореЗрдВ рд╕реИрдВрдкрд▓ рд╕рд░реНрдХрд▓ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛрдбред
 void BresenhamCircle(int x0, int y0, int radius) { int x = radius; int y = 0; int radiusError = 1 - x; while (x >= y) { DrawPoint(x + x0, y + y0); DrawPoint(y + x0, x + y0); DrawPoint(-x + x0, y + y0); DrawPoint(-y + x0, x + y0); DrawPoint(-x + x0, -y + y0); DrawPoint(-y + x0, -x + y0); DrawPoint(x + x0, -y + y0); DrawPoint(y + x0, -x + y0); y++; if (radiusError < 0) { radiusError += 2 * y + 1; } else { x--; radiusError += 2 * (y - x + 1); } } } 

рдЕрдм, рдЪрд┐рдХрдиреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реВ рдЬрд╝рд┐рдпрд╛рдУрд▓рд┐рди рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рднрд┐рдиреНрди рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдПрдХ рдЧрдгрдирд╛ рд░реЗрдЦрд╛ рдХреЗ рдирд┐рдХрдЯрддрдо рджреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреВрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рднрд┐рдиреНрди рддреАрд╡реНрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдордзреНрдп рдХрд╛ рд╕рдЯреАрдХ рдЪреМрд░рд╛рд╣рд╛ 100% рддреАрд╡реНрд░рддрд╛ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдкрд┐рдХреНрд╕реЗрд▓ 0.9 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рджреВрд░реА рдкрд░ рд╣реИ, рддреЛ рддреАрд╡реНрд░рддрд╛ 10% рд╣реЛрдЧреАред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рд╕реМ рдкреНрд░рддрд┐рд╢рдд рддреАрд╡реНрд░рддрд╛ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рддрд░рдл рд╡реЗрдХреНрдЯрд░ рд░реЗрдЦрд╛ рдХреЛ рд╕реАрдорд╛рдмрджреНрдз рдХрд░рддрд╛ рд╣реИред



рдКрдкрд░ рдХреА рдЫрд╡рд┐ рдореЗрдВ, рджреЛ рдЖрд╕рдиреНрди рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рджреВрд░реА рдХреЛ рд▓рд╛рд▓ рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрд╢ рднрд╛рдЧ рд╕реЗ рддреНрд░реБрдЯрд┐ рдорд╛рди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

C # рдореЗрдВ рд╡реВ рд╢рд┐рдпрд╛рдУрд▓рд┐рди рджреНрд╡рд╛рд░рд╛ рд╕реНрдореВрдж рд▓рд╛рдЗрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдбред
 private void WuLine(int x0, int y0, int x1, int y1) { var steep = Math.Abs(y1 - y0) > Math.Abs(x1 - x0); if (steep) { Swap(ref x0, ref y0); Swap(ref x1, ref y1); } if (x0 > x1) { Swap(ref x0, ref x1); Swap(ref y0, ref y1); } DrawPoint(steep, x0, y0, 1); //           steep DrawPoint(steep, x1, y1, 1); //   тАФ     float dx = x1 - x0; float dy = y1 - y0; float gradient = dy / dx; float y = y0 + gradient; for (var x = x0 + 1; x <= x1 - 1; x++) { DrawPoint(steep, x, (int)y, 1 - (y - (int)y)); DrawPoint(steep, x, (int)y + 1, y - (int)y); y += gradient; } } 


рдпрджрд┐ рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдЪрд╛рдирдХ рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рддреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реЛрдЪреЗрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдФрд░ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рдВрд╢реЛрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд╕рд╛рдордиреЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рд╢реЙрдЯ рд╣рд┐рдЯ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реБрдВрджрд░ рд╡реНрдпрд╡рд╕реНрдерд╛ред рдпрд╛ рдЖрдк рдмрд╕ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХрддрд╛ рд╡реЗрдм рдкреНрд▓реЗрдпрд░ | рд╡рд┐рдВрдбреЛрдЬ | рд▓рд┐рдирдХреНрд╕ | рдореИрдХ | рдЧрд┐рдЯрд╣рдм рд╕реНрд░реЛрдд
рдмрд╛рдПрдВ рдорд╛рдЙрд╕ рдмрдЯрди - рдмреНрд░реЗрд╕реЗрдирд╣рдо, рд░рд╛рдЗрдЯ рдорд╛рдЙрд╕ рдмрдЯрди - Y, рд╕реНрдкреЗрд╕рдмрд╛рд░ - рд╕реНрдкрд╖реНрдЯ, Esc - рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред
Linux рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП: BresenhamWu рдлрд╝рд╛рдЗрд▓ рдХреЛ "chmod + x BresenhamWu" рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред

рд░реЛрд╕реЗрдЯрд╛ рдХреЛрдб рдореЗрдВ рдмреНрд░реЗрд╕реЗрдирд╣реИрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рдпреВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рд╣реИред рд╡реВ рдЬрд╝рд┐рдпрд╛рдУрд▓рд┐рди рдХреЗ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ

Source: https://habr.com/ru/post/In185086/


All Articles