উত্তল জালের একটি সেটে অবতল জাল ডেকোপস করা


10

আমি ২ টি কারণে উত্তল জালের একটি সেটে অবতল জালকে পচন করতে সক্ষম হতে চাই:

  1. স্বচ্ছ রেন্ডারিং
  2. পদার্থবিজ্ঞানের আকার

এমন কি একটি অ্যালগরিদম আছে যা ইনপুট হিসাবে ত্রিভুজগুলির একটি সেট (অবতল) নেয় এবং বহু ত্রিভুজগুলির সেট করে (উত্তল)? আমি এটির মূল জালের অংশগুলির মধ্যে গর্ত পূরণ না করা চাই।

আমি ইতিমধ্যে একটি ছোট ধারণা পেয়েছি: সমস্ত অবতল প্রান্তগুলি সন্ধান করুন এবং প্রান্তের লুপগুলি বরাবর বিভক্ত করুন। আমি কি সঠিক পথে রয়েছি? আমি কীভাবে এটি বাস্তবায়ন করতে পারি?


"অবতল / উত্তল" জাল কি? যদি জাল মানে ত্রিভুজ নেটওয়ার্ক, তবে এটি কেবল ত্রিভুজগুলির একটি সেট, যা উত্তল। অথবা আপনি 3 ডি অবজেক্টের আয়তন সম্পর্কে কথা বলছেন? পলিহেড্রন হতে পারে?
ইভান ককির

@ ইভানকুকির মেশেস বা পলিহেড্রাও অবতল / উত্তল হতে পারে এবং সংজ্ঞাটিও প্রায় একই রকম। উদাহরণস্বরূপ, কোনও সরল রেখা পলিহেড্রনের অভ্যন্তরটিকে একাধিকবার ছেদ করবে না।
কংগসবঙ্গাস

উত্তর:


11

আমি বলব যে আপনি সঠিক পথে আছেন, তবে একটি অনুকূল এবং / বা দক্ষ অ্যালগরিদম নিয়ে আসা আরও একটি বিষয়: এটি একটি কঠিন সমস্যা। তবে, আপনার আগ্রহটি যদি একাডেমিক না হয় তবে একটি পর্যাপ্ত পর্যাপ্ত সমাধানই যথেষ্ট।

প্রথমত, আপনি যদি নিজের সমাধান নিয়ে আসতে আগ্রহী না হন, সিজিএলে ইতিমধ্যে উত্তল পলিহেডর পচন জন্য একটি অ্যালগরিদম রয়েছে: http://doc.cgal.org/latest/Convex_decomposition_3/index.html

এখন পদ্ধতির জন্য; 3 ডি-তে অনেক সমস্যার মতো, এটি 2D সমস্যাটি বোঝা সহজ যা সহজে বোঝা যায় helpful 2 ডি এর জন্য, কাজটি হ'ল রেফ্লেক্স শীর্ষকে চিহ্নিত করা এবং বহুভুজটিকে দুটি ভাগে বিভক্ত করে ref প্রতিবিম্বটি শীর্ষে থেকে একটি নতুন প্রান্ত (এবং সম্ভবত নতুন শীর্ষে) তৈরি করা এবং অবিরত অবধি অবধি অবিরত অবিরত হওয়া অব্যাহত রাখুন (এবং সুতরাং সমস্ত-উত্তল বহুভুজগুলি )।

প্রতিবিম্ব কোণ

জে। মার্ক কেয়েল দ্বারা বহুভোজী পচনের নিম্নলিখিত অ্যালগরিদম রয়েছে (অপরিশোধিত আকারে):

diags = decomp(poly)
    min, tmp : EdgeList
    ndiags : Integer
    for each reflex vertex i
        for every other vertex j
            if i can see j
                left = the polygon given by vertices i to j
                right = the polygon given by vertices j to i
                tmp = decomp(left) + decomp(right)
                if(tmp.size < ndiags)
                    min = tmp
                    ndiags = tmp.size
                    min += the diagonal i to j
    return min

মূলত এটি নিখুঁতভাবে সমস্ত সম্ভাব্য পার্টিশন তুলনা করে, এবং উত্পাদিত সর্বনিম্ন ত্রিভুজগুলির সাথে একটিটি প্রদান করে। এই অর্থে এটি কিছুটা নিষ্ঠুর-শক্তি এবং সর্বোত্তমও।

আপনি যদি " নিকারের লুকিং" পচনগুলি চান তবে এটি লম্বা আকারের চেয়ে আরও কমপ্যাক্ট আকার তৈরি করে, আপনি মার্ক বেয়াজিট প্রযোজনাটিকেও বিবেচনা করতে পারেন , এটি লোভী (অতএব আরও দ্রুত) এবং সুন্দর দেখায় তবে কয়েকটি ত্রুটি রয়েছে। এটি মূলত এর বিপরীতে সেরাটির সাথে সাধারণত অন্য একটি রিফ্লেক্স শীর্ষকে সংযোগের চেষ্টা করে কাজ করে:

