рдПрдХ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг

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


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рдмрд╣реБрднреБрдЬ рдПрдХ рддреНрд░рд┐рднреБрдЬ рдпрд╛ рдПрдХ рдЪрддреБрд░реНрднреБрдЬ рд╣реИ, рддреЛ рд╢рдмреНрдж рдХреЗ рдкреВрд░реНрдг рдЕрд░реНрде рдореЗрдВ рдХреЛрдИ рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреАрди рдпрд╛ рдЪрд╛рд░ рд╕реВрддреНрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдпрджрд┐ рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдбрд╝реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд┐рд▓рд┐рдпрди рдпрд╛ рдПрдХ рд╕реМ рдорд┐рд▓рд┐рдпрди рдЪреЛрдЯрд┐рдпрд╛рдВред рдРрд╕рд╛ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХрд╛рдлреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рдЧрддрд╛ рд╣реИред рднреЛрд▓реА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБ рд╕реЗ рдПрдХ рдХрд┐рд░рдг рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдмрд╣реБрднреБрдЬ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдЪреМрд░рд╛рд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрд┐рдирддреА рдХрд░рдирд╛) рдмрд╣реБрднреБрдЬ n рдХреЗ рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░реИрдЦрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдмрд╣реБрднреБрдЬ рдХреЗ рд╕рднреА рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд░рдг рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рддрджрдиреБрд╕рд╛рд░, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЕрд░реНрдерд╛рддред рдХреНрдпрд╛ рдЗрд╕ рдХрдерди рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╕реАрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ? рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИ рд╣рд╛рдВ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордп рд╣реЗ (рд▓реЙрдЧ 2 рдПрди) рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг, рдЬрдм рдмрд╣реБрднреБрдЬ рдХреЛ рдЙрддреНрддрд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрджреНрднреБрдд рдкреБрд╕реНрддрдХ [ 2 ] рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдиреАрдЪреЗ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдПрдХ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЫреЛрдЯрд╛ рд╢реИрдХреНрд╖рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо


рддреАрди рдмрд┐рдВрджреБрдУрдВ A, B рдФрд░ C рдХреЛ рджрд┐рдП рдЬрд╛рдПрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдмрд┐рдВрджреБ A рд╕реЗ рдмрд┐рдВрджреБ B рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реИрдВред рдмрд┐рдВрджреБ C рд╣рдорд╛рд░реЗ рдЯрдХрдЯрдХреА рдХреА рджрд┐рд╢рд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдмрд┐рдВрджреБ рд╕реЗ рджрд╛рдИрдВ рдУрд░ рдпрд╛ рдмрд╛рдИрдВ рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реИ? рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рд╡реИрдХреНрдЯрд░ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рдж рдХреА рдорджрдж рд╕реЗ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ a = AB рдФрд░ b = BC, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдРрд╕реЗ рдЙрддреНрдкрд╛рдж рдХреЗ z- рд╕рдордиреНрд╡рдп рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ, рдЬрд┐рд╕рдХреА рдЧрдгрдирд╛ рд╕рд░рд▓ рд╕реВрддреНрд░ z = a x b y -a y x рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ ред рдпрджрд┐ z> 0 рд╣реИ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рд░реЛрдЯреЗрд╢рди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ z <0 рддреЛ рд╕рд╣реАред рдпрджрд┐ рд╕рд┐рдХреНрдХрд╛ рдХрд┐рдирд╛рд░реЗ z = 0 рдкрд░ рдЧрд┐рд░рддрд╛ рд╣реИ , рддреЛ рддреАрди рдмрд┐рдВрджреБ рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реИрдХреНрдЯрд░ a рдФрд░ b рдЯрдХрд░рд╛ рд░рд╣реЗ рд╣реИрдВ)ред

