рдЧреНрд░рд╛рдл рджреГрд╢реНрдпред рд░рд┐рдм рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐

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



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


рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди


рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╢рд╛рдирджрд╛рд░ рдврдВрдЧ рд╕реЗ рд╕рд░рд▓ рд╣реИ - рдХреЗрдмрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рдХреМрди рд╕реА рдЧрдбрд╝рдмрдбрд╝ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдЧрдВрджрдЧреА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╛рд░реЛрдВ рдХреЛ рдмрд╛рдВрдз рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ?

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╢реАрд░реНрд╖ рдкреА 0 рд╕реЗ рд╢рд┐рдЦрд░ рдкреА 4 рддрдХ рдПрдХ рдЫреЛрд░ рдЦреАрдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:



рдЗрди рдЪреЛрдЯрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬреЗрдВ:



рдЕрдм рдЕрдВрдХ 0 , P 1 , P 2 , P 3 , P 4 : рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдмрд╣реБрднреБрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рдХреНрд░ рдмрдирд╛рдПрдВред



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрдпреВрдмрд┐рдХ рдмреА-рд╕реНрдкреНрд▓рд┐рди рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рдРрд╕реЗ рдмреА-рд╕реНрдкреНрд▓рд┐рди рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╢рд╛рд╕реНрддреНрд░реАрдп рд╣реИ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рджреВрд╕рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХреА рдЧрдИ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдХреНрдпреВрдмрд┐рдХ рдмреА-рд╕реНрдкрд▓рд╛рдЗрди рджреЛ-рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рддреАрд╕рд░реЗ рдХреНрд░рдо рдХреЗ рдШрдЯрддрд╛ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛рди рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рди рдХрд░реЗрдВ - рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рд╕реА # рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред
рдкрд╕рд▓рд┐рдпреЛрдВ рдХреА рд╕рдВрдпреЛрдЬрдХрддрд╛ рдХреА рдбрд┐рдЧреНрд░реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ degree рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ 0 рд╕реЗ 1 рддрдХ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ (0 - рдкрд╕рд▓рд┐рдпреЛрдВ рдХреЛ рдПрдХ рдмрдВрдбрд▓ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд╕реАрдзреА рд░реЗрдЦрд╛рдПрдВ рд╣реИрдВ, 1 - рдкрд╕рд▓рд┐рдпреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ)ред рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:




S (t) рд╕реНрдкреЗрд▓ рдкреЙрдЗрдВрдЯ рд╣реИрдВ, S '(t) рдПрдХ рдкрд░рд┐рдгрд╛рдореА рд╡рдХреНрд░ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЦреИрд░, рдпрд╣рд╛рдБ рдпрд╣ рд╕рдм рдЧрдгрд┐рдд рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ:



рдпрд╣рд╛рдБ Here = 0.85ред рдЕрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрдВрдбрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдкреИрдХреЗрдЬ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред
рдПрдХ рд╣реА рдЧреНрд░рд╛рдл, рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рджреГрд╢реНрдп рдХреА рд░реЗрдбрд┐рдпрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ 0 0 0 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:



рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (0. = 0.85):



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрд╣ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд▓рд╛рдн рд╣реИред

рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг


рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реИрдВред рдЧреНрд░реАрди рд╕рд░реНрдХрд▓ 2008 рдХреЗ рдкреНрд░рдХрд╛рд╢рди рд╣реИрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╖реЛрдВ (2007, 2006, рдЖрджрд┐) рд╕реЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ 2008 рдХреЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдиреЛрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (0.99 = 0.99):



рдЯрд┐рдкреНрдкрдгреА


1. рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП:



рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



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



рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрд▓рд╕реАрдП рд╢реАрд░реНрд╖ рдХреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕реЗрдЯ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЧреНрд░рд╛рдл рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рджрд┐рдЦрддрд╛ рд╣реИред

рд╕реА # рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдиреАрдЪреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд░реНрдЧ System.rawing.Graphics рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЬреЛ рдПрдХ рд╕реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрдпреВрдмрд┐рдХ рдмреА-рд╕реНрдкрд▓рд╛рдЗрди рдЦреАрдВрдЪ рд╕рдХрддрд╛ рд╣реИред

using System;
using System.Text;
using System.Drawing;

