рдпрд╣ рджреЗрдЦрдирд╛ рдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдПрдХ рдЧреИрд░-рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рд░реИрдЦрд┐рдХ рд╕рдордп рдореЗрдВ рдЧреИрд░-рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╕рдмрд╕реЗ рдЖрдо рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмреАрдо рдбрд╛рд▓рдирд╛ рдФрд░ рдЪреМрд░рд╛рд╣реЗ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрди рдорд╛рдорд▓реЛрдВ рдкрд░ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд╣рд╛рдВ рдмрд╣реБрднреБрдЬ рдХреЗ рдмрд┐рдВрджреБ рдмреАрдо рдкрд░ рдЖрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╡рд╛рд▓ рдЙрдард╛рддрд╛ рд╣реИ рдХрд┐ рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдП?

рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг


рд╣рдо рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдмрд┐рдВрджреБ 10 8 рддрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╣реИрдВред рд╕рд░рд▓рддрд╛ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛рдПрдВрдЧреЗред рдЖрдЗрдП рд╣рдо рд╕рдВрдпреЛрдЧ рд╕реЗ рд▓рдВрдмрд╡рдд, рдкрдХреНрд╖реЛрдВ рдкрд░ рдХреЛрдиреЗ, рдЖрддреНрдо-рд╕реНрдкрд░реНрд╢ рдФрд░ рд╢реВрдиреНрдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╣рд▓ рдХрд░реЗрдВред рд╣рдо рд╕реНрд╡рдпрдВ-рдЪреМрд░рд╛рд╣реЛрдВ рдХреЛ рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЯреВрдЯреА рд╣реБрдИ рд░реЗрдЦрд╛ рдХреЗ рдЗрдВрдЯреАрд░рд┐рдпрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдкреЙрд▓реАрдЧреЙрди рдХреА рд╕реАрдорд╛ рдкрд░ рдмрд┐рдВрджреБ рдирд┐рд╣рд┐рдд рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ 0 рд╡рд╛рдкрд╕ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдкреЙрд▓реАрдЧреЛрди рдХреЗ рдмрд╛рд╣рд░ рдФрд░ -1 рдкреЙрд▓реАрдЧреЙрди рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИ рддреЛ рдпрд╣ 1 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдпреЛрдЬрдирд╛


рдЖрдЬреНрдЮрд╛ рджреЗрдирд╛ x 1 , x 2 , ..., x n рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рд╣реИрдВ (рдЗрдиреНрд╣реЗрдВ рдХреНрд▓реЙрдХ рд╡рд╛рдЗрдЬ рдпрд╛ рд╡рд╛рдорд╛рд╡рд░реНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), y рд╡рд╣ рдмрд┐рдВрджреБ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ n = 1 рд╣реИ, рддреЛ рдпрд╣ y рдФрд░ x 1 рдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЕрдиреНрдпрдерд╛, рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдПрдл ( y ) = рдПрдл ( рдПрдХреНрд╕ 1 , рдПрдХреНрд╕ 2 , рд╡рд╛рдИ ) ┬╖ рдПрдл ( рдПрдХреНрд╕ 2 , рдПрдХреНрд╕ 3 , рд╡рд╛рдИ ) ┬╖ рд╕рд╛рдЗрдВрд▓реЗрдВрд╕рд░ рдПрдл ( рдПрдХреНрд╕ рдПрди -1 , рдПрдХреНрд╕ рдПрди , рд╡рд╛рдИ ) ┬╖ рдПрдл ( рдПрдХреНрд╕ рдПрди , рдПрдХреНрд╕ 1 , рд╡рд╛рдИ )ред рдлрд╝рдВрдХреНрд╢рди f ( a , b , c ) рдорд╛рди 1, 0, -1 рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрд┐рдВрджреБ рдПрдХреНрд╕ рд╕реЗ рд╕рд╛рде рдирд┐рдХрд▓реА рд╣реБрдИ рдХрд┐рд░рдг рдПрдХреНрд╕ рд╕реЗрдЧрдореЗрдВрдЯ ( рдП , рдмреА ) рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдкрд╛рд░ рдХрд░рддреА рд╣реИ , рд╕рднреА рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рдЪреМрд░рд╛рд╣реЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ -1 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдмрд┐рдВрджреБ c рд╕реЗрдЧрдореЗрдВрдЯ ( a , b ) рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рдпрд╣ 0 рдкрд░ рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдпрд╣ 1 рдкрд░ рд▓реМрдЯреЗрдЧрд╛ред

1 рдФрд░ -1 рдорд╛рдорд▓реЗ

рд╣рдо рдлрдВрдХреНрд╢рди рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ


рдПрдХ рдмрд┐рдВрджреБ рдмрд╣реБрднреБрдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдкреВрд░реА рдЬрдЯрд┐рд▓рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдЦреЛрдЬрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди f рдореЗрдВ рдкрд╣рд▓рд╛ рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢ c рдФрд░ b рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рд╣реИред рдЗрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ ax , ay , bx рдФрд░ by ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 5 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╡рд╛рд▓реЗ рд╕рднреА рд╕рдВрднрд╡ рдЦрдВрдбреЛрдВ ( рдП , рдмреА ) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЙрддреНрддрд░ рдкрд╛рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдЙрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ f рд╕реЗ signum(ax * by - ay * bx) , signum(ax) , signum(bx) , signum(ay) , signum(by) ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рдВрдХреНрд╢рди f рдХреЛ рдЗрди 5 рдореВрд▓реНрдпреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдорд╛рди -1, 0 рдпрд╛ 1 рд▓реЗ рд╕рдХрддрд╛ рд╣реИред
рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдВрдиреЗ рдЗрди рд░рд╛рд╢рд┐рдпреЛрдВ рдХреЗ рд░реИрдЦрд┐рдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрддрд░ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЖрдпрд╛ред рдЕрдЧрд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдиреЗрд╕реНрдЯреЗрдб ifs рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо ifs рдХреА рд╕рдВрдЦреНрдпрд╛ + рд░рд┐рдЯрд░реНрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪреБрдирддреЗ рд╣реИрдВред Ifs рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо S рдореЗрдВ рдлреЙрд░реНрдо v i рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ v i , рдКрдкрд░ рджрд┐рдП рдЧрдП 5 signum рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдФрд░ S {-1, 0, 1} рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реИред
рдЕрдм рдЖрдк рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдиреНрдпреВрдорд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ 5 рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдФрд░ рдЗрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдг рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдПрдиреНрдпреВрдорд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдиреНрдпреВрдирддрдо рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЯреНрд░реА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЦреЛрдЬ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдкреВрд░реА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЧрдИред рдирддреАрдЬрддрди, рдЬрдЯрд┐рд▓рддрд╛ 27 рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╖реНрдЯрддрдо рд╣реЛ рдЧрдпрд╛ред рдореИрдВрдиреЗ рдкреНрд░рдкрддреНрд░ v i рдФрд░ - v i рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬрдЯрд┐рд▓рддрд╛ 18 рддрдХ рдЧрд┐рд░ рдЧрдИред рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдПрдХ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдиреЗ рд╕рдВрдХреЗрдд ax рдФрд░ bx рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рдПрдХ xor рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЪрд░ signum(ax * bx) рдЬреЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ 13. рдкрд░ рдЧрд┐рд░ рдЧрдИред рдЪрд░ signum(ay * by) рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдиреЗ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдШрдЯрд╛рдХрд░ 11. рдХрд░ рджрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рдХрд╛рд░реНрдп рдерд╛:
 public static int check2(Point a, Point b, Point middle) { long ax = ax - middle.x; long ay = ay - middle.y; long bx = bx - middle.x; long by = by - middle.y; if (ay * by > 0) return 1; int s = Long.signum(ax * by - ay * bx); if (s == 0) { if (ax * bx <= 0) return 0; return 1; } if (ay < 0) return -s; if (by < 0) return s; return 1; } 

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рдирд┐рдХрд▓рд╛ рдФрд░ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдлреА рдХрдо рдерд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЫреЛрдЯреА рд▓рдВрдмрд╛рдИ рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИ:
  1. рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЦрдВрдб ( рдП , рдмреА ) рдХрд┐рд░рдг рдХреЗ рдПрдХ рддрд░рдл рдХрдбрд╝рд╛рдИ рд╕реЗ рд╕реНрдерд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдИ рдЪреМрд░рд╛рд╣рд╛ рдирд╣реАрдВ рд╣реИред
  2. рдЬрдм рдмрд┐рдВрджреБ c рд▓рд╛рдЗрди ( a , b ) рдкрд░ рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╣рдо рдкрддрд┐рдд рдорд╛рдорд▓реЗ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╢реВрдиреНрдп рдХреЗ рдЙрддреНрддрд░ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЕрдВрдХ y рдЕрдХреНрд╖ рдХреЗ рдПрдХ рддрд░рдл рд╕реНрдерд┐рдд рд╣реЛрдВред рдпрджрд┐ рд╡реЗ рджреЛрдиреЛрдВ y рдЕрдХреНрд╖ рдкрд░ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдорд▓рд╛ рдЬрдм c рд╕реЗрдЧрдореЗрдВрдЯ рдкрд░ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓рддрд╛ рд╣реИ ( a , b ) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд┐рдЫрд▓реЗ рдЦрдВрдб рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдПрдХ рдЦрдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдХрд┐рд░рдг рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП Xor рдЬреИрд╕рд╛ рдХреЛрдбред s рдХрд╛ рд╕рдВрдХреЗрдд рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд░рдг рдХреЗ рдиреАрдЪреЗ рдХреМрди рд╕рд╛ рдмрд┐рдВрджреБ рд╣реИред рдпрд╣рд╛рдБ рдЖрдк рджреЛ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╛рдЗрдирд╕ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ; рдХрдо рд╕рдВрдХреЗрдд, рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВред
  4. рд╣рдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ 1 рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ рдЬрдм рдПрдХ рдмрд┐рдВрджреБ рдмреАрдо рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕рдХреЗ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рддрд░рдл рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪреМрд░рд╛рд╣реЛрдВ рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдЪреМрд░рд╛рд╣реЗ рдХреЛ рджреЛ рдмрд╛рд░ рдЧрд┐рдирд╛ рди рдЬрд╛рдП рдпрджрд┐ рдмрд╣реБрднреБрдЬ рдХрд╛ рд╢реАрд░реНрд╖ рдПрдХ рдХрд┐рд░рдг рд╕реЗ рдЯрдХрд░рд╛рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ! рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, ay by рдЧреБрдгрд╛ by ред рдХреНрдпреЛрдВ рдЗрд╕реЗ ay < 0 ^ by < 0 рддрд░рд╣ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЧреБрдгрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ? рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдЪрд░ рдХреЛ рдЦреЛрдЬ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЕрдЧрд▓рд╛ рд░рди ... рдФрд░ рдпрд╣ рдЬрдЯрд┐рд▓рддрд╛ 9 рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ! рдирдпрд╛ рд╡рд┐рдХрд▓реНрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 public static int check3(Point a, Point b, Point middle) { long ax = ax - middle.x; long ay = ay - middle.y; long bx = bx - middle.x; long by = by - middle.y; int s = Long.signum(ax * by - ay * bx); if (ay < 0 ^ by < 0) { if (by < 0) return s; return -s; } if (s == 0 && ax * bx <= 0) return Long.signum(ay * by); return 1; } 

рдЖрдк рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Long.signum(ay * by) ay < 0 ^ by < 0 рд▓рд┐рдП ay < 0 ^ by < 0 рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж ay < 0 ^ by < 0 рдорд╛рди Long.signum(ay * by) -1 рдирд╣реАрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 public static int check3(Point a, Point b, Point middle) { long ax = ax - middle.x; long ay = ay - middle.y; long bx = bx - middle.x; long by = by - middle.y; int s = Long.signum(ax * by - ay * bx); if (ay < 0 ^ by < 0) { if (by < 0) return s; return -s; } if (s == 0 && (ay == 0 || by == 0) && ax * bx <= 0) return 0; return 1; } 

рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рджреЛ рд╢реАрд░реНрд╖-рд╕реНрддрд░ рдХреЗ рдЖрдЗрдлреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рдк рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдкрд░рд┐рдЪрд╛рд▓рди рд╕рдордп рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд▓рд╛рдн рджреЗрддрд╛ рд╣реИ:
 public static int check3(Point a, Point b, Point middle) { long ax = ax - middle.x; long ay = ay - middle.y; long bx = bx - middle.x; long by = by - middle.y; int s = Long.signum(ax * by - ay * bx); if (s == 0 && (ay == 0 || by == 0) && ax * bx <= 0) return 0; if (ay < 0 ^ by < 0) { if (by < 0) return s; return -s; } return 1; } 


рдирдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣реИред ay < 0 ^ by < 0 рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ay < 0 ^ by < 0 , рдПрдХ рдЫреЛрдЯреЗ рд╕рдВрдХреЗрдд рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ рдмрдбрд╝реЗ рдЪрд┐рд╣реНрди рдпрд╛ рдПрдХ рдЧреИрд░-рд╕рдЦреНрдд рдЪрд┐рд╣реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред s рдкрд░ рдЛрдг рдЪрд┐рд╣реНрди рдлрд┐рд░ рд╕реЗ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред by рдЪрд░ рдХреЛ рдиреЗрд╕реНрдЯреЗрдб if'e ay рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирдП рдПрд▓реНрдЧреЛрд░рд┐рдердо рдореЗрдВ рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╢реВрдиреНрдп рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдордЭрдирд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рде рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рдорд╛рдорд▓реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред

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

рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ 32-рдмрд┐рдЯ рдЬреЗрд╡реАрдПрдо рдкрд░, рдЪреЗрдХ 2 рдлрд╝рдВрдХреНрд╢рди рдЪреЗрдХ 3 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИред 64-рдмрд┐рдЯ JVM рдкрд░, рдкрд░рд┐рдгрд╛рдо рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХрд╛рдлреА рдХрдо рд╣реИ - 5-10%ред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ ax * bx <= 0 рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЬрд╛рд╡рд╛ рдорд╢реАрди рдХреЗ 32-рдмрд┐рдЯ рдпрд╛ 64-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдЬреЛ рд▓реЛрдЧ рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд: PolyCheck.zip

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


All Articles