рдкрд╛рдпрдерди рдХреЛрдб рд░реЛрдЯреЗрд╢рди рдХреА рджрд┐рд╢рд╛ рдХреА рдЧрдгрдирд╛ рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ (рдЕрдВрдХ 2 рд▓рдВрдмрд╛рдИ рдХреА рд╕реВрдЪреА рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЧрдП рд╣реИрдВ):
def rotate(A,B,C): return (B[0]-A[0])*(C[1]-B[1])-(B[1]-A[1])*(C[0]-B[0]) 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдЪреНрдЫреЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рджреЛ рджрд┐рдП рдЧрдП рдЦрдВрдб AB рдФрд░ CD рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рд╣реИрдВ? рдпрд╣, рд╡реИрд╕реЗ, рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рдПрдХ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди рд╣реИ, рдФрд░ рд╣рдореЗрдВ рднреА рдЬрд▓реНрдж рд╣реА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░)ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ - рджреЛ рд╕реЗрдЧрдореЗрдВрдЯ рдпрджрд┐ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдХрд╛ рдЕрдВрдд рджреВрд╕рд░реЗ рдХреЗ рд╡рд┐рдкрд░реАрдд рдкрдХреНрд╖реЛрдВ рдкрд░ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реЛрддреЗ рд╣реИрдВред
рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЕрдВрдХ C рдФрд░ D рдЦрдВрдб (рд╡реЗрдХреНрдЯрд░) AB рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рдЖрдкрдХреЛ рдШреВрд░реНрдгрди (A, B, C) рдФрд░ рдШреВрд░реНрдгрди (A, B, D) рдХреЗ рдШреВрд░реНрдгрди рджрд┐рд╢рд╛рдУрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЗрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдХреЗрдд рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рддреЛ рд▓рд╛рдЗрди рдПрдмреА рд╕реЗрдЧрдореЗрдВрдЯ рд╕реАрдбреА (рдФрд░ рдЖрдВрддрд░рд┐рдХ рдмрд┐рдВрджреБ рдкрд░) рдХреЛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддреА рд╣реИред рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рдВрдХреЗрдд рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдпрджрд┐ рдФрд░ рдХреЗрд╡рд▓ рдпрджрд┐ рдЙрдирдХрд╛ рдЙрддреНрдкрд╛рдж рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдмреА рдФрд░ рд╕реАрдбреА рдЦрдВрдбреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХреА рдХрд╕реМрдЯреА рджреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ рд╣реИ (рдП, рдмреА, рд╕реА) * рдШреБрдорд╛рдПрдВ (рдП, рдмреА, рдбреА) рдФрд░ рдШреБрдорд╛рдПрдВ (рд╕реА, рдбреА, рдП) * рдШреБрдорд╛рдПрдВ (рд╕реА, рдбреА, рдмреА)ред рдпрджрд┐ рд╣рдо рд╕рдЦреНрдд рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЛ рдЧреИрд░-рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЦрдВрдбреЛрдВ рдХреЗ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЕрдВрддрд░-рдмрд┐рдВрджреБ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдХреБрдЫ рдордзреНрдпрд╡рд░реНрддреА рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЕрд░реНрдерд╛рддреН, рдПрдХ рдЙрддреНрдкрд╛рдж рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдЦреНрддреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рджреВрд╕рд░рд╛ - рд╕рдЦреНрддреА рд╕реЗ:
 def intersect(A,B,C,D): return rotate(A,B,C)*rotate(A,B,D)<=0 and rotate(C,D,A)*rotate(C,D,B)<0 

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

рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ


рдЕрдм рд╣рдо рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ P рдХреЛ n рдХреЛрдиреЗ рдФрд░ рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рдорд┐рд▓рдХрд░ A рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ P рдореЗрдВ рдХреЛрдиреЗ рдХреНрд░рдорд╛рдВрдХрд┐рдд рд╡рд╛рдорд╛рд╡рд░реНрдд рд╣реИрдВ (рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ P рдХреА рдкрд░рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреА рджрд┐рд╢рд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИ)ред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рдЪрд╛рд░: рдмрд╣реБрднреБрдЬ P 0 рдХреЗ рдкрд╣рд▓реЗ рд╢реАрд░реНрд╖ рдХреЛ рд▓реЗрдВ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕ рдЦрдВрдб (рдХреЛрдг) рдореЗрдВ P i P P P i + 1 рдмрд┐рдВрджреБ A. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рджреЗрдЦреЗрдВ рдХрд┐ A рдЦрдВрдб P n-1 P 0 P 1 P рдореЗрдВ рдЖрддрд╛ рд╣реИ рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдП рдХреЛ рдмрд╣реБрднреБрдЬ рдХреЗ рдмрд╛рд╣рд░ рдЭреВрда рдмреЛрд▓рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред

рдХреЛрдб:
 def pointloc(P,A): n = len(P) if rotate(P[0],P[1],A)<0 or rotate(P[0],P[n-1],A)>0: return False 

рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╢рд╛рд╕реНрддреНрд░реАрдп рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдореЗрдВ рд╣реИ - рд╣рдордиреЗ p = 1, r = n-1 (рд╡рд░реНрддрдорд╛рди рдЦрдВрдб рдХреА рд╕реАрдорд╛рдПрдВ) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реИрдВ, рдордзреНрдп рд╢реАрд░реНрд╖ q q (p + r) / 2 рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рд╡реЗрдХреНрдЯрд░ рд╡реЗрдХреНрдЯрд░ 0 P q рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ A рд╕реНрдерд┐рдд рд╣реИ, рд╡рд╣рд╛рдВ рджреЗрдЦреЗрдВ рдмрд╛рдПрдВ, рдлрд┐рд░ r рдХреЛ q рд╕реЗ рдмрджрд▓реЗрдВ, рдпрджрд┐ рджрд╛рдИрдВ рдУрд░, рддреЛ p рдХреЛ q рд╕реЗ рдмрджрд▓реЗрдВред

рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддрдм рддрдХ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЖрд░рдкреА = 1 рди рд╣реЛ рдЬрд╛рдП:
  p, r = 1, n-1 while rp>1: q = (p+r)/2 if rotate(P[0],P[q],A)<0: r = q else: p = q 

рдЕрдм рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реЗрдЧрдореЗрдВрдЯ P 0 A рдФрд░ P P P рдЖрд░ рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯ рд╣реИ?
рдпрджрд┐ рд╡реЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рдВрджреБ A рдмрд╛рд╣рд░ рд╕реНрдерд┐рдд рд╣реИ, рдпрджрд┐ рд╡реЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрджрд░ред

рдХреЛрдб:
  return not intersect(P[0],A,P[p],P[r]) 

рдмрд╕ рдЗрддрдирд╛ рд╣реА ...

рдкрд░рд┐рдгрд╛рдо


рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╢рд╛рд╕реНрддреНрд░реАрдп рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдПрд▓реНрдЧреЛрд░рд┐рджрдо - рдУ (рд▓реЙрдЧ 2 рдПрди) рдХреЗ рд╕рдорд╛рди рд╣реИред рдФрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдХреЗ рд▓рд┐рдП рддреЗрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рд╣рдордиреЗ рдЬрд┐рд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ рд╡рд╣ рдХреБрдЫ рдЧреИрд░-рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ - рдРрд╕реЗ рдмрд╣реБрднреБрдЬреЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рд╢реАрд░реНрд╖ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╡рд┐рдХрд░реНрдг рдмрд╣реБрднреБрдЬ рдХреЗ рдЕрдВрджрд░ рдЭреВрда рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

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

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

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

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


  1. рдкреАред рдкреНрд░рд┐рд╕рд┐рдВрдХрд╡рд┐рдХреНрдЬрд╝, рдПред рд▓рд┐рдВрдбреЗрдирдорд╛рдпрд░, рдкреМрдзреЛрдВ рдХреА рдПрд▓реНрдЧреЛрд░рд┐рджрдорд┐рдХ рд╕реБрдВрджрд░рддрд╛ , 1996
  2. рдПрдоред рдбреАред рдмрд░реНрдЧ, рдУред рдЪреЗрдпреЛрдВрдЧ, рдПрдоред рд╡реИрди рдХреНрд░реЗрд╡реЗрд▓реНрдб, рдПрдоред рдУрд╡рд░рдорд░, рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬреНрдпрд╛рдорд┐рддрд┐ред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ , 2008
  3. рдПрдлред рдкреНрд░рд┐рдкрдЯрд╛рдЯрд╛, рдПрдоред рд╢реЗрдореЛрд╕, рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬреНрдпрд╛рдорд┐рддрд┐ , 1989

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


All Articles