рддреНрд░рд┐-рдЖрдпрд╛рдореА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЧреНрд░рд┐рдб рд░реЗрдЦрд╛рдВрдХрди рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛


рдпрд╣ рдЖрд▓реЗрдЦ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ "рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛" рд╣реИ, рдЬреЛ рдХрд┐ рдлреЙрд░реНрдо z = f (x, y) рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рддреАрди рдЖрдпрд╛рдореА рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП C # рдореЗрдВред

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

рдПрдХ рдЪрд╛рд░реНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЧреНрд░рд┐рдб рдпрд╛ рдлрд╝реАрд▓реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдореЗрдВ x, y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реЛрдВрдЧреЗ рдФрд░ рдорд╛рди z рд╣реЛрдЧрд╛ред рдпрд╣ рдЧреНрд░рд┐рдб рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рднрд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд▓реЙрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди (z = f (x, y)) рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рднрд░ рджреЗрдВрдЧреЗред X рдпрд╛ y рдХреЗ рджреЛ рд▓рдЧрд╛рддрд╛рд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЪрд░рдг рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд┐рдб рдЖрдпрд╛рдо N x N рд╣реИред рдЧреНрд░рд┐рдб рдиреЛрдбреНрд╕ рдкрд░ рдорд╛рди рдПрдХ рдмрд╛рд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рддреНрд░рд┐-рдЖрдпрд╛рдореА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рджреЛ-рдЖрдпрд╛рдореА рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдпреВрд▓рд░ рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЫрд╡рд┐
рд╣рдо рдХреНрд░рдорд╢рдГ рдП, рдмреА, рдФрд░ рд╕реА рдХреЗ рдХреЛрдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЛрдг ╬▒, ╬│, рдФрд░ We рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдирдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдбрд┐рдЧреНрд░реА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЧреБрдгрд╛рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
    |  l1, l2, l3 |	
  рдо = |  рдПрдо 1, рдПрдо 2, рдПрдо 3 |
    |  рдПрди 1, рдПрди 2, рдПрди 3 |
 l1 = cos (a) * cos (c) - cos (b) * sin (a) * sin (c)      
 m1 = sin (a) * cos (c) + cos (b) * cos (a) * sin (c)       
 n1 = sin (b) * sin (c)       
 l2 = -cos (a) * sin (c) + cos (b) * sin (a) * cos (c)        
 m2 = -sin (a) * sin (c) + cos (b) * cos (a) * cos (c)      
 n2 = sin (b) * cos (c)
 l3 = sin (b) * sin (a)
 m3 = -sin (b) * рдХреЙрд╕ (a)       
 n3 = рдХреЙрд╕ (b)

рд╣рдо рддреАрди рдЖрдпрд╛рдореА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗ рджреЛ рдЖрдпрд╛рдореА рдореЗрдВ рдЕрдВрддрд┐рдо рдкрд░рд┐рд╡рд░реНрддрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
X = l 1 x + l 2 y + l 3 z
Y = m 1 x + m 2 y + m 3 z
рдПрдХреНрд╕, рд╡рд╛рдИ, рдЬреЗрдб рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП "рдЖрдВрддрд░рд┐рдХ" рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВ, рдПрдХреНрд╕, рд╡рд╛рдИ рдХреБрд▓ рд╕реНрдХреНрд░реАрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╛рдВрдХ n1, n2 рдФрд░ n3 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
double[,] a; //  N x N тАж double X, Y; //      x for (int x = 0; x < N; x++) { for (int y = 0; y < N; y++) { X = l1() * (x - N / 2.0) + l2() * (y - N / 2.0) + l3() * a[x, y]; Y = m1() * (x - N / 2.0) + m2() * (y - N / 2.0) + m3() * a[x, y]; chart1.Series[n].Points.AddXY(X, Y); } n++; } //      y for (int y = 0; y < N; y++) { for (int x = 0; x < N; x++) { X = l1() * (x - N / 2.0) + l2() * (y - N / 2.0) + l3() * a[x, y]; Y = m1() * (x - N / 2.0) + m2() * (y - N / 2.0) + m3() * a[x, y]; chart1.Series[n].Points.AddXY(X, Y); } n++; } 

рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рди рдкрд░ рдХреЛрдг рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЧреНрд░рд╛рдл рдШреВрдо рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╛рдИрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдФрд░ рдХреЛрдг рдмреА рдФрд░ рд╕реА рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реБрдП рдХрд░реНрд╕рд░ рдХреА рдЧрддрд┐ рд╣реЛрдЧреА:
 bool onmove = false; Point startpos; тАж private void chart1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { onmove = true; startpos = e.Location; } } private void chart1_MouseMove(object sender, MouseEventArgs e) { if (onmove) { if ((startpos.Y - eY) < 0) b--; if ((startpos.Y - eY) > 0) b++; if ((startpos.X - eX) < 0) c--; if ((startpos.X - eX) > 0) c++; if (b > 359) b = 0; if (c > 359) c = 0; if (b < 0) b = 359; if (c < 0) c = 359; drawscene(); } } private void chart1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) onmove = false; } 

рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди z = x 2 + y 2 рдкрд░ рдЬрд╛рдВрдЪреЗрдВ:

рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╢реАрд░реНрд╖ рджреГрд╢реНрдп рдЬрд╣рд╛рдВ рдЧреНрд░рд┐рдб рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рдиреЛрдбреНрд╕ рдореЗрдВ рдорд╛рди рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдг рджреГрд╢реНрдпред
рдпрд╣ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рднреА 3 рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреВрдордирд╛ рдФрд░ 1 рд╕реЗ рдХрдо рдХреА рдкрд┐рдЪ рдХреЗ рд╕рд╛рде рдЧреНрд░рд┐рдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд░рд▓ рдХрд┐рдпрд╛ред

рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдХрдВрдЯреНрд░реЛрд▓реНрд╕


рд╣рдо "рдорд╛рд░реНрдЪрд┐рдВрдЧ рд╕реНрдХреНрд╡рд╛рдпрд░" рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Google рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ C # рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдиреАрдЪреЗ рдкрдВрдХреНрддрд┐ рд╣реИ:
1. рд╢реБрд░реБрдЖрддреА рд╕реНрдерд┐рддрд┐ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рд╕рдореЛрдЪреНрдЪ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдПрдЧрд╛ред
2. рдлрд┐рд░ рдкрдбрд╝реЛрд╕реА рдЧреНрд░рд┐рдб рдиреЛрдбреНрд╕ рдХреЗ рдорд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдЬреЛ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ: (x i , y j ), (x i-1 , y j ), (x i , y j-1 ), (x i-1 ) рд╡рд╛рдИ рдЬреЗ -1 )ред

3. рдЪрд░рдг 2 рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдмрд╛рдИрдкрд╛рд╕ рдХреА рдЖрдЧреЗ рдХреА рджрд┐рд╢рд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдПрдВ, рдЬрд┐рд╕ рдкрд░ рдЪрд░рдг 2 рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
4. рддрдм рддрдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВ рдЬрдм рддрдХ рдЖрдк рд╢реБрд░реБрдЖрддреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖ рдЬрд╛рддреЗ рдпрд╛ рдЧреНрд░рд┐рдб рдХреЗ рдХрд┐рдирд╛рд░реЗ рдкрд░ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рдЬрд╛рддреЗред
рдХреБрд▓ 16 рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
рдЫрд╡рд┐
рд╣рдо рд╕рднреА рдХреЛрдб рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рд╣рдо рдЙрд╕ рд▓реЗрдЦ рд╕реЗ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджреЗрдВрдЧреЗ:
 enum dir { None, Up, Left, Down, Right } dir prevStep; dir nextStep; bool border; int startx, starty; void findstartpos() { for (int y = 0; y < N; y++) for (int x = 0; x < N; x++) if (arr[x, y] < Z) { startx = x; starty = y; return; } } bool check(int x, int y) { if (x == N - 1 || y == N - 1 || x == 0 || y == 0) border = true; if (x < 0 || y < 0 || x >= N || y >= N) return false; if (arr[x, y] < Z) return true; return false; } void step(int x, int y) { bool ul = check(x - 1, y - 1); bool ur = check(x, y - 1); bool dl = check(x - 1, y); bool dr = check(x, y); prevStep = nextStep; int state = 0; if (ul) state |= 1; if (ur) state |= 2; if (dl) state |= 4; if (dr) state |= 8; switch (state) { case 1: nextStep = dir.Down; break; case 2: nextStep = dir.Right; break; case 3: nextStep = dir.Right; break; case 4: nextStep = dir.Left; break; case 5: nextStep = dir.Down; break; case 6: if (prevStep == dir.Down) { nextStep = dir.Left; } else { nextStep = dir.Right; } break; case 7: nextStep = dir.Right; break; case 8: nextStep = dir.Up; break; case 9: if (prevStep == dir.Right) { nextStep = dir.Down; } else { nextStep = dir.Up; } break; case 10: nextStep = dir.Up; break; case 11: nextStep = dir.Up; break; case 12: nextStep = dir.Left; break; case 13: nextStep = dir.Down; break; case 14: nextStep = dir.Left; break; default: nextStep = dir.None; break; } } 

