ছেদযুক্ত রেখার একটি সেট থেকে বহুভুজ তৈরি করুন


10

এটি একটি সাধারণ এবং বেশ সাধারণ প্রশ্ন যা ইতিমধ্যে বিভিন্ন উদ্দেশ্যে জিজ্ঞাসা করা হয়েছে ( এই লিঙ্কটি দেখুন এবং এটিও উদাহরণস্বরূপ) এখানে, তবে আমরা কোনও সফ্টওয়্যার প্যাকেজ নয় বরং আলগোরিদিম খুঁজছি যা আমরা বলার জন্য প্রয়োগ করতে চেষ্টা করতে পারি পাইথন

সুতরাং, লাইনগুলির একটি সেট নীচে দেখানো হয়েছে ম্যাপ করা হয়েছে (তারা ইতিমধ্যে ছাঁটা হয়েছে, বিটিডাব্লু)।
বহুভুজ উত্পন্ন করার জন্য অ্যালগরিদম / ধারণাগুলি (লাল হিসাবে দেখানো হয়েছে) ?

এখানে চিত্র বর্ণনা লিখুন


আউটার বর্গাকার সীমানাটি কি পরিচিত, বা এটিও ইনপুট লাইনগুলি থেকে পড়তে হবে?
দেবদত্ত টেংশে

উত্তর:


5

ঠিক আছে, আমরা এখানে একটি উত্তর রেখেছি যা আমাদের প্রশ্নের সম্পূর্ণ উত্তর নয় , অর্থাৎ প্রশ্নটি " উত্তর দেওয়ার জন্য উন্মুক্ত " থাকবে । এটি তবে প্রশ্নের সমস্যার সমাধান। আমরা যে কৌশলটি ব্যবহার করেছি তা এখানে:

প্রথমে ফলাফলগুলি দেখতে দিন :
এখানে চিত্র বর্ণনা লিখুন

সুতরাং leftবিল্ট বহুভুজগুলিতে প্রদত্ত রেখাগুলি এতে দেখানো হয়েছে middle। এগুলি প্রকৃত বহুভুজ যা দেখানো হয়েছে right;)

নীচে প্রদত্ত অ্যালগরিদমের জন্য আমরা পাইথনেShapely প্যাকেজ ব্যবহার করেছি ।

  • লাইনগুলি ==> MultiLineString {:: এম
  • একটি ছোট যোগ করুন buffer, বলুন eps{:: এমবি}
  • অঞ্চল ==> Polygon {:: পি} (অঞ্চলটি এখানে একটি বর্গক্ষেত্র)
  • P.difference(MB) {ফলে বহুভুজ}

মনে রাখবেন এটি কার্যকরভাবে শান্ত। তবে অনুপস্থিত পয়েন্টটি হ'ল লাইন থেকে বহুভুজ তৈরির জন্য অ্যালগরিদম কোনও মূল পদ্ধতি নয় । তবুও এটি আমাদের হাতে যে সমস্যাটি ছিল তার জন্য এটি পুরোপুরি কাজ করেছিল।


4

জেটিএস টপোলজি স্যুটে একটি পলিগোনাইজার শ্রেণি রয়েছে, যা এটি বেশ কিছু করে।

আপনি এখানে সোর্স কোডটি উপলভ্য দেখতে পারেন এবং এটিকে পাইথনে রূপান্তর করতে পারেন।


কোডের বিবরণে বলা হয়েছে যে এটি প্রশ্ন লেখকের দ্বারা প্রত্যাশিতভাবে কাজ করবে না: "প্রান্তগুলি অবশ্যই সঠিকভাবে নোড করা উচিত; এটি কেবল তাদের শেষ পয়েন্টগুলিতেই মিলিত হতে হবে Pol পলিগোনাইজার ভুলভাবে নোডড ইনপুটটিতে চলবে তবে অ-থেকে বহুভুজ গঠন করবে না -নোডেড প্রান্তগুলি "
পাবলো

1
লাইনগুলিকে যথাযথভাবে দ্বিখণ্ডিত করার জন্য জেটিএসের মধ্যে একটি অপারেশন রয়েছে। হয়তো ওপিও সেদিকে নজর দিতে পারে।
দেবদত্ত টেংশে

3

আপনি পাইথন শেপলি প্যাকেজটি দেখে নিতে পারেন, বিশেষত বহুভুক্ত ()


একটি দ্রুত নোট যে সুষম মধ্যে polygonize ( from shapely.ops import polygonize) ব্যবহার করে GEOS.Polygonize থেকে GEOS । সুতরাং এটি এমন লিঙ্ক যেখানে একটি লিঙ্কের লিঙ্ক রয়েছে ...: |
বিকাশকারী

সাথে আমাদের বিচারগুলি polygonizeমোটেও সফল হয়নি। তবে আমাদের মনে করিয়ে দেওয়ার জন্য ধন্যবাদ Shapelyযা একটি উত্তর হিসাবে পোস্ট হিসাবে আমরা একটি সমাধান (একটি কৌশল, আসলে) খুঁজে পেতে পারি।
বিকাশকারী

2

এখানে আমরা আরও একটি সমাধান খুঁজে পেতে পারি।

ব্যবহার করে DCELআমরা স্পর্শকারী লাইনগুলি থেকে ব্লক তৈরি করতে পারি।

জন্য পাইথন একটা প্যাকেজ {এখানে} । এটি কয়েকটি বাগ সহ একটি ছোট্ট বাস্তবায়ন। তবুও কিছু প্রচেষ্টা সহ এটি এই সমস্যার জন্য ব্যবহার করা যেতে পারে। নিম্নলিখিত ধাপগুলি নোট করুন:

একটি প্রাক-প্রক্রিয়াজাতকরণ পর্যায় যার সাথে লাইনগুলির মধ্যে সমস্ত ছেদ পাওয়া যায়। তারপরে ইন্টারঅ্যাকশন পয়েন্টগুলিতে সমস্ত লাইন সেগমেন্টে বিভক্ত হয়। ছেদকৃত পয়েন্টগুলির একটি তালিকা এবং সম্পর্কিত প্রান্তগুলির একটি তালিকা হ'ল DCEL- র জন্য প্রয়োজনীয়।


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