static class GraphicsExtension
{
private static void DrawCubicCurve( this Graphics graphics, Pen pen, float beta, float step, PointF start, PointF end, float a3, float a2, float a1, float a0, float b3, float b2, float b1, float b0)
{
float xPrev, yPrev;
float xNext, yNext;
bool stop = false ;

xPrev = beta * a0 + (1 - beta) * start.X;
yPrev = beta * b0 + (1 - beta) * start.Y;

for ( float t = step; ; t += step)
{
if (stop)
break ;

if (t >= 1)
{
stop = true ;
t = 1;
}

xNext = beta * (a3 * t * t * t + a2 * t * t + a1 * t + a0) + (1 - beta) * (start.X + (end.X - start.X) * t);
yNext = beta * (b3 * t * t * t + b2 * t * t + b1 * t + b0) + (1 - beta) * (start.Y + (end.Y - start.Y) * t);

graphics.DrawLine(pen, xPrev, yPrev, xNext, yNext);

xPrev = xNext;
yPrev = yNext;
}
}

/// <summary>
/// Draws a B-spline curve through a specified array of Point structures.
/// </summary>
/// <param name="pen">Pen for line drawing.</param>
/// <param name="points">Array of control points that define the spline.</param>
/// <param name="beta">Bundling strength, 0 <= beta <= 1.</param>
/// <param name="step">Step of drawing curve, defines the quality of drawing, 0 < step <= 1</param>
internal static void DrawBSpline( this Graphics graphics, Pen pen, PointF[] points, float beta, float step)
{
if (points == null )
throw new ArgumentNullException( "The point array must not be null." );

if (beta < 0 || beta > 1)
throw new ArgumentException( "The bundling strength must be >= 0 and <= 1." );

if (step <= 0 || step > 1)
throw new ArgumentException( "The step must be > 0 and <= 1." );

if (points.Length <= 1)
return ;

if (points.Length == 2)
{
graphics.DrawLine(pen, points[0], points[1]);
return ;
}

float a3, a2, a1, a0, b3, b2, b1, b0;
float deltaX = (points[points.Length - 1].X - points[0].X) / (points.Length - 1);
float deltaY = (points[points.Length - 1].Y - points[0].Y) / (points.Length - 1);
PointF start, end;

{
a0 = points[0].X;
b0 = points[0].Y;

a1 = points[1].X - points[0].X;
b1 = points[1].Y - points[0].Y;

a2 = 0;
b2 = 0;

a3 = (points[0].X - 2 * points[1].X + points[2].X) / 6;
b3 = (points[0].Y - 2 * points[1].Y + points[2].Y) / 6;

start = points[0];
end = new PointF
(
points[0].X + deltaX,
points[0].Y + deltaY
);

graphics.DrawCubicCurve(pen, beta, step, start, end, a3, a2, a1, a0, b3, b2, b1, b0);
}

for ( int i = 1; i < points.Length - 2; i++)
{
a0 = (points[i - 1].X + 4 * points[i].X + points[i + 1].X) / 6;
b0 = (points[i - 1].Y + 4 * points[i].Y + points[i + 1].Y) / 6;

a1 = (points[i + 1].X - points[i - 1].X) / 2;
b1 = (points[i + 1].Y - points[i - 1].Y) / 2;

a2 = (points[i - 1].X - 2 * points[i].X + points[i + 1].X) / 2;
b2 = (points[i - 1].Y - 2 * points[i].Y + points[i + 1].Y) / 2;

a3 = (-points[i - 1].X + 3 * points[i].X - 3 * points[i + 1].X + points[i + 2].X) / 6;
b3 = (-points[i - 1].Y + 3 * points[i].Y - 3 * points[i + 1].Y + points[i + 2].Y) / 6;

start = new PointF
(
points[0].X + deltaX * i,
points[0].Y + deltaY * i
);

end = new PointF
(
points[0].X + deltaX * (i + 1),
points[0].Y + deltaY * (i + 1)
);

graphics.DrawCubicCurve(pen, beta, step, start, end, a3, a2, a1, a0, b3, b2, b1, b0);
}

{
a0 = points[points.Length - 1].X;
b0 = points[points.Length - 1].Y;

a1 = points[points.Length - 2].X - points[points.Length - 1].X;
b1 = points[points.Length - 2].Y - points[points.Length - 1].Y;

a2 = 0;
b2 = 0;

a3 = (points[points.Length - 1].X - 2 * points[points.Length - 2].X + points[points.Length - 3].X) / 6;
b3 = (points[points.Length - 1].Y - 2 * points[points.Length - 2].Y + points[points.Length - 3].Y) / 6;

start = points[points.Length - 1];

end = new PointF
(
points[0].X + deltaX * (points.Length - 2),
points[0].Y + deltaY * (points.Length - 2)
);

graphics.DrawCubicCurve(pen, beta, step, start, end, a3, a2, a1, a0, b3, b2, b1, b0);
}
}
}

* This source code was highlighted with Source Code Highlighter .


рд╕рд╛рд╣рд┐рддреНрдп


рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдФрд░ рд▓рдЧрднрдЧ рд╕рднреА рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд▓реЗрдЦ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ "рд╢реНрд░реЗрдгреАрдмрджреНрдз рдПрдЬ рдмрдВрдбрд▓реНрд╕:
рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рдореЗрдВ рдЖрд╕рдиреНрди рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рджреГрд╢реНрдпред " рдбреИрдиреА рд╣реЛрд▓реНрдЯрди рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛

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


All Articles