শেপলি সহ বহুভুজ ওভারলে


15

আমি শেপলি (প্রদত্ত বহুভুজ এ, বি এবং সি) দিয়ে নীচে নির্দেশিত সমস্ত অ-ওভারল্যাপিং বহুভুজগুলি ক্যাপচার করার চেষ্টা করছি। তদুপরি, আমি পুনরাবৃত্তি ছাড়াই এটি করার আশা করছি, ছেদ করার জন্য পরীক্ষা করা ইত্যাদি this এই প্রশ্নের স্বীকৃত উত্তর পোস্টজিআইএস পদ্ধতিটি প্রকাশ করে তবে মনে হয় যে 'ইউনিয়ন' অর্থ বিভিন্ন লোকের কাছে বিভিন্ন জিনিস।

বহুভুজ ওভারলে

উত্তর:


21

আপনার কোনও স্তরে পুনরাবৃত্তি করা দরকার। ( আপডেট : আমি একটি তালিকা বোঝার ব্যতীত সমস্ত "জন্য" লুপগুলি মুছে ফেলার জন্য সম্পাদনা করেছি )

# imports used throughout this example
from shapely.geometry import Point
from shapely.ops import cascaded_union
from itertools import combinations

# Here are your input shapes (circles A, B, C)
A = Point(3, 6).buffer(4)
B = Point(6, 2).buffer(4)
C = Point(1, 2).buffer(4)

# list the shapes so they are iterable
shapes = [A, B, C]

প্রথমে প্রতিটি আকারের সংমিশ্রণ জোড়া ব্যবহার করে আপনাকে সমস্ত ছেদগুলির ইউনিট ( ক্যাসকেড ইউনিয়ন ব্যবহার করুন) প্রয়োজন । তারপরে আপনি সমস্ত আকারের মিলন থেকে (মাধ্যমে ) ছেদগুলি সরিয়ে ফেলুন ।difference

# All intersections
inter = cascaded_union([pair[0].intersection(pair[1]) for pair in combinations(shapes, 2)])
# Remove from union of all shapes
nonoverlap = cascaded_union(shapes).difference(inter)

এখানে nonoverlapদেখতে দেখতে (জেটিএস টেস্ট বিল্ডারের মাধ্যমে): nonoverlap


1

কয়েক বছর পরে আরও ভাল সমাধান হতে পারে বলে মনে হচ্ছে shapely:

# imports used throughout this example
from shapely.geometry import Point
from shapely.ops import polygonize, unary_union

# Here are your input shapes (circles A, B, C)
A = Point(3, 6).buffer(4)
B = Point(6, 2).buffer(4)
C = Point(1, 2).buffer(4)
...

# list the shapes so they are iterable
shapes = [A, B, C, ...]

# generate the overlay
list(polygonize(unary_union(list(x.exterior for x in shapes))))

এটি জ্যামিতির যে কোনও দৈর্ঘ্যকে সমর্থন করে, এটি শুধুমাত্র গণনার সময় সম্পর্কে সমস্যা এবং গর্ত দিয়ে বহুভুজকে সমর্থন না করে।


কৌতূহলের বাইরে আপনি কেন মনে করেন যে আপনার সমাধানটি @ মাইকটি দ্বারা করা সমাধানের চেয়ে ভাল? আমি কেবল গণনার সময় অনুসারে কোনও সমস্যা সম্পর্কে পড়তে পারি।
মিগ্রি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.