দুটি বেজিয়ার কার্ভ ছেদ করার জন্য নির্ভরযোগ্য পরীক্ষা


9

দুটি পরিকল্পনাকারী বেজিয়ার বক্ররেখা ছেদ করে কিনা নির্ভরযোগ্যভাবে কীভাবে তা আবিষ্কার করবেন? "নির্ভরযোগ্যভাবে" দ্বারা আমি বোঝাতে চাইছি পরীক্ষাগুলি কেবল "হ্যাঁ" এর উত্তর দেবে যখন বক্ররেখাগুলি ছেদ করে কেবল এবং "না" কেবল তখনই যখন তারা ছেদ না করে। ছেদটি কোন পরামিতিটিতে পাওয়া গেছে তা আমার জানা দরকার না। আমি বাস্তবায়নে ভাসমান-পয়েন্ট নম্বরগুলিও ব্যবহার করতে চাই।

আমি স্ট্যাকওভারফ্লোতে বেশ কয়েকটি উত্তর পেয়েছি যা পরীক্ষার জন্য কার্ভের বাউন্ডিং-বাক্সগুলি ব্যবহার করে: আমি এই জাতীয় পরীক্ষার পরে যা করি না কেন এমনকি বাঁকগুলি ছেদ না করলেও ছেদ প্রতিবেদন করতে পারে।

আমি এখন অবধি সবচেয়ে কাছের জিনিসটি পেয়েছি সেডারবার্গ এবং মায়ারদের " বাউন্ডিং ওয়েজ " তবে এটি "কেবলমাত্র" সর্বাধিক এক এবং দুই বা ততোধিক ছেদকেন্দ্রের মধ্যে পার্থক্য করে, যেখানে আমি জানতে চাই যে সেখানে সর্বাধিক-শূন্য রয়েছে কিনা? এবং এক বা একাধিক ছেদ


আমি নিশ্চিত নই যে এটি ওয়েটহর নির্ধারণ করছে বা 0-1 বা 2 বা তার বেশি বাছাইয়ের সম্ভাবনা রয়েছে তবে এটি খুব নগণ্য তবে সূত্রটি সত্যই পরীক্ষা না করে 0 বা 1 নিশ্চিত করার পক্ষে উদাসীনতা তৈরি করে না।
joojaa

রানটাইম প্রয়োজনীয়তা কি? একটি সমাধান যা বেশ নির্ভুল ফলাফল আনতে সক্ষম হবে তা হ'ল সংক্ষিপ্ত সোজা খণ্ডের একটি বৃহত সংখ্যার দ্বারা উভয় বক্ররেখা আনুমানিক এবং তারপরে জোড়াযুক্ত ফ্যাশনে ছেদ করা। তবে এতে অনেক সময় এবং স্মৃতি ব্যয় হয়।
ড্রাগনসিল

@ ড্রাগনসিল ওয়েল, আমি যে কোনও সমাধানের জন্য সত্যিই খুশি হব, তবে যেহেতু আপনি ও (১) কে বলেছেন ভাল লাগবে would তবে রেখাংশের সাথে কার্ভগুলি আনুমানিক করা বাউন্ডিং বক্সের ওভারল্যাপের পরীক্ষা হিসাবে একই সমস্যার দিকে নিয়ে যায় ...
একির হানা

আকর্ষণীয় সমস্যা। আমি মনে করি না একটি সহজ উত্তর আছে তবে আমি ভুল হতে চাই। আপনার কি সেডারবার্গ এবং মায়ার্স পেপারের জন্য কোনও লিঙ্ক আছে?
ড্যানিয়েল এম গেসেল

@ ড্যানিয়েল এমজেসেল হ্যাঁ, উপরের সম্পাদনাটি দেখুন।
ইকির হানা

উত্তর:


6

