যখন আমার ত্বকের শেডারের জন্য জাল বক্রতার একটি অনুমানের প্রয়োজন হয়েছিল, আমি যে অ্যালগরিদমটি স্থির করেছিলাম তা হ'ল:
প্রথমত, আমি জালের প্রতিটি প্রান্তের জন্য একটি স্কেলারের বক্রতা গণনা করেছি। প্রান্তে যদি p1,p2 এবং নরমাল n1,n2 তবে আমি এর বক্রতাটি অনুমান করেছি:
curvature=(n2−n1)⋅(p2−p1)|p2−p1|2
এটি প্রান্তের দৈর্ঘ্যের একটি ভগ্নাংশ হিসাবে প্রান্তটি দিয়ে অনুমান করা স্বাভাবিকের মধ্যে পার্থক্য গণনা করে। (আমি কীভাবে এই সূত্রটি নিয়ে এসেছি তার জন্য নীচে দেখুন))
তারপরে, প্রতিটি প্রান্তের জন্য আমি এটিকে স্পর্শ করে সমস্ত প্রান্তের কার্ভচারের দিকে চেয়েছিলাম। আমার ক্ষেত্রে, আমি কেবল "গড় বক্রতা" এর একটি স্কেলারের প্রাক্কলন চেয়েছিলাম, তাই আমি প্রতিটি প্রান্তে সমস্ত প্রান্তের কার্ভারের পরম মানের জ্যামিতিক গড় গ্রহণ করে শেষ করেছি। আপনার ক্ষেত্রে, আপনি ন্যূনতম এবং সর্বাধিক বক্ররেখাগুলি খুঁজে পেতে পারেন এবং সেগুলিগুলি প্রধান বক্ররেখার দিকনির্দেশ হিসাবে নিতে পারেন (সম্ভবত এগুলিটি শীর্ষবিন্দুটির সাথে অরথনরমাইজিং)। এটি কিছুটা রুক্ষ, তবে আপনি যা করতে চান এটির জন্য এটি আপনাকে যথেষ্ট পরিমাণে যথেষ্ট ফলাফল দিতে পারে।
এই সূত্রটির অনুপ্রেরণাটি বৃত্তে প্রয়োগ করার সময় 2D তে কী ঘটে তা দেখছে:
ধরুন আপনি ব্যাসার্ধ্যের একটি বৃত্ত আছে (তাই তার বক্রতা হয় 1 / R ), এবং আপনি এই বৃত্তে দুটি পয়েন্ট আছে, তাদের লম্ব সঙ্গে এন 1 , এন 2 । বৃত্তের কেন্দ্রের তুলনায় পয়েন্টগুলির অবস্থানগুলি p 1 = r n 1 এবং p 2 = r n 2 হতে চলেছে, এমন সংখ্যার কারণে যে কোনও বৃত্ত বা গোলকের সাধারণগুলি তার কেন্দ্র থেকে সর্বদা সরাসরি প্রদর্শিত হয়।r1/rn1,n2p1=rn1p2=rn2
সুতরাং আপনি হিসাবে ব্যাসার্ধ পুনরুদ্ধার করতে পারেন পি 1 | / | এন 1 | বা | পি 2 | / | এন 2 | । তবে সাধারণভাবে, শীর্ষস্থানীয় অবস্থানগুলি বৃত্তের কেন্দ্রের সাথে তুলনামূলকভাবে নয়। আমরা দুটি: পি 2 - পি 1 বিয়োগ করে এটিকে ঘিরে কাজ করতে পারি
r=|p1|/|n1||p2|/|n2|
p2−p1rcurvature=1r=rn2−rn1=r(n2−n1)=|p2−p1||n2−n1|=|n2−n1||p2−p1|
ফলাফলটি কেবলমাত্র চেনাশোনা এবং গোলকের জন্য। যাইহোক, আমরা এটিকে আরও কিছুটা "সহনশীল" করার জন্য এটি প্রসারিত করতে পারি এবং এটি নির্বিচারে 3 ডি মেসে ব্যবহার করতে পারি এবং এটি যুক্তিসঙ্গতভাবে ভালভাবে কাজ করে বলে মনে হচ্ছে। আমরা প্রথমে ভেক্টর প্রান্তের দিকের দিকে প্রজেক্টের মাধ্যমে সূত্রটিকে আরও "সহনশীল" করতে পারি , পি 2 - পি 1 । এটি এই দুটি ভেক্টরকে ঠিক সমান্তরাল না হওয়ার অনুমতি দেয় (যেমন তারা বৃত্তের ক্ষেত্রে রয়েছে); আমরা কেবল এমন কোনও উপাদান তৈরি করব যা সমান্তরাল নয়। আমরা সাধারণ প্রান্ত ভেক্টর: বক্রতা দিয়ে ডট করে এটি করতে পারি
n2−n1p2−p1
curvature=(n2−n1)⋅normalize(p2−p1)|p2−p1|=(n2−n1)⋅(p2−p1)/|p2−p1||p2−p1|=(n2−n1)⋅(p2−p1)|p2−p1|2
এছাড়াও, এই সূত্রটি এই উত্তরের শীর্ষে উপস্থিত হয়েছিল। যাইহোক, স্বাক্ষরযুক্ত প্রজেকশন (বিন্দু পণ্য) ব্যবহার করার একটি দুর্দান্ত পার্শ্ব সুবিধা হল সূত্রটি তারপরে একটি স্বাক্ষরযুক্ত বক্রতা দেয়: উত্তলটির পক্ষে ধনাত্মক এবং অবতল পৃষ্ঠের জন্য নেতিবাচক।
আরেকটি পদ্ধতির সাহায্যে আমি কল্পনা করতে পারি, তবে চেষ্টা করেও দেখিনি, প্রতিটি পৃষ্ঠার পৃষ্ঠের দ্বিতীয় মৌলিক রূপটি অনুমান করা । এটি ভার্টেক্সে একটি স্পর্শক ভিত্তি স্থাপন করে, তারপরে সমস্ত প্রতিবেশী কোণটি সেই স্পর্শকৃত স্থানটিতে রূপান্তর করে এবং সেরা-ফিট 2 এফএফ ম্যাট্রিক্স সন্ধানের জন্য সর্বনিম্ন-স্কোয়ার ব্যবহার করে এটি করা যেতে পারে। তারপরে মূল বক্ররেখার দিকনির্দেশগুলি হবে সেই ম্যাট্রিক্সের আইজেনভেেক্টর। এটি আকর্ষণীয় বলে মনে হচ্ছে কারণ এটি আপনাকে কোনও দিকনির্দেশিত স্পষ্টভাবে নির্দেশ না করে পার্শ্ববর্তী শীর্ষগুলি দ্বারা বক্ররেখার দিকনির্দেশকে "বোঝানো" খুঁজে পেতে পারে, তবে অন্যদিকে আরও অনেক কোড, আরও গণনা এবং সম্ভবত কম সংখ্যার শক্তিশালী।
এই দৃষ্টিভঙ্গিটি গ্রহণ করে এমন একটি কাগজ হ'ল রুসিনকিউইকজ, "ত্রিভুজ মেশেসের অনুমানের কারভ্যাচার এবং তাদের ডেরিভেটিভস" । এটি প্রতি ত্রিভুজ অনুসারে সেরা-ফিট 2 এফএফ ম্যাট্রিক্স অনুমান করে কাজ করে, তারপরে প্রতি-ভার্টেক্সের ম্যাট্রিকগুলি গড়ে (কতটা মসৃণ নরমাল গণনা করা হয় তার সমান)।