বায়জিট নতুন ভার্টেক্স বেয়াজিট অন্য একটি রেফ্লেক্স ভার্টেক্সে সংযুক্ত

একটি ত্রুটি এটি হ'ল এটি স্টেইনার পয়েন্টগুলি তৈরি করে "আরও ভাল" পচনগুলি উপেক্ষা করে (পয়েন্টগুলি যেগুলি বিদ্যমান প্রান্তে বিদ্যমান নয়):

দুটি স্টিনার পয়েন্ট ব্যবহার করে ক্লোভার পঁচন

3 ডি তে সমস্যাটি একই রকম হতে পারে; রিফ্লেক্স শীর্ষে পরিবর্তে, আপনি "খাঁজ প্রান্ত" সনাক্ত করতে পারেন। একটি নিষ্পাপ বাস্তবায়ন হ'ল খাঁজ প্রান্তগুলি চিহ্নিত করা, এবং সমস্ত পলিহেডার উত্তল না হওয়া পর্যন্ত বারবার পলিহেড্রোনটিতে বিমানের কাটগুলি সম্পাদন করা। পরীক্ষা করে দেখুন বার্নার্ড Chazelle দ্বারা: "এবং একটি নিম্নতর বাউন্ড সবচেয়ে-ক্ষেত্রে সর্বাপেক্ষা কাম্য অ্যালগরিদম Polyhedra এর উত্তল পার্টিশন" আরো বিস্তারিত জানার জন্য।

খাঁজ সঙ্গে পলিহেডন

নোট করুন যে এই পদ্ধতির ফলে নিকৃষ্টতম উপ-পলিহেডারের সংখ্যক সংখ্যা তৈরি হতে পারে। এটি কারণ আপনার এই জাতীয় হ্রাস পেতে পারে:

অনেক খালি পলিহেডন

তবে যদি আপনার কাছে একটি তুচ্ছ জাল থাকে (মনে হয় অবিচ্ছিন্ন পৃষ্ঠ), আপনি যাইহোক খারাপ ফলাফল পাবেন। এটি খুব সম্ভবত আপনি জটিল সরীকরণের জন্য যদি কখনও ব্যবহার করতে চান তবে আপনি আগেই প্রচুর সরলীকরণ করতে চাইবেন।


6

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

হুবহু উত্তল পচন বনাম আনুমানিক উত্তল পচন

নিম্নলিখিত আনুমানিক উত্তল পচন গ্রন্থাগারগুলি দেখুন: https://code.google.com/p/v-hacd/ http://sourceforge.net/projects/hacd/


0

এখানে কিছু কোড যা আপনাকে সহায়তা করতে পারে। এটি জাভাতে রয়েছে তাই আপনাকে এটি সি ++ এ রূপান্তর করতে হবে।

এখানে আরও একটি নিবন্ধ যা আপনাকে সহায়তা করতে পারে


1
হাই মাস্কড বিদ্রোহী, লিঙ্ক-কেবল উত্তরগুলি এখানে নিরুৎসাহিত করা হয়েছে। যদি ইউআরএল কখনও পরিবর্তিত হয় বা সংস্থানটি অনুপলব্ধ হয়ে যায় তবে এটি এমন উত্তরগুলি ছেড়ে দিতে পারে যা ভবিষ্যতে ব্যবহারকারীদের জন্য সমাধানের সম্পূর্ণ ফাঁকা লিঙ্কটিতে সম্পূর্ণ নির্ভর করে। ক্রেডিট এবং আরও পড়ার জন্য লিঙ্ক সরবরাহ করা দুর্দান্ত, যতক্ষণ না আপনার উত্তর এখনও নিজেরাই দাঁড়িয়ে থাকতে পারে এবং পাঠক আরও গভীর ক্লিকের আগেই সমস্যা সমাধানের জন্য গাইড সরবরাহ করে। আপনি যে সমাধানটির সাথে কাজ করছেন তার কমপক্ষে একটি বিস্তৃত রূপরেখা অন্তর্ভুক্ত করার জন্য দয়া করে এই উত্তরটি সম্পাদনা করার বিষয়টি বিবেচনা করুন।
ডিএমগ্রিগরি

@ ডিএমজি গ্রেগরি দয়া করে উত্তরটি মুছুন আমি নিজেই পারি না।

উত্তর মুছে ফেলার প্রয়োজনে অগত্যা নয়। আরও কিছু তথ্য অন্তর্ভুক্ত করার জন্য এটি সম্পাদনা করা এটিকে দুর্দান্ত উত্তর দিতে পারে।
ডিএমগ্রিগরি

@ ডিএমজি গ্রেগরি তবে তারপরে এটি এই পোস্টে অন্য একটি উত্তরের সদৃশ হবে। আমি কেবল অন্য উত্তরটি সম্পাদনা করব এবং আমার তথ্য সেখানে রাখব।

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