مضلع رشيق_.العازلة (0) "يفقد" نصف بلدي ربطة العنق

StackOverflow https://stackoverflow.com//questions/21058314

  •  22-12-2019
  •  | 
  •  

سؤال

لقد رأيت على الإنترنت أن المخزن المؤقت (0) يجب أن "يصلح" الأقواس.يجد بشكل رشيق نقطة تقاطع ربطة العنق ، لكنه يحتفظ بالجزء العلوي الأيمن فقط.أبحث عن حل بديل ، حاولت عكس ترتيب نقاطي.والمثير للدهشة (بالنسبة لي) ، أن نفس الجزء العلوي الأيمن من ربطة العنق كان لا يزال هو الجزء الذي تم الاحتفاظ به.أنا لا أفهم.أي مساعدة تقدير.

أود الاحتفاظ ربطة العنق بأكملها كمثلثين (خام مضلع واحد من ستة جوانب-إما أن يكون مفيدا).تبحث عن حل بديل لهذه " المشكلة."

#!/usr/bin/env python3

from shapely.geometry.polygon import Polygon

bowtie_plot = [(1, 0), (0, 1), (0, -1), (-1, 0)]

bowties = [
        Polygon(bowtie_plot),
        Polygon(bowtie_plot[::-1])
        ]

cleaned = [
        bowties[0].buffer(0),
        bowties[1].buffer(0)
        ]

print('cleaned[0] exterior = {}'.format(list(cleaned[0].exterior.coords)))
# cleaned[0] exterior = [(0.0, 0.0), (-1.0, 1.0), (1.0, 1.0), (0.0, 0.0)]

print('cleaned[1] exterior = {}'.format(list(cleaned[1].exterior.coords)))
# cleaned[1] exterior = [(0.0, 0.0), (-1.0, 1.0), (1.0, 1.0), (0.0, 0.0)]

# ADDITIONAL INFORMATION BELOW
# here's what shapely *can* do with intersecting lines:
# a star shape made of five intersecting lines and five points

from math import sin, cos, pi

star = Polygon(
        [(cos(x*pi*4/5), sin(x*pi*4/5)) for x in range(5)]
        ).buffer(0)

# after buffering, becomes a star shape made out of ten lines and ten points
# shapely found all intersections and corrected the polygon.
print('list exterior = {}'.format(list(star.exterior.coords)))

بعد التفكير في الأمر ، أستطيع أن أفهم لماذا يتم التعامل مع ربطة العنق بشكل مختلف عن النجمة ، لكنني مهتم بإيجاد حل بديل.

هل كانت مفيدة؟

المحلول

ربطة العنق الخاصة بك ليست صالحة بشكل جميل مضلع.اقرأ هذه الوثائق ، والوثائق الخاصة بـ الخطي (فقط فوق Polygon الوثائق).على وجه الخصوص ، لاحظ أمثلة صالحة وغير صالحة LinearRings.

إذا قمت بإنشاء ربطة العنق مثل هذا:

In [46]: bt = [(1,0), (0,1), (0,0), (-1,0), (0, -1), (0,0)]

In [47]: poly = Polygon(bt)

ثم buffer(0) إرجاع أ مولتيبوليغون:

In [48]: poly.buffer(0)
Out[48]: <shapely.geometry.multipolygon.MultiPolygon at 0x4a40050>

نصائح أخرى

buffer(0) لا ينتج دائما مولتيبوليغون:

from shapely.wkt import loads

bt = loads('POLYGON ((0 0, 2 2, 2 0, 0 2, 0 0))')<br>
bt.buffer(0).wkt 

produces 'POLYGON ((1 1, 2 2, 2 0, 1 1))'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top