ওভারল্যাপিং চেনাশোনাগুলির সম্মিলিত অঞ্চল


107

আমি সম্প্রতি এমন একটি সমস্যার মুখোমুখি হয়েছি যেখানে আমার চারটি বৃত্ত (মিডপয়েন্টস এবং ব্যাসার্ধ) ছিল এবং এই বৃত্তগুলির ইউনিয়নের ক্ষেত্রফল গণনা করতে হয়েছিল।

উদাহরণ চিত্র:

দুটি চেনাশোনা জন্য এটি বেশ সহজ,

আমি কেবলমাত্র প্রতিটি বৃত্তের ক্ষেত্রের ভগ্নাংশটি যা ত্রিভুজগুলির মধ্যে নেই তা গণনা করতে পারি এবং তারপরে ত্রিভুজগুলির ক্ষেত্রফল গণনা করতে পারি।

তবে যখন আরও দুটি চেনাশোনা রয়েছে তখন আমি কি চতুর অ্যালগরিদমটি ব্যবহার করতে পারি?


15
এটি একটি সত্যিই আকর্ষণীয় সমস্যা, আমার মনে আছে এটি হাই স্কুল জ্যামিতি ক্লাসে দেখেছি, তবে এর সমাধান কখনও পাইনি। যদি আপনি এখানে কোনও উত্তর খুঁজে না পান, তবে এটি mathoverflow.net এ পোস্ট করার চেষ্টা করুন এবং গণিতবিদদের এটিতে একটি ফাটল দিন: পি
চার্লস মা

25
কখনও কখনও বাস্তব প্রোগ্রামারদের বাস্তব গণিত
ফা প্রয়োজন।

1
এই প্রশ্নের উত্তরের কাজটি সম্পর্কে কীভাবে - "আমাদের এই 4 টি স্থানে বিক্রয় প্রতিনিধি রয়েছে, যার প্রত্যেকে এই 4 টি রেডিও দিয়ে একটি অঞ্চল পরিবেশন করে? আমরা কতটা দেশকে আচ্ছাদন করব?" আপনার যদি বিক্রয় প্রতিনিধিগুলির পরিবর্তিত ডাটাবেস থাকে তবে এটি একটি প্রোগ্রামিং প্রশ্নে পরিণত হয়!
ক্রিস রবার্টস

5
আসলে, প্রকৃত প্রোগ্রামাররা এটি ভাবতে পছন্দ করেন।
এমএকে