সমস্যাটি গঠনের বিকল্প উপায় হ'ল কার্ভের পয়েন্টগুলির মধ্যে দূরত্ব দেয় এমন একটি ফাংশন সংজ্ঞায়িত করা যা কার্ভের পরামিতিগুলির কার্যকারিতা হিসাবে। তারপরে এই ফাংশনটির সর্বনিম্ন সর্বনিম্ন সন্ধান করার চেষ্টা করুন। যদি বক্ররেখা ছেদ করে তবে সর্বনিম্ন শূন্য হবে; অন্যথায় সর্বনিম্ন কিছুটা ইতিবাচক দূরত্ব হবে।

স্পষ্ট করে বলার জন্য, দ্বারা সংজ্ঞায়িত 2D কার্ভগুলির একটি জোড়া দেওয়া হয়েছে , দূরত্ব-বর্গক্ষেত্র হিসাবে সংজ্ঞায়িত করুনc1,c2:[0,1]R2

f(u,v):[0,1]2R0|c2(v)c1(u)|2

ঘন রেখাচিত্র জন্য, ফাংশন তারপর দুই ভেরিয়েবল একটি ষষ্ঠ-ডিগ্রী বহুপদী হয়। এরপরে আপনি সংখ্যাসমূহের অপ্টিমাইজেশন কৌশলগুলি প্রয়োগ করতে পারেন যেমন সিমপ্লেক্স পদ্ধতি বা সংযোগী গ্রেডিয়েন্ট বংশোদ্ভূত । দুর্ভাগ্যক্রমে ফাংশনটিতে বেশ কয়েকটি স্থানীয় মিনিমা থাকতে পারে (এটি উত্তল নয়), সুতরাং অপ্টিমাইজেশন সহজ নয়। বহুবর্ষের জন্য আরও বিশেষায়িত অপ্টিমাইজেশন পদ্ধতি উপলব্ধ থাকতে পারে তবে এটি আমার পক্ষে দক্ষতার ক্ষেত্র নয়।f


যদি আমরা কিউবিক বেজিয়ারের বিষয়ে কথা বলি তবে এটি 6th ষ্ঠ ডিগ্রি বহির্ভুত কেন এবং তৃতীয় নয়? এবং যে দুটি পদ্ধতির সাথে আপনি লিঙ্ক করেছেন, তারা কি পুরো বিপরীতে কেবল এ সমাধানগুলি সন্ধান করার জন্য উপযুক্ত ? [0,1]2R2
ইকির হানা

1
@ এসিরহানা এটি ষষ্ঠ ডিগ্রি কারণ এটি স্কোয়ার দূরত্ব। (আপনি এটিটিকে স্কোয়ার-রুট করতে পারেন, তবে তারপরে এটি আর বহুপক্ষীয় হবে না এবং শূন্যগুলিতে সহজেই মসৃণ হবে)) নোট করুন যে প্যারামিটার স্পেস, স্প্লাইনগুলি যে জায়গাতে বাস করে না, সেগুলি নয়, এগুলি are শেষ পয়েন্ট সহ splines। যাই হোক না কেন, পদ্ধতিগুলি সূক্ষ্মভাবে কাজ করবে তবে তারা প্রাথমিক অনুমান থেকে কেবল "উতরাই" ভ্রমণ করবে এবং স্থানীয় সর্বনিম্ন সন্ধান করবে; পুরো প্যারামিটার অঞ্চলটি পরীক্ষা করতে এবং বিশ্বব্যাপী সর্বনিম্ন সন্ধান করতে আরও কিছু প্রয়োজন । প্যারামিটার জায়গার সীমাবদ্ধ করা সম্ভবত সেখানে সহায়ক। [0,1]R2
নাথান রিড

