рдПрдХ рд╣реЗрдХреНрд╕рд╛рдЧреЛрдирд▓ рдЧреНрд░рд┐рдб рдкрд░ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдирд╛

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╡рд╣ рдореБрд╢реНрдХрд┐рд▓ рдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рдерд╛ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ), рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рдореЗрд░реА рдЕрдкрдиреА рд╕рд░рд▓ рдмрд╛рдЗрдХ рд▓рдЧ рд░рд╣реА рдереАред

рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА:
рдПрдХ рдирд┐рдпрдорд┐рдд рдЖрдпрддрд╛рдХрд╛рд░ рдЧреНрд░рд┐рдб рдкрд░ рдЦреЛрдЬреЗрдВред
рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:
рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╣реЗрдХреНрд╕рд╛рдЧреЛрдирд▓ рдЧреНрд░рд┐рдб рдЦреЛрдЬреЗрдВред

рд╕рд╛рдорд╛рдиреНрдп рдЧреНрд░рд┐рдб рд╕рдВрд░рдЪрдирд╛

рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЙрд▓рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдмрдХреБрдЫ рд╢рд┐рдлреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП:
рдЫрд╡рд┐
рдлрд┐рд░ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЗ рдкрдбрд╝реЛрд╕реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
рдЫрд╡рд┐
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕рд┐рд░реНрдл рд╣реЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЫрд╡рд┐
рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдЗрд╕ рдмрд╛рдд рдкрд░ рд╕рдВрджреЗрд╣ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЖрдпрддреЗрдВ:
рдЫрд╡рд┐
рдпрд╣ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдХреГрддрд┐ рдореЗрдВ k рдХрд╛ рдЖрдХрд╛рд░ sqrt (3) / 2 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдЧреНрд░рд┐рдб рдорд┐рд▓рддрд╛ рд╣реИ
рдЫрд╡рд┐
рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рдХрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрд░рдорд╢рдГ w = sqrt (3) / 2, h = 1 рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╖рдо рдХреЙрд▓рдо (рдпрджрд┐ рдЖрдк 0 рд╕реЗ рдЧрд┐рдирдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ) 0.5 рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рд╕рдордиреНрд╡рдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди

рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕реЗрд▓ рдирдВрдмрд░ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдо-рд╡рд┐рд╖рдо рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд:
(x,y)=>(x/w, (y-(x/w)%2)/h)
рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдлрд╝реАрд▓реНрдб рд╕реЗрд▓ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ:
(i,k)=>(i*w, k*h+h/2*(i%2))

рдкрдбрд╝реЛрд╕реА

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

(i,k)=>(
(i+1,k),
(i-1,k),
(i,k+1),
(I,k-1),
(i+1,k+(1-2*i%2)),
(i-1,k+(1-2*i%2)))


рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА

рдЕрдм, рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХрдореА рд╣реИ, рдмреЗрд╢рдХ рдЖрдк рддреБрдЪреНрдЫ рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдмреБрдирд┐рдпрд╛рджреА рдЖрдзрд╛рд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд рдЧреНрд░рд┐рдб рдкрд░ рд╡рд┐рдХрд░реНрдг рджреВрд░реА рд▓реЗрддреЗ рд╣реИрдВ:
xd = abs(p1.X - p2.X);
yd = abs(p1.Y - p2.Y);
diagonal = min(xd, yd);
straight = xd + yd;
result = sqrt(2) * diagonal + (straight - (2 * diagonal)));


рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИ (рд╡рд╣рд╛рдБ рднреА рд╡рд┐рдХрд░реНрдг рдЪрд╛рд▓реЗрдВ рд╣реИрдВ), рдХреЗрд╡рд▓ рд▓рдВрдмрд╡рдд рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЧреНрд░рд┐рдб рдХреЗ рдЙрдиреНрдореБрдЦреАрдХрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП), рдЖрдк рдпрд╛ рддреЛ рдПрдХ рдХрджрдо рдЦрдбрд╝реА рдпрд╛ 2 рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
//
if (xd >= yd * 2)
{
result = xd;
}
//
else
{
result = xd + (yd тАУ xd/2);
}

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╡рд░рдг рд╣реИ, рдЕрдЧрд░ рджреВрд░реА рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрдВрднреЛрдВ рд╕реЗ рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реЗрд▓ рдХреЗ рдлрд░реНрд╢ рдореЗрдВ рдПрдХ рдмреЗрд╣рд┐рд╕рд╛рдм рд╡рд┐рд╕реНрдерд╛рдкрди рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, yd рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
yd =abs((p1.Y + (p1.X%2)/2) тАУ (p2.Y + (p2.X%2)/2));

рдЕрдм рдпрд╣ рд╕рднреА рдкрд░ рдП * рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рддрджрдо:
рдЫрд╡рд┐

рдПрдХ рдЖрдлреНрдЯрд░рд╡рд░реНрдб рдХреЗ рдмрдЬрд╛рдп

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

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


All Articles