2
@ জভোলকভ: সার্কিট বোর্ডগুলি এমন একটি ভাষার সাথে বর্ণিত হয় যা স্কোয়ারগুলি এবং চেনাশোনাগুলিকে প্লপ করে এবং allyচ্ছিকভাবে সেগুলি টেনে নিয়ে যায়। "তামার অঞ্চল গণনা করুন"। (এটি ইচ্ছুক বার গণনা করার প্রয়োজন হতে পারে,
স্কেভেঞ্জিং

উত্তর:


97

বাইরের ঘেরের সমস্ত বৃত্ত ছেদগুলি (যেমন নীচের চিত্রের উপর B, D, F, H) সন্ধান করুন। বহুভুজ গঠনের জন্য তাদেরকে সংশ্লিষ্ট বৃত্তের কেন্দ্রগুলির সাথে একত্রে সংযুক্ত করুন। বৃত্তগুলির ইউনিয়নের ক্ষেত্রফল হ'ল বহুভুজের ক্ষেত্রফল + ধারাবাহিক ছেদ বিন্দু এবং তাদের মধ্যবর্তী বৃত্ত কেন্দ্রের দ্বারা সংজ্ঞায়িত বৃত্তের টুকরাগুলির ক্ষেত্র। আপনার কোনও গর্তের জন্য অ্যাকাউন্টও করতে হবে।

বৃত্ত ওভারল্যাপ


17
কেন্দ্রে একটি গর্ত থাকে তখন কী ঘটে?
জন গিয়েজেন

3
মোটটি থেকে গর্তের জন্য আপনাকে কেন্দ্রের সাথে সংযুক্ত বহুভুজকে বিয়োগ করতে হবে এবং সেই বহুভুজের জন্য বৃত্তের টুকরাগুলি মোটে যোগ করতে হবে।
এন্টস আছমা

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

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

4
হ্যাঁ, তবে গর্তগুলির সীমানাটিও (ছোট) আরাক্স। আমি এখনও মনে করি এটি ভাল কাজ করার জন্য অনেক কোড দরকার।
ফা

32

আমি নিশ্চিত যে এখানে একটি চতুর অ্যালগরিদম আছে, তবে এটি খোঁজার জন্য সংরক্ষণ করার জন্য একটি বোবা এখানে রয়েছে;

  • চেনাশোনাগুলির চারপাশে একটি আবদ্ধ বাক্স রাখুন;
  • সীমানা বাক্সের মধ্যে এলোমেলো পয়েন্ট উত্পন্ন;
  • এলোমেলো পয়েন্টটি চেনাশোনাগুলির মধ্যে একটির মধ্যে রয়েছে কিনা তা নির্ধারণ করুন;
  • কিছু সাধারণ সংযোজন এবং বিভাগ দ্বারা অনুপাত করুন (অনুপাত_পুস্তক_পয়েন্টগুলি_দিকের ক্ষেত্রফল = ক্ষেত্রের_বাউন্ডিং_বক্স)।

নিশ্চিত যে এটি বোবা, কিন্তু:

  • আপনি যতটা সঠিক উত্তর পেতে চান ঠিক তেমন উত্তর পেতে পারেন;
  • এটি এমন কোনও আকারের জন্য কাজ করবে যার জন্য আপনি অভ্যন্তরের / বাইরের পার্থক্য গণনা করতে পারেন;
  • এটি সুন্দরভাবে সমান্তরাল হবে যাতে আপনি আপনার সমস্ত কর ব্যবহার করতে পারেন।

2
এটি কার্যকর হবে, তবে মন্টে-কার্লো পদ্ধতিগুলির মতো এটি কেবলমাত্র ইউনিফর্ম নমুনার উপর ভিত্তি করে, সর্বোত্তম রূপান্তর হার হয় না।
শ্রীভাতসারআর

2
দুঃখিত, তবে আমি আপনার চেষ্টার প্রশংসা করি এবং আপনার সমাধানটি "ব্যবহারিকভাবে ব্যবহারযোগ্য" বলে মনে করি, তবে আমি আপনার দৃষ্টিভঙ্গিটিকে খুব ভুল বলে মনে করি। এটি যে সমস্যা হতে পারে তার চেয়ে বেশি এবং গাণিতিক শক্তি প্রয়োগ করে গণিতের মাধ্যমে সমাধান করা উচিত। এ জাতীয় সমস্যার অপচয় এবং শক্তি নষ্ট করা অপচয় এবং দৃষ্টিনন্দন।
মাফু

5
আপনি ঠিক বলেছেন, আমি নিজের জন্য লজ্জা পেয়েছি, তবে আমার কাছে একটি ক্লাস্টার পেয়েছে 12,000 কোর, আমি লাবণ্য অর্জন করতে পারব। এবং আমি যে অনেক প্রসেসরের মার্জিত গাণিতিক সমাধান স্কেল করতে পারি তা বুঝতে পারি না।
হাই পারফরম্যান্স মার্ক

8
মন্টি-কার্লো (বা কোনও এলোমেলোভাবে) পদ্ধতির সাথে অন্তর্নিহিত কোনও ভুল নেই, তবে শর্ত থাকে যে এটি প্রয়োজনীয় ডিগ্রিটি দেয় এবং যুক্তিযুক্ত সময়ে এটি করে।
এমএকে

@ মাফুট্র্যাক্ট, আপনি অবশ্যই ঠিক বলেছেন। তবে গণিতে সামান্য ভুল করা সহজ। এই সমাধানটি সঠিকতা পরীক্ষা করার একটি সহজ উপায় সরবরাহ করে।
রিচার্ড

18

আন্টস আসমার উত্তরটি প্রাথমিক ধারণাটি দিয়েছে, তবে আমি এটিকে আরও কিছুটা কংক্রিট করতে চেয়েছিলাম। নীচের পাঁচটি চেনাশোনা এবং সেগুলি কীভাবে পচে গেছে তা একবার দেখুন।

উদাহরণ

  • নীল বিন্দুগুলি বৃত্ত কেন্দ্র।
  • লাল বিন্দুগুলি বৃত্তের সীমানা ছেদ করে।
  • সাদা অভ্যন্তরযুক্ত লাল বিন্দুগুলি বৃত্তের সীমানা ছেদগুলি যা অন্য কোনও চেনাশোনাতে অন্তর্ভুক্ত নয়

এই 3 ধরণের বিন্দু সনাক্তকরণ সহজ। এখন একটি গ্রাফ ডেটা কাঠামো তৈরি করুন যেখানে নোডগুলি নীল বিন্দু এবং সাদা অভ্যন্তর সহ লাল বিন্দু। প্রতিটি বৃত্তের জন্য, তার সীমানায় বৃত্ত মাঝারি (নীল বিন্দু) এবং এর প্রতিটি ছেদ (সাদা অভ্যন্তরযুক্ত লাল বিন্দু) এর মাঝে একটি কিনারা রাখুন।

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


আমি মনে করি যে আমি লাল / সাদা বিন্দুগুলির একটি সেট মোটামুটি সহজেই গণনা করতে পারি তবে আমার গ্রাফ তত্ত্বটি খুব দুর্দান্ত নয়: অ্যালগোরিদমিকভাবে, আপনি কোনও গণিত অঞ্চলে নোড + প্রান্তের তালিকা থেকে কীভাবে পাবেন?
ব্যবহারকারী 999305

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

16

পূর্ববর্তীটির থেকে পৃথক সমাধানের জন্য আপনি চতুর্ভুজটি ব্যবহার করে একটি স্বেচ্ছাচারিত নির্ভুলতার সাথে একটি অনুমান তৈরি করতে পারেন।

এটি কোনও আকার আকৃতির ইউনিয়নের জন্যও কাজ করে যদি আপনি বলতে পারেন যে কোনও বর্গক্ষেত্রটি ভিতরে বা বাইরে রয়েছে বা আকারটিকে ছেদ করে কিনা।

প্রতিটি ঘরে একটি রাজ্য থাকে: খালি, পূর্ণ, আংশিক

অ্যালগরিদম কম রেজোলিউশন দিয়ে শুরু করে চতুষ্কোণের বৃত্তগুলিকে "অঙ্কন" করে (উদাহরণস্বরূপ 4 টি ঘর খালি হিসাবে চিহ্নিত করা হয়)। প্রতিটি ঘর হয়:

  • কমপক্ষে একটি বৃত্তের ভিতরে, তারপরে ঘরটিকে পুরো হিসাবে চিহ্নিত করুন,
  • সমস্ত চেনাশোনা বাইরে, ঘরটি খালি হিসাবে চিহ্নিত করুন,
  • অন্যথায় কক্ষটি আংশিক হিসাবে চিহ্নিত করুন।

এটি সম্পন্ন হয়ে গেলে, আপনি অঞ্চলটির একটি অনুমান গণনা করতে পারেন: পূর্ণ কোষগুলি নীচে বাউন্ড দেয়, খালি কোষগুলি উচ্চতর বাউন্ড দেয়, আংশিক কোষ সর্বাধিক অঞ্চল ত্রুটি দেয়।

যদি ত্রুটিটি আপনার পক্ষে খুব বড় হয় তবে আপনি সঠিক স্পষ্টতা না পাওয়া পর্যন্ত আংশিক কোষগুলিকে পরিমার্জন করবেন।

আমি মনে করি জ্যামিতিক পদ্ধতির তুলনায় এটি প্রয়োগ করা আরও সহজ হবে যার জন্য প্রচুর বিশেষ ক্ষেত্রে পরিচালিত হতে পারে।


3
আমার অনুমান যে এটি মন্টি কার্লো এর ভিতরে / বাইরের পয়েন্ট অ্যালগরিদমের চেয়ে আরও দ্রুত রূপান্তরিত করবে।
ফ্রাঙ্ক ক্রুয়েজার

এটি প্রয়োগ করা অনেক সহজ বলে মনে হচ্ছে না। অবশ্যই সেরা নিষ্ঠুর শক্তি পদ্ধতি প্রস্তাবিত। ধন্যবাদ!
আন্তন হ্যানসন

এখানে ব্রুট ফোর্সকে স্কিজেড উপপাদ্য বলা হয়
ফা।

আপনি বিরতিযুক্ত গাণিতিকগুলিতে এ জাতীয় অ্যালগরিদম ব্যবহার করেন। en.wikipedia.org/wiki/Interval_arithmetic
rjmunro

13

আমি দুটি ছেদকারী ছেদগুলির ক্ষেত্রে দৃষ্টিভঙ্গি পছন্দ করি - আরও জটিল উদাহরণের জন্য আমি কীভাবে একই পদ্ধতির সামান্য প্রকরণটি ব্যবহার করব তা এখানে।

এটি বৃহত সংখ্যক আধা-ওভারল্যাপিং চেনাশোনাগুলির জন্য অ্যালগরিদমকে সাধারণীকরণের আরও ভাল অন্তর্দৃষ্টি দিতে পারে।

এখানে পার্থক্যটি হ'ল আমি কেন্দ্রগুলি সংযুক্ত করেই শুরু করি (সুতরাং চেনাশোনাগুলির কেন্দ্রের মধ্যে একটি উল্লম্ব জায়গা রয়েছে যেখানে স্থানগুলি ছেদাগুলি ছেদ করে between

(অনুশীলনে, সম্ভবত মন্টে-কার্লো পদ্ধতি সার্থক)

বিকল্প পাঠ
(উত্স: সিক্রেটগিক.কম )


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

4

আপনি যদি একটি পৃথক (ক্রমাগত বিপরীতে) উত্তর চান, আপনি পিক্সেল পেইন্টিং অ্যালগরিদমের অনুরূপ কিছু করতে পারেন।

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


3

হুম, খুব মজার সমস্যা। আমার পন্থাটি সম্ভবত নীচের লাইনের সাথে কিছু হবে:

  • একটি স্বেচ্ছাসেবী সংখ্যার বৃত্তের মধ্যে ছেদ করার ক্ষেত্রগুলি কী তা কাজ করার একটি উপায় নিয়ে কাজ করুন, অর্থাত্ আমার যদি 3 টি বৃত্ত থাকে তবে circles চেনাশোনাগুলির মধ্যে ছেদটি কী তা আমার কাজ করতে সক্ষম হতে হবে। "মন্টে-কার্লো" পদ্ধতিটি এটির কাছাকাছি আসার একটি ভাল উপায় হবে ( http://local.wasp.uwa.edu.au/~pbourke/geometry/circlearea/ )।
  • সম্পূর্ণরূপে অন্য বৃহত্তর বৃত্তে অন্তর্ভুক্ত এমন কোনও বৃত্তগুলি বাদ দিন (ব্যাসার্ধ এবং দুটি বৃত্তের কেন্দ্রের মধ্যে দূরত্বের মডুলাসটি দেখুন) আমি মনে করি না এটি বাধ্যতামূলক।
  • 2 টি চেনাশোনা চয়ন করুন (তাদের এ এবং বি কল করুন) এবং এই সূত্রটি ব্যবহার করে মোট ক্ষেত্রটি নিয়ে কাজ করুন:

(এটি কোনও আকারের জন্য সত্য, এটি বৃত্ত বা অন্যথায় হোক)

area(A∪B) = area(A) + area(B) - area(A∩B)

যেখানে A ∪ Bএকটি ইউনিয়ন বি এবং এর A ∩ Bঅর্থ একটি ছেদ করা বি (আপনি এটি প্রথম পদক্ষেপ থেকে কার্যকর করতে পারেন)।

  • এখন চেনাশোনাগুলি যুক্ত করা চালিয়ে যান এবং চেনাশোনাগুলির ক্ষেত্রগুলির ক্ষেত্রগুলি এবং চেনাশোনাগুলির মধ্যে ছেদ করার ক্ষেত্রগুলির যোগফল / বিয়োগ হিসাবে যোগ করা অঞ্চলটি চালিয়ে যান। উদাহরণস্বরূপ 3 টি চেনাশোনাগুলির জন্য (অতিরিক্ত চেনাশোনাকে C বলুন) আমরা এই সূত্রটি ব্যবহার করে এই অঞ্চলটির কাজ করব:

(এটি উপরের মতো যেখানে Aপ্রতিস্থাপন করা হয়েছে A∪B)

area((A∪B)∪C) = area(A∪B) + area(C) - area((A∪B)∩C)

যেখানে area(A∪B)আমরা সবেমাত্র কাজ করেছি এবং area((A∪B)∩C)এটি পাওয়া যাবে:

area((A∪B)nC) = area((A∩C)∪(B∩C)) = area(A∩C) + area(A∩B) - area((A∩C)∩(B∩C)) = area(A∩C) + area(A∩B) - area(A∩B∩C)

উপরে আবার আপনি কোথায় অঞ্চল (A∩B∩C) পেতে পারেন।

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

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

এই বিটিডব্লিউ করার সম্ভবত আরও ভাল উপায় আছে - প্রতিটি অতিরিক্ত বৃত্ত যুক্ত করার জন্য জটিলতা উল্লেখযোগ্যভাবে বৃদ্ধি পায় (সম্ভবত তাত্পর্যপূর্ণভাবে, তবে আমি নিশ্চিত নই)।


ফরম্যাটিংয়ের সাথে কী হবে? চৌরাস্তা এবং ইউনিয়নের জন্য এন এবং ইউ ব্যবহারের জন্য দুঃখিত, এর থেকে আরও ভাল উপায় সম্ভবত রয়েছে ...
জাস্টিন

1
কিছু ইউনিকোড ইউনিয়ন (∪) এবং ছেদ (∩) লক্ষণ যুক্ত করেছে। আশা করি তারা কাজ করে
স্পোইক

3

আমি ওভারল্যাপিং স্টার ফিল্ডগুলি সিমুলেট করার সমস্যা নিয়ে কাজ করছি, ঘন ক্ষেত্রের আসল ডিস্ক অঞ্চল থেকে সত্যিকারের তারা গণনা করার চেষ্টা করছি, যেখানে বড় উজ্জ্বল তারকারা দুর্বলকে মাস্ক করতে পারে। আমিও কঠোর আনুষ্ঠানিক বিশ্লেষণ করে এটি করতে সক্ষম হবেন আশা করেছিলাম, তবে কার্যটির জন্য একটি অ্যালগরিদম খুঁজে পেতে সক্ষম হয়েছি। আমি নীল পটভূমিতে তারা ক্ষেত্রগুলি সবুজ ডিস্ক হিসাবে উত্পন্ন করে সমাধান করেছি, যার ব্যাস সম্ভাবনার অ্যালগরিদম দ্বারা নির্ধারিত হয়েছিল। একটি সাধারণ রুটিন ওভারল্যাপ রয়েছে কিনা তা দেখার জন্য তাদের জুড়ি দিতে পারে (তারার জুড়িটি হলুদ করে দেওয়া); তারপরে রঙগুলির একটি পিক্সেল গণনা তাত্ত্বিক ক্ষেত্রের সাথে তুলনা করার জন্য পর্যবেক্ষণ অঞ্চল তৈরি করে। এরপরে এটি সত্য সংখ্যার জন্য সম্ভাব্যতা বক্ররেখা উত্পন্ন করে। নিষ্ঠুর শক্তি সম্ভবত, তবে এটি ঠিক আছে বলে মনে হচ্ছে। (সূত্র: 2from.com )


2

এখানে একটি অ্যালগরিদম যা অনুশীলনে কার্যকর করা সহজ হওয়া উচিত এবং এটিকে নির্বিচারে ছোট ত্রুটি তৈরি করতে সামঞ্জস্য করা যেতে পারে:

  1. একই পয়েন্টে কেন্দ্র করে নিয়মিত বহুভুজ দ্বারা প্রতিটি বৃত্তের আনুমানিক
  2. বহুভুজটি গণনা করুন যা অনুমানকৃত বৃত্তগুলির মিলন
  3. একত্রিত বহুভুজের ক্ষেত্রফল গণনা করুন

2 এবং 3 পদক্ষেপগুলি কম্পিউটেশনাল জ্যামিতি থেকে স্ট্যান্ডার্ড, সহজ-সন্ধানযোগ্য অ্যালগরিদম ব্যবহার করে চালানো যেতে পারে।

স্পষ্টতই, আপনি প্রতিটি আনুষঙ্গিক বহুভুজের জন্য যত বেশি পক্ষ ব্যবহার করেন, আপনার উত্তরটি ঠিক তার কাছাকাছি হবে। সঠিক উত্তরের সীমা পেতে আপনি শিলালিপিযুক্ত ও সার্টিস্ক্রিপড বহুভুজগুলি ব্যবহার করে আনুমানিক আনতে পারেন।


2

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

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


1

আমি এই লিঙ্কটি পেয়েছি যা দরকারী হতে পারে। যদিও এর একটি চূড়ান্ত উত্তর বলে মনে হচ্ছে না। গুগল উত্তর । তিনটি বৃত্তের জন্য আরেকটি রেফারেন্স হ'ল হারুকির উপপাদ্য । সেখানে একটি কাগজও আছে।


1

আপনি যে সমস্যার সমাধান করার চেষ্টা করছেন তার উপর নির্ভর করে এটি একটি উপরের এবং নিম্ন সীমাটি পেতে যথেষ্ট হতে পারে। একটি উপরের আবদ্ধ সহজ, সমস্ত চেনাশোনাগুলির যোগফল। নিম্ন সীমাতে আপনি এমন একক ব্যাসার্ধ বেছে নিতে পারেন যাতে চেনাশোনাগুলির কোনওটিই ওভারল্যাপ করে না। আরও ভাল যে প্রতিটি বৃত্তের জন্য বৃহত্তম ব্যাসার্ধ (প্রকৃত ব্যাসার্ধ পর্যন্ত) এটি সন্ধান করুন যাতে এটি ওভারল্যাপ না হয়। কোনও সম্পূর্ণ ওভারল্যাপযুক্ত চেনাশোনাগুলি সরিয়ে ফেলাও এটি বেশ নগণ্য হওয়া উচিত (এ জাতীয় সমস্ত চেনাশোনাগুলি সন্তুষ্ট করে | P_a - P_b | <= r_a) যেখানে P_a বৃত্ত A এর কেন্দ্র, P_b বৃত্ত B এর কেন্দ্র, এবং r_a হল A এর ব্যাসার্ধ ) এবং এটি উভয়কে উপরের এবং নীচের দিকে আবদ্ধ করে। আপনি যদি সমস্ত চেনাশোনাগুলির যোগফলের পরিবর্তে সালিশী জোড়গুলিতে আপনার জুটির সূত্র ব্যবহার করেন তবে আপনি আরও ভাল উচ্চতর বেঁধে পেতে পারেন। "সেরা" বাছাই করার ভাল উপায় থাকতে পারে

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


0

এন ^ 2 লগ (এন) এর জটিলতার সাথে গ্রিনের উপপাদ্যটি ব্যবহার করে এটি সমাধান করা যেতে পারে । আপনি যদি গ্রিনের উপপাদ্যের সাথে পরিচিত না হন এবং আরও জানতে চান, এখানে খান একাডেমির ভিডিও এবং নোটগুলি দেওয়া আছে। তবে আমাদের সমস্যার স্বার্থে আমি মনে করি আমার বিবরণ যথেষ্ট হবে।

ছবিগুলির লিঙ্কগুলির জন্য দুঃখিত, কারণ আমি ছবি পোস্ট করতে পারি না ((যথেষ্ট খ্যাতি পয়েন্ট নয়)

গ্রিনের উপপাদ্যের সাধারণ সমীকরণ

আমি যদি এল এবং এমকে এমন রাখি

শর্ত

তারপরে আরএইচএস হ'ল অঞ্চল আর এর অঞ্চল এবং বদ্ধ ইন্টিগ্রাল বা এলএইচএস সমাধান করে এটি পাওয়া যায় এবং এটি আমরা যা করতে যাচ্ছি ঠিক এটিই।

সমস্ত ইউনিয়নগুলিকে ছেদ করে এমন চেনাশোনাগুলির এমন বিরূপ সেটগুলিতে ভাঙতে পারে

সুতরাং অ্যান্টলিকওয়াসে পথ ধরে একীকরণ করা আমাদেরকে অঞ্চলটির ক্ষেত্র দেয় এবং ঘড়ির কাঁটার সাথে সংহত করে আমাদের এরিয়াটিকে নেতিবাচক দেয় । সুতরাং

এরিয়াওফিউনিয়ন = (অ্যান্টলকওয়াইজ দিকের দিকে রেড আর্কের সাথে একীকরণ + ঘড়ির কাঁটার দিকে নীল আরাকের সাথে একীকরণ)

তবে শীতল কৌশলটি হ'ল প্রতিটি বৃত্তের জন্য যদি আমরা আরকগুলি সংহত করি যা অন্য কোনও বৃত্তের অভ্যন্তরে থাকে না তবে আমরা আমাদের প্রয়োজনীয় অঞ্চলটি পেয়ে থাকি red কাজ শেষ!!!

এমনকি যখন চেনাশোনাটি অন্য কোনওর সাথে ছেদ না করে তখনও তাদের যত্ন নেওয়া হয়।

এখানে আমার সি ++ কোডের গিটহাব লিঙ্ক


-1

পিক্সেল পেইন্টিং পদ্ধতির (@ লডমাস্টারের পরামর্শ অনুসারে) বিভিন্ন উপায়ে গাণিতিক সমাধানের চেয়ে উচ্চতর:

  1. বাস্তবায়ন অনেক সহজ। উপরের সমস্যাটি 100 টিরও কম কোডের কোডগুলিতে সমাধান করা যেতে পারে, কারণ এই জেএসফিডাল সমাধানটি দেখায় (বেশিরভাগ কারণ এটি ধারণাগতভাবে অনেক সহজ, এবং এর সাথে মোকাবিলা করার কোনও প্রকার মামলা বা ব্যতিক্রম নেই)।
  2. এটি আরও সাধারণ সমস্যার সাথে সহজেই খাপ খায়। এটি 2D অঙ্কন গ্রন্থাগারগুলি (যেমন, "তাদের সমস্ত!") - - যতক্ষণ না বৃত্ত, উপবৃত্তাকার, স্প্লাইনস, বহুভুজ, আপনি এটির নাম লেখেন ততক্ষণ আকারবিজ্ঞানের নির্বিশেষে এটি কোনও আকারের সাথে কাজ করে। হেক, এমনকি বিটম্যাপ চিত্রগুলি।
  3. গণিতের সমাধানের জন্য ~ O [n * n] এর তুলনায় পিক্সেল-পেইন্টিং সমাধানের জটিলতা ~ O [n]। এর অর্থ আকারের সংখ্যা বাড়ার সাথে সাথে এটি আরও ভাল সম্পাদন করবে।
  4. এবং পারফরম্যান্সের কথা বললে, আপনি প্রায়শই বিনা মূল্যে হার্ডওয়্যার ত্বরণ পাবেন, কারণ বেশিরভাগ আধুনিক 2 ডি লাইব্রেরি (HTML5 এর ক্যানভাসের মতো, আমি বিশ্বাস করি) গ্রাফিক্স এক্সিলিটরগুলিতে রেন্ডারিংয়ের কাজটি অফলোড করবে।

পিক্সেল-পেইন্টিংয়ের এক নিম্নতম দিকটি হ'ল সমাধানটির সীমাবদ্ধতা। তবে পরিস্থিতি যেমন দাবি করছে তত সহজভাবে বৃহত্তর বা ছোট ক্যানভ্যাসগুলিতে রেন্ডার করে এটি সুসংগত। দ্রষ্টব্য, এছাড়াও, 2 ডি রেন্ডারিং কোডে অ্যান্টি-এলিয়াসিং (প্রায়শই ডিফল্ট দ্বারা চালু করা) পিক্সেল-স্তরের নির্ভুলতার চেয়ে ভাল ফলন করবে। সুতরাং, উদাহরণস্বরূপ, 100x100 চিত্রকে একই মাত্রার ক্যানভাসে রেন্ডারিং করা উচিত, আমার মনে হয়, 1 / (100 x 100 x 255) = .000039% এর ক্রম অনুসারে নির্ভুলতা পাওয়া উচিত ... যা সম্ভবত "যথেষ্ট ভাল" সকলের জন্য তবে সবচেয়ে দাবিদার সমস্যা।

<p>Area computation of arbitrary figures as done thru pixel-painting, in which a complex shape is drawn into an HTML5 canvas and the area determined by comparing the number of white pixels found in the resulting bitmap.  See javascript source for details.</p>

<canvas id="canvas" width="80" height="100"></canvas>

<p>Area = <span id="result"></span></p>
// Get HTML canvas element (and context) to draw into
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

// Lil' circle drawing utility
function circle(x,y,r) {
  ctx.beginPath();
  ctx.arc(x, y, r, 0, Math.PI*2);
  ctx.fill();
}

// Clear canvas (to black)
ctx.fillStyle = 'black';
ctx.fillRect(0, 0, canvas.width, canvas.height);

// Fill shape (in white)
ctx.fillStyle = 'white';
circle(40, 50, 40);
circle(40, 10, 10);
circle(25, 15, 12);
circle(35, 90, 10);

// Get bitmap data
var id = ctx.getImageData(0, 0, canvas.width, canvas.height);
var pixels = id.data; // Flat array of RGBA bytes

// Determine area by counting the white pixels
for (var i = 0, area = 0; i < pixels.length; i += 4) {
  area += pixels[i]; // Red channel (same as green and blue channels)
}

// Normalize by the max white value of 255
area /= 255;

// Output result
document.getElementById('result').innerHTML = area.toFixed(2);

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