1
নাথান - সুন্দর গঠন! আমি মরিচা, তবে: আমি মনে করি আপনি প্রতিটি বেজিয়ার বক্ররেখাটিকে সর্বাধিক 5 টি ভাগে বিভক্ত করতে পারেন, যেখানে বা বক্ররেখা পরিবর্তন করে। , ক্রিয়াকলাপ হিসাবে দ্বিগুণ (ডেরাইভেটিভের শিকড়) দিক পরিবর্তন করে বক্ররেখাটিকে 3 ভাগে বিভক্ত করে, যার মধ্যে 2 টি আবার দিক পরিবর্তন করে ভাগ করা যেতে পারে । এখন আপনার কাছে সোজা অংশ নেই, তবে এমন বিভাগগুলি রয়েছে যেগুলি "খুব বেশি বাঁক না দেয়"। আমি মনে করি আপনি যদি 25 টি পয়েন্টে আপনার সন্ধান শুরু করেন, সেগমেন্ট জোড়গুলি দ্বারা নির্বাচিত, আপনি সর্বদা বিশ্বব্যাপী মিনিমা খুঁজে পেতে পারেন, তবে কীভাবে এটি প্রমাণ করতে হবে (বা অস্বীকার করতে হবে) আমি যথেষ্ট দেখতে পাচ্ছি না। xyxciy
ড্যানিয়েল এম গেসেল

@ নাথান: আমি এটি বিবেচনা করেছিলাম তবে টেক্সচার সংকোচনের বিন্যাসে মিনিমা খুঁজে পেতে কোড লেখার জন্য অনেক সময় ব্যয় করে এগুলি কিছুটা বিব্রতকর বলে মনে হয়েছিল।
সাইমন এফ

5

[অস্বীকৃতি: আমি মনে করি যে নিম্নলিখিতগুলি কাজ করা উচিত তবে এটি নিজে কোড করে নি]

হ্যাঁ / না উত্তর দেওয়ার একটি "তুচ্ছ" পদ্ধতি সম্পর্কে আমি ভাবতে পারি নি তবে নিম্নলিখিতটির প্রশ্নের ব্যবহারিক সমাধানের যুক্তিসঙ্গত পন্থা হতে পারে।

আসুন ধরে নিই যে আমাদের বক্ররেখাগুলি যথাক্রমে কন্ট্রোল পয়েন্ট { A0, A1..An } এবং { B0, .. বিএম with সহ A (গুলি) এবং বি (টি)

এটি আমার কাছে মনে হয়, 2D বেজিয়ারের একটি জুটি দেওয়া হয়েছে যার জন্য আমরা নির্ধারণ করতে চাই বা ছেদ করি না তা বিবেচনা করার জন্য ছয়টি মামলা রয়েছে:

  1. কেস যেখানে আমরা "তুচ্ছভাবে" নির্ধারণ করতে পারি সেগুলি ছেদ করে না

  2. যদি তারা সীমাবদ্ধ সংখ্যার বার ছেদ করে এবং আমরা "সহজেই" নির্ধারণ করতে পারি যে তারা অবশ্যই কমপক্ষে একবার ছেদ করে (তবে আমরা আসলে তাদের যত্ন নিতে পারি না যে এই ছেদগুলি কোথায় ঘটে)

  3. বেজিয়ারগুলির একটি হ'ল অবক্ষয়, অর্থাত্ একটি বিন্দু (যা যদি সমস্ত নিয়ন্ত্রণ পয়েন্ট অভিন্ন হয় তবে)। আমরা ধরে নিতে পারি যে আমরা ইতিমধ্যে কেসটি পরিচালনা করেছি যেখানে উভয়ই পয়েন্ট।

  4. এক বা একাধিক কার্ভ বন্ধ রয়েছে, যেমন। A0 == একটি। জীবনকে আরও সহজ করার জন্য, আমরা এই জাতীয় বক্ররেখাকে ভাগ করব এবং আবার শুরু করব।

  5. মোড়ের অসীম সংখ্যক পয়েন্ট রয়েছে কারণ প্রতিটি "প্যারেন্ট" বেজিয়ারের উপসেট এবং সেগুলি ওভারল্যাপ করে।

  6. আমরা উপরের মামলাগুলি সম্পর্কে নিশ্চিত নই এবং আরও তদন্তের প্রয়োজন

এই মুহুর্তের জন্য আমরা 3 এবং 4 এড়িয়ে যাব তবে পরে তাদের কাছে ফিরে আসব।

মামলা 1

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

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

মামলা 2

যদি কেস 1 পরীক্ষাটি ব্যর্থ হয় তবে আপনি কোনও ছেদকের "তুচ্ছ" অস্তিত্বের জন্য যাচাই করতে পারেন। এখন এটি করার আরও ভাল উপায় আছে তবে নিম্নলিখিতটি তুলনামূলকভাবে সস্তা আমার কাছে এসেছে:

শুধু বক্ররেখা বিবেচনা করুন:

"ফ্যাট লাইন" বেজিয়ারের সীমানা

আমরা প্রতিনিয়ত বক্ররেখা শুরু জানি এ বন্ধ এবং উত্তল জাহাজের কাঠাম নীচে থাকবে। সরলতার জন্য আসুন আমরা লাইন বিভাগের দিক এবং উভয় পাশের গণনা করতে পারি (অর্থাত্ control উল্লম্ব বিরুদ্ধে অবশিষ্ট নিয়ন্ত্রণ পয়েন্টগুলির বিন্দু পণ্য গ্রহণ করি )।A0AnA0An¯A0An¯

যদি আমরা বাঁক বি দিয়ে একই কাজ করি তবে আমরা নিম্নলিখিত (সম্ভাব্য) কেসটি পাই: এখানে চিত্র বর্ণনা লিখুন

আমরা যদি এটি এবং বি বাইরে বিপরীত সীমা আছে এবং যে এবং A -এর সীমার outsides হয়, তারপর, বজ়িের্শ এর ধারাবাহিকতা দ্বারা, সেখানে অন্তত একটি ছেদ হতে হবে।A0AnB0Bm

মামলা 6

যদি আমরা উপরের কোনওটি তাত্ক্ষণিকর প্রদর্শন করতে না পারি, তবে বেজিয়ারদের প্রত্যেককে দুটি "অর্ধে", অর্থাৎ বিভক্ত করুন । এটি তুলনামূলকভাবে সোজাসাপ্টা (পাঠকের কাছে অনুশীলন হিসাবে ছেড়ে দেওয়া) তবে চতুর্ভুজীয় বেজিয়ার্সের জন্য এটি বিশেষ ক্ষুদ্র :A1,A2,B1,B2

চারটি সংমিশ্রণগুলি পুনরাবৃত্তভাবে তুলনা করুন: । স্পষ্টত যদি সমস্ত পাস কেস 1 হয় তবে কোনও ছেদ নেই। যদি কোনও 1 ব্যর্থ হয়, তবে সেই হ্রাসিত উপসেটটি দিয়ে বাকি পরীক্ষা চালিয়ে যান।(A1,B1),(A2,B1)...(A2,B2)

মামলা 3 এবং 5

এখানেই এটি খানিকটা ক্লান্তিকর হয়ে ওঠে।

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

কেস 5 অপেক্ষাকৃত অসম্ভব বলে মনে হচ্ছে, সুতরাং কেবলমাত্র কয়েকটি সংবর্তনের পরে যদি কোনও চূড়ান্ত প্রমাণ না পাওয়া যায় তবে কার্ভ বি এর বিপরীতে এ এর ​​প্রতিটি শেষ বিন্দু চেষ্টা করতে পারে। এটি কেবল ছেদ করার প্রমাণ দেবে - না ছেদ করার প্রমাণ নয়।


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

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

হ্যাঁ তবে সবচেয়ে খারাপ পরিস্থিতিটি হ'ল অন্যান্য বেজিয়ার শুরু হয় starts
joojaa

আপনার অর্থ, উদাহরণস্বরূপ, আন == বি 0 । আপনি এটি একটি ছেদ হিসাবে সংজ্ঞায়িত বা না?
সাইমন এফ

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