рдЪрд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рд╣рдорд╛рд░реЗ рдЯреЗрд╕реНрдЯ рдлрдВрдХреНрд╢рди z = x 2 + y 2 рдкрд░ :

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рддрд╕реНрд╡реАрд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдиреЗ рдХрд╛рдлреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдореБрдХрд╛рдмрд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди 5 рд╕реЗ рдКрдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рд╕рд╣реА рдФрд░ рдЙрдЪреНрдЪ рдкрд░ред рд╕рдореЛрдЪреНрдЪ рдХреЛрдгреАрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреНрд░рдХреНрд╖реЗрдк рдХрд░реЗрдВрдЧреЗред рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд┐рдб рдХреЗ рдкрдбрд╝реЛрд╕реА рдиреЛрдбреНрд╕ рдореЗрдВ z рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдореЛрдЪреНрдЪ рдХреЗ рд▓рд┐рдП x, рдпрд╛ y рдХреЗ рдХрд░реАрдм рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдореЛрдЪреНрдЪ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рд╢рдВрд╕рдиреАрдп рдмрдирд╛рддрд╛ рд╣реИред
рд╣рдо рд░реИрдЦрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
x = (Zf (x i-1 , y j ) / (f (x i , y j ) -f (x i-1 , y j )) + x i-1 ,
y = (Zf (x i , y j-1 ) / (f (x i , y j ) -f (x i , y j-1 )) + y j-1
рдЬрд╣рд╛рдВ Z рдореВрд▓реНрдп рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реИред
рдПрдХреНрд╕ рд╕рдордиреНрд╡рдп рдХреЗ рд╕рд╛рде рдпрд╛ рд╡рд╛рдИ рд╕рдордиреНрд╡рдп рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд╖реЗрдк, рдкрд┐рдЫрд▓реЗ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рдХреА рджрд┐рд╢рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреЛрдИ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХреЛрдб рди рд▓рд┐рдЦреЗрдВ:
 ... List<PointF> res; ... //  x  y int dx = 0, dy = 0; switch (prevStep) { case dir.Down: dy = 1; break; case dir.Left: dx = 1;break; case dir.Up: dy = -1; break; case dir.Right: dx = -1; break; default: break; } ... double X = x0 + x; double Y = y0 + y; if (ip) //ip - interpolation { //    if (dx != 0 && prevStep == nextStep) Y = y0 + y + (Z - a[x, y - 1]) / (a[x, y] - a[x, y - 1]) - 1; if (dy != 0 && prevStep == nextStep) X = x0 + x + (Z - a[x - 1, y]) / (a[x, y] - a[x - 1, y]) - 1; //    if (nextStep == dir.Down && prevStep == dir.Left) Y = y0 + y + (Z - a[x, y - 1]) / (a[x, y] - a[x, y - 1]) - 1; if (nextStep == dir.Left && prevStep == dir.Down) X = x0 + x + (Z - a[x - 1, y]) / (a[x, y] - a[x - 1, y]) - 1; if (nextStep == dir.Up && prevStep == dir.Right) X = x0 + x + (Z - a[x - 1, y]) / (a[x, y] - a[x - 1, y]) - 1; if (nextStep == dir.Up && prevStep == dir.Left) X = x0 + x + (Z - a[x - 1, y]) / (a[x, y] - a[x - 1, y]) - 1; if (nextStep == dir.Right && prevStep == dir.Up) Y = y0 + y + (Z - a[x, y - 1]) / (a[x, y] - a[x, y - 1]) - 1; if (nextStep == dir.Right && prevStep == dir.Down) X = x0 + x + (Z - a[x - 1, y]) / (a[x, y] - a[x - 1, y]) - 1; // ""  if (!(nextStep == dir.Down && prevStep == dir.Right) && !(nextStep == dir.Left && prevStep == dir.Up)) res.Add(new PointF((float)X, (float)Y)); } ... 

рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реИрдВ:


"рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрд┐рдВрджреБрдУрдВ" рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рд╣реИред
рд╕рдВрднрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рдЕрдЦрдВрдб рд░реВрдк рд╕реЗ рд╡реГрджреНрдзрд┐ (рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрди рдХреЛ ">") рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрдХреГрддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рд╕рдордп-рд╕рдордп рдкрд░ рдмрдврд╝рддреЗ рдФрд░ рдШрдЯрддреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдФрд░ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ред

рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ, рдпрд╛ рдХрд┐рд╕реА рдЫрд╡рд┐ рдореЗрдВ рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рдпрд╛ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдХ:
en.wikipedia.org/wiki/Rotation рдореИрдЯреНрд░рд┐рдХреНрд╕
en.wikipedia.org/wiki/Euler's Angles
ru.wikipedia.org/wiki/
ru.wikipedia.org/wiki/Marching_squares
devblog.phillipspiess.com/2010/02/23/better-know-an-algorithm-1-marching-squares

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


All Articles