рдРрд╕реЗ рдЙрдкрдХрд░рдг рд╣реИрдВ - рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдХреИрдирд░ рдпрд╛ рд╕реНрдХреИрдирд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рд╢реЗрд╖рдг "рд▓реЗрдЬрд░" рдХреЗ рд╕рд╛рде

рд╡рд┐рднрд┐рдиреНрди
рд▓реЗрдЬрд░ рд╕реНрдХреИрдирд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рд▓реЗрдЬрд░ рд╕реНрдХреИрдирд░ рджреЛ рд░реЛрдЯрд░реА рджрд░реНрдкрдг рд╣реИрдВ рдЬреЛ рджреЛ рдкрд░рд╕реНрдкрд░ рд▓рдВрдмрд╡рдд рд╡рд┐рдорд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рд▓реЗрдЬрд░ рдмреАрдо рдХреЛ рд╡рд┐рдХреНрд╖реЗрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдгреЛрдВ рдХреЛ рдбреАрдПрд╕реА (рдФрд░ рдбреАрдПрд╕реАрдПрд╕ рдХреЗ рдмрд╛рдж рдЦрдбрд╝реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░реЛрдВ) рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред DAC рдЖрдорддреМрд░ рдкрд░ 12-16 рдмрд┐рдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдпрд╛, рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рднрд╛рд╖рд╛ рдмреЛрд▓рдирд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдЪреАрди рдПрдирд╛рд▓реЙрдЧ рдЧреНрд░рд╛рдлрд┐рдХ рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрдХреИрдирд░реЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ (рдорд╛рдЗрдХреНрд░реЛ) рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ "рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдХрдорд╛рдВрдб" рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЦреНрдп рдЖрджреЗрд╢ "рдЗрд╕ рддрд░рд╣ рдХреА рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдЕрдм рддрдХ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдирд╛ рд╣реИред" рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдХ рд░реЗрдЦрд╛ рдФрд░ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреНрд▓рд╛рд╕рд┐рдХ рдмреНрд░реЗрд╕реЗрдирд╣реИрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдмреНрд░реЗрд╕реЗрдирд╣реИрдо рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА "рдзреАрдореА" рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдзреБрдирд┐рдХ 32-рдмрд┐рдЯ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ 8 рдпрд╛ 16-рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред
void Line(int x1, int y1, int x2, int y2, int color) { int x1,y1,dx,dy,sx,sy,d,d1,d2; int i, x,y; if( x2 >= x1) { dx = x2 - x1; sx = 1; } else { dx = x1 - x2; sx = -1; } if( y2 >= y1) { dy = y2 - y1; sy = 1; } else { dy = y1 - y2; sy = -1; } if(dy <= dx) { d = (dy << 1) - dx; d1 = dy << 1; d2 = (dy - dx) << 1; for(x=x1+sx,y=y1,i=1; i <= dx ; i++,x+=sx) { if(d > 0) { d += d2; y += sy; } else { d += d1; } putpixel(x,y, color); } } else { d = (dx << 1) - dy; d1 = dx << 1; d2 = (dx - dy) << 1; for(x=x1,y=y1+sy,i=1;i <= dy ; i++,y += sy) { if(d > 0) { d += d2; x += sx; } else { d += d1; } putpixel(x,y, color); } } }
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рд░рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП
рд░рдВрдЧ рдХреА рдЕрдирджреЗрдЦреА рдХреА
рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрддрд┐ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕
n рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рдпрд╛ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЦрдВрдб рд╣реИ рдФрд░
V рдХреА рдЧрддрд┐ (рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдкрд┐рдХреНрд╕реЗрд▓) рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╕рдордп
tp = 1 /
V рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдпрджрд┐ рдЦрдВрдб рдХреНрд╖реИрддрд┐рдЬ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ
l = рд╣рд╛рдЗрдк (x0-X1, y0-y1) рд╣реИ , рдкреВрд░реЗ рдЦрдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдордп
t0 = l / V рд╣реИ , рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐ рдмрд┐рдВрджреБ рджреЗрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрдЯрд┐рдХреНрд╕рд▓ рдХреЛ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ t0 рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддред рдИред
tp = t0 / max (| x0-X1 |; | y0-y1 |)
рдлрд┐рд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ, рд░рдВрдЧ рдХреЛ рдХреЗрд╡рд▓ "рдкреНрд╡рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рджреЗрд░реА"
рдкреНрд░рддреАрдХреНрд╖рд╛ (= tp) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
void Line(int x1, int y1, int x2, int y2, int wait) ...... putpixel(x,y, wait));
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ
рд╣реА рдкреБрдЯрд┐рдХреНрд╕рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП
void putpixel(int x, int y, int wait)) { outPortX(x);
рд╣рд╛рд▓рд╛рдБрдХрд┐, DAC рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬреБрдбрд╝реА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рдпрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред
рдбреАрдПрд╕реА рдЕрдиреБрдХреНрд░рдорд┐рдХ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓рдЧрд╛рддрд╛рд░ - рдпрд╣ рд╡рд╣ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдбреАрдПрд╕реА рдирдВрдмрд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рддрддреНрдкрд░рддрд╛, рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдЕрдВрдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдпрд╛ рдмрд╕ рдереЛрдбрд╝реА рджреЗрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдпрджрд┐ DAC рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
x рдФрд░
y рдорд╛рдиреЛрдВ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕рд╛рде рд░реВрдкрд╛рдВрддрд░рдг рдХреА рддрддреНрдкрд░рддрд╛ рдпрд╛ рд╕рдорд╛рдкреНрддрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ X рдпрд╛ рдХреЗрд╡рд▓ Y рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╕рдордп, X рдФрд░ Y рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд▓рдЧрднрдЧ рджреЛ рдЧреБрдирд╛ рдХрдо рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╕реНрд░реЛрдд рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ
void Line(int x1, int y1, int x2, int y2, int wait, int waitXY) { int dx,dy,sx,sy,d,d1,d2; int i, x,y; if( x2 >= x1) { dx = x2 - x1; sx = 1; } else { dx = x1 - x2; sx = -1; } if( y2 >= y1) { dy = y2 - y1; sy = 1; } else { dy = y1 - y2; sy = -1; } if(dy <= dx) { d = (dy << 1) - dx; d1 = dy << 1; d2 = (dy - dx) << 1; for(x=x1+sx,y=y1,i=1; i <= dx ; i++,x+=sx) { if(d > 0) { d += d2; y += sy; putXY(x,y,waitXY); } else { d += d1; putX(x, wait); } } } else { d = (dx << 1) - dy; d1 = dx << 1; d2 = (dx - dy) << 1; for(x=x1,y=y1+sy,i=1;i <= dy ; i++,y += sy) { if(d > 0) { d += d2; x += sx; putXY(x,y,waitXY); } else { d += d1; putY(y, wait); } } } } void putXY(int x, int y, int wait)) { outPortXY(x,y);
рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп
рдкреНрд░рддреАрдХреНрд╖рд╛ рдФрд░
рд╡реЗрдЯрдПрдХреНрд╕рд╡рд╛рдИ рдХреЗ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐:
l = рд╣рд╛рдЗрдк (x0-X1, y0-y1) , рдкреВрд░реЗ рд╕реЗрдЧрдореЗрдВрдЯ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдордп
t0 = l / V , рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛
putXY n1 = min (| x0-X1 |; | y0-y1 |), рдХреЙрд▓
putX рдпрд╛
putY n0 рдХреА рд╕рдВрдЦреНрдпрд╛ред
= рдЕрдзрд┐рдХрддрдо (! x0-X1 | |; y0-y1 |) - рдорд┐рдирдЯ (| x0-X1 | |, | y0-y1 |) |
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк outPortX, outPortY рдФрд░ outPortXY рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рдЕрдВрд╢рд╛рдВрдХрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рджреЗрд░реА рдХреА рд╕рднреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдореЗрдВ рд╕рдордп рдФрд░ рджреЗрд░реА - рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдФрд░ рдЙрдирдХреЗ рд╢реЗрдпрд░ ...
рдЦреИрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдПред
рд╣рдо рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдг рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рдХреБрдЫ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдЪрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рд╣реБрдЖ рдЙрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ
рдХрд┐рд╕реА рдХреЛ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рджреЗрдЦреЗрдВрдЧреЗ? (рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП)