Shapely: рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдмрд╣реБрднреБрдЬ рдореЗрдВ рдмрджрд▓реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЕрдЧре░ 2012  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Toblerity/Shapely

рдирдорд╕реНрддреЗ,

рдореБрдЭреЗ рдлрд╝реЛрд░рдо рдХреА рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдирд╣реАрдВ рдорд┐рд▓реА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдБ рдкреВрдЫрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБред рдХреНрдпрд╛ рдкреЙрдЗрдВрдЯреНрд╕ рдХреА рд╕реВрдЪреА рд╕реЗ рдкреЙрд▓реАрдЧреЙрди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП "рдХреИрдиреЛрдирд┐рдХрд▓" рдлреЙрд░реНрдо рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

list_points = []
vertices = [Point(1,1), Point(2,2), Point(3,3)]
for i in xrange(len(vertices)):
    list_points.append(vertices[i])
polygon = Polygon(list_points)

рдпрд╣ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрддреНрддрд▓_рд╣реБрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛:

poly = MultiPoint(list_points).convex_hull

рдореИрдВ рдЬреЛ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИред

рдзреИрд░реНрдп рдФрд░ рдЕрдЪреНрдЫреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдлрд┐рд░ рдХрднреА рдЗрддрдирд╛ рдереЛрдбрд╝рд╛ рддреЗрдЬ:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

>>> points = [Point(0,0), Point(2,2), Point(2,0)]
>>> coords = sum(map(list, (p.coords for p in points)), [])
>>> poly = Polygon(coords)
>>> poly.area
2.0

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рд░ рд╕рдордп рдЧреБрдЧрд▓реА рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ (рдореБрдЭреЗ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд▓рдЧрддрд╛ рд╣реИ):

>>> points = [Point(0,0), Point(2,2), Point(2,0)]
>>> coords = [(p.x, p.y) for p in points]
>>> poly = Polygon(coords)
>>> poly.area
2.0

рдЯрд╛рдЗрдорд┐рдЯ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдХреИрд╢ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рд▓реЗрдХрд┐рди @sgillies рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рдЧрд╛рддрд╛рд░ 2/3 рддреЗрдЬ рд▓рдЧрддрд╛ рд╣реИ (~ 65┬╡s рдореЗрд░рд╛ рдмрдирд╛рдо ~ 45┬╡s рдЙрд╕рдХрд╛) рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдЧрдЬрд┐рд▓рд┐рдпрди рдкреЙрдЗрдВрдЯреНрд╕ рдпрд╛ рдкреЙрд▓реА рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЕрд▓реНрдЯреНрд░рд╛ рд╣рд╛рд░реНрдбрдХреЛрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдлрд┐рд░ рдХрднреА рдЗрддрдирд╛ рдереЛрдбрд╝рд╛ рддреЗрдЬ:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

MarkWieczorek picture MarkWieczorek  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

romainfontaine picture romainfontaine  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dopplershift picture dopplershift  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

akadouri picture akadouri  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mromanie picture mromanie  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