এটা সম্ভব.
আপনি বহুভুজ বিবেচনা করুন এবং "অবতল" শীর্ষকে বিবেচনা করুন। তারা ঠিক করে দেয় কোন লাইনগুলি বহুভুজকে দ্বিগুণের বেশি ছেদ করবে। নিম্নলিখিত চিত্রটিতে আমি নিষিদ্ধ কোণগুলির বিরতি (লাল) চিহ্নিত করেছি। যদি আপনি এগুলি একসাথে রাখেন এবং লাল ডিস্কে একটি গর্ত দেখতে পান তবে অনুমোদিত কোণগুলি রয়েছে (নীল রঙে)। বহুভুজটি তখন opeাল -1 / \ ট্যান any (সবুজ রঙের) কোনও লাইনের সাথে সম্মিলিতভাবে একঘেয়ে হয়ে থাকে । - 1 / ট্যান δδ−1/tanδ
এখন অ্যালগরিদম।
যাক বহুভুজের তম হতে । প্রথমে প্রান্তের পরম কোণ এবং এর অভ্যন্তরের কোণ । সমস্ত ভাল প্রোগ্রামিং ভাষায় উপলব্ধ ফাংশনটি ব্যবহার করুন ।i α i ( v i v i + 1 ) β i v ivi=(xi,yi)iαi(vivi+1)βiviatan2
β আমি = α আমি + + 1 - α আমি + + { 0 যদি α আমি + + 1 ≥ α আমি 2 π যদি α আমি + + 1 < α আমি
αi=atan2(yi+1−yi,xi+1−xi)
βi=αi+1−αi+{02π if αi+1≥αi if αi+1<αi
উল্লম্ব দিকের ক্রম না থাকলে উল্লম্ব ক্রমের বিপরীত করুন, যদি নেতিবাচক না হয়। ( : ঘড়ির কাঁটার বিপরীতে, : ঘড়ির কাঁটা)। s = - 2 π s = 2 π πs=∑iβi−nπs=−2πs=2π
নিম্নলিখিত শুধুমাত্র জন্য ভেতরের কোণ চেয়ে বড় যে, । আমার ছবিতে লালগুলি। লক্ষ্য একটি কোণের খুঁজে পেতে যে নেই মডিউল । যেমন যেমন যে সব জন্য যেমন যে :π β জ > π δ ∪ জ [ α জে + ১ , α জ ] π জে β জ > πmπβj>πδ∪j[αj+1,αj]πjβj>π
( α জে < δ < α জে + 1 ) যদি α জে < α জে + 1
(δ<αj+1∨αj<δ) if αj+1<αj
(αj<δ<αj+1) if αj<αj+1
যেখানে এখান থেকে সাধারণ মান মধ্যে । একটি বিরতি যে ছাড়াইয়া যায় দ্বিতীয় ক্ষেত্রে মিলা (তাই এই সময় "ভিতরে" হতে হবে)।α জ [0, π ) π δ δαjαj[0,π)πδ
বোধহয় এই কিন্তু এক করতে একটি দ্রুত উপায় মান বাছাই করতে হয় মধ্যে এবং জন্য পরীক্ষা ।O(n2)αj mod πγ1,…γmδ∈{γ12,γ1+γ22,…,γm−1+γm2,γm+π2}
আপনি কিছু খুঁজে যদি তারপর বিদ্যমান এবং ঢাল হল । অন্যথায় একঘেয়ে নয়।δL−1/tanδP