একটি বৃত্তের মধ্যে একটি এলোমেলো পয়েন্ট উত্পন্ন করুন (অভিন্ন)


212

আমি ব্যাসার্ধ একটি বৃত্তের মধ্যে একটি অবিশেষ এলোপাথারি বিন্দু জেনারেট করতে প্রয়োজন আর

আমি বুঝতে পারি যে কেবলমাত্র বিরতিতে [0 ... 2π) একটি অভিন্ন র্যান্ডম কোণটি বাছাই করে, এবং বিরতিতে সমানভাবে এলোমেলো ব্যাসার্ধ (0 ... আর ) আমি কেন্দ্রের দিকে আরও পয়েন্ট দিয়ে শেষ করব, যেহেতু দুটি দেওয়া হয়েছে আরও, ছোট ব্যাসার্ধের পয়েন্টগুলি বৃহত্তর ব্যাসার্ধের বিন্দুর চেয়ে একে অপরের কাছাকাছি থাকবে।

আমি এখানে এটির উপরে একটি ব্লগ এন্ট্রি পেয়েছি তবে আমি তার যুক্তি বুঝতে পারি না। আমি মনে করি এটি সঠিক, তবে তিনি কোথায় থেকে এসেছেন (2 / আর 2 ) and r এবং কীভাবে তিনি চূড়ান্ত সমাধানটি পেয়েছেন তা আমি সত্যিই বুঝতে চাই ।


আপডেট: এই প্রশ্নটি পোস্ট করার 7 বছর পরেও আমি বর্গাকার মূল অ্যালগরিদমের পিছনে গণিত সম্পর্কিত আসল প্রশ্নের বিষয়ে এখনও সন্তোষজনক উত্তর পাইনি। তাই আমি নিজে একটি উত্তর লেখার জন্য একটি দিন কাটিয়েছি। আমার উত্তরের লিঙ্ক


18
প্রত্যাখ্যানের নমুনা নেওয়ার অপূর্ণতা কি সত্যিই বড় ব্যাপার? প্রত্যাশিত প্রচেষ্টার সংখ্যা 4 / ≈ ≈ 1.27, এবং আপনার কে ট্রাই এর চেয়ে বেশি প্রয়োজন হওয়ার সম্ভাবনা (1-π / 4) ^ কে। কে = 20 এর জন্য এটি ≈ .00000000000000004 এবং কে = 50 এর জন্য এটি 10 ​​^ {- 34} এর ক্রম} যে কোনও দিন আপনি এই প্রতিক্রিয়াগুলি নিতে পারেন; আপনি ভাল করবেন।
শ্রীভাতসার আর

3
আসলে, প্রত্যাখ্যানের নমুনা সমাপ্তির গ্যারান্টি সরবরাহ করে। প্রতিক্রিয়াগুলি অসীমভাবে কম (সুনির্দিষ্ট বলতে গেলে শূন্য হয়) যা আপনার অ্যালগরিদমটি কখনই শেষ হবে না।
জারেড নীলসেন

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

4
@ স্পেক্স অনুশীলনে, প্রত্যাখ্যান করার কৌশলটি দ্রুততর কারণ এটি ট্রানসেন্ডেন্টাল ফাংশন মূল্যায়নের প্রয়োজনীয়তা এড়ায়।
pjs

2
(চালিয়ে যাওয়া) প্রত্যাখ্যান: 0.52s সমস্তই অভিন্ন উপায় এবং মানক বিচ্যুতি দিয়েছে (3 sig। ডুমুর থেকে)। প্রত্যাশিত হিসাবে, প্রত্যাখ্যানের নমুনাটি 27% সময় ব্যর্থ হয়েছিল (4 / পাই -1) সুতরাং বেটিলির চেয়ে 27% বেশি এলোমেলো সংখ্যার প্রয়োজন তবে সিগফপের চেয়ে 15% কম। এটি পিজেএস এবং অন্যদের দ্বারা করা মন্তব্যগুলিকে নিশ্চিত করে যে প্রত্যাখ্যানের নমুনা সম্ভবত সেরা পদ্ধতির, যদি না এলোমেলো উত্পাদন ব্যয়বহুল না হয়।
পিটার ডেভিডসন

উত্তর:


189

আর্কিমিডিসের মতো এটির কাছে আসা যাক।

ত্রিভুজ টিবিসিতে আমরা কীভাবে অভিন্ন বিন্দু তৈরি করতে পারি, যেখানে | AB | = | বিসি |? একটি সমান্তরালগ এবিসিডি প্রসারিত করে এটিকে আরও সহজ করি। এটিবিসিডি তে সমানভাবে পয়েন্ট উত্পন্ন করা সহজ। আমরা বিসি তে AB এবং Y এর উপর একটি এলোমেলো পয়েন্ট X বাছাই করি এবং জেডকে এমনভাবে বেছে নেব যে এক্সবিওয়াইজেড একটি সমান্তরাল ক্ষেত্র। মূল ত্রিভুজটিতে অভিন্ন চয়ন করা পয়েন্ট পেতে আমরা কেবলমাত্র এডিসিতে প্রদর্শিত যে কোনও পয়েন্টগুলি এসি বরাবর এবিসি-তে ফিরে ফোল্ড করি।

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

এবিসিডি তে একটি এলোমেলো পয়েন্ট বাছাই উপরের পদ্ধতিটি ব্যবহার করা সহজ। এবি এ একটি এলোমেলো পয়েন্ট চয়ন করুন। একসাথে বিসি এ এলোমেলো পয়েন্ট চয়ন করুন। অর্থাৎ। কেন্দ্র থেকে দূরত্ব প্রদান করে [0, R] তে একত্রে যথেচ্ছ সংখ্যা x এবং y বেছে নিন। আমাদের ত্রিভুজটি একটি পাতলা স্লাইভার তাই এ বি এবং বিসি মূলত সমান্তরাল। সুতরাং Z পয়েন্টটি কেবল উত্স থেকে x + y দূরত্বে রয়েছে। যদি x + y> R আমরা পিছনে ভাঁজ করি।

আর = 1 এর জন্য সম্পূর্ণ অ্যালগরিদম এখানে। আমি আশা করি আপনি এটি একমত সহজ। এটি ট্রিগ ব্যবহার করে, তবে random()এটি প্রত্যাখ্যানের নমুনার বিপরীতে আপনি কতটা সময় নেবেন এবং এর জন্য কতগুলি কল প্রয়োজন তা আপনি গ্যারান্টি দিতে পারেন ।

t = 2*pi*random()
u = random()+random()
r = if u>1 then 2-u else u
[r*cos(t), r*sin(t)]

এখানে এটি ম্যাথমেটিকায়।

f[] := Block[{u, t, r},
  u = Random[] + Random[];
  t = Random[] 2 Pi;
  r = If[u > 1, 2 - u, u];
  {r Cos[t], r Sin[t]}
]

ListPlot[Table[f[], {10000}], AspectRatio -> Automatic]

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


6
@ কারেলজারথ আমি একটি অপরিমেয় পাতলা ত্রিভুজটির পাল্টা ধারণাটি পছন্দ করি যা অন্য প্রান্তের চেয়ে এক প্রান্তে এখনও বিস্তৃত :-) এটি সঠিক উত্তর পেয়েছে।
sigfpe

2
@ হ্যামার নিশ্চিত নয় যে এটি n মাত্রাগুলিকে ভাল করে তোলে। তবে 3 ডি তে আপনি আরকিমিডিসের অন্য একটি ফলাফল ব্যবহার করতে পারেন! সিলিন্ডারে একটি বিন্দু তৈরি করতে "হ্যাট-বাক্স" উপপাদ্যটি ব্যবহার করুন (সহজ!) এবং তারপরে এটিকে আবার গোলকের ম্যাপ করুন। এটি একটি দিকনির্দেশনা দেয়। এবার random()+random()+random()আরও কিছু জটিল ভাঁজ (যেমন একটি তেরহ্রেড্রোনে একটি অসীম পাতলা সমান্তরালীর 6-উপায় ভাঁজ) ব্যবহার করুন। যদিও এটি একটি ভাল পদ্ধতি নিশ্চিত না।
sigfpe

2
আমি ভেবেছিলাম 1 মিনিট এলোমেলো () + র্যান্ডম () এবং 2 * র্যান্ডম () এর মধ্যে পার্থক্য বের করার জন্য ... আমি খুব বোকা: /
জিমিনপি

3
@ থারউইন লক্ষ্য করুন কীভাবে একটি বৃত্তে ০.০-০.১ ব্যাসার্ধের চেয়ে 0.9-1.0 ব্যাসার্ধের বেশি পয়েন্ট রয়েছে। এলোমেলো () + এলোমেলো () রেডিয়াই প্রায় ১.০ হতে পারে তবে ০.০-২.০ এর মধ্যে থাকে। ভাঁজ করা হলে এগুলি প্রায় 1.0 এবং সর্বদা 0.0-1.0 এর মধ্যে থাকে বলে সম্ভাবনা থাকে। আরও কি, এই মন্তব্যের প্রথম বাক্যে এটি ঠিক অনুপাতের প্রয়োজন। কেবল অর্ধেকের ফলে 0.5 নম্বর প্রায় আরও বেশি সংখ্যা তৈরি হয় এবং এটি ভুল হবে।

2
@ থারউইন এলোমেলো সংখ্যা উত্পন্ন করতে এবং কী পান তা দেখুন উভয় স্কিম ব্যবহার করে দেখুন। 2 * এলোমেলো () 0 থেকে 2 এর পরিসীমাটিতে সমানভাবে বিতরণ করা সংখ্যক সংখ্যা দেয় rand এটি এর মতো যা দুটি ডাইস ঘূর্ণায়মান এবং সংমিশ্রণ অন্য কোনও সংখ্যার চেয়ে 7 দেওয়ার সম্ভাবনা বেশি।
sigfpe

133

R ব্যাসার্ধের বৃত্তের মধ্যে কীভাবে একটি এলোমেলো পয়েন্ট উত্পন্ন করা যায় :

r = R * sqrt(random())
theta = random() * 2 * PI

(ধরে নেওয়া random()0 এবং 1 এর মধ্যে সমানভাবে একটি মান দেয়)

আপনি যদি এটি কার্তেসিয়ান স্থানাঙ্কে রূপান্তর করতে চান তবে আপনি এটি করতে পারেন

x = centerX + r * cos(theta)
y = centerY + r * sin(theta)


কেন sqrt(random())?

আসুন গণিতটি যা দেখায় sqrt(random())। সরলতার জন্য ধরে নিন যে আমরা ইউনিট বৃত্তের সাথে কাজ করছি, অর্থাৎ আর = 1।

আমরা কেন্দ্র থেকে কতটা দূরে দেখছি পয়েন্টের মধ্যবর্তী গড় দূরত্ব একই হওয়া উচিত। উদাহরণস্বরূপ, এর অর্থ হল, পরিধি ২ সহ একটি বৃত্তের ঘেরের দিকে তাকানো আমাদের পরিধি 1 সহ একটি বৃত্তের ঘেরের পয়েন্টগুলির সংখ্যার চেয়ে দ্বিগুণ পয়েন্ট পাওয়া উচিত।


                

যেহেতু একটি বৃত্ত (2π পরিধি ) এর সাথে সুসংগত বৃদ্ধি বোঝা যায় যে র্যান্ডম বিন্দুর সংখ্যা সঙ্গে সুসংগত হত্তয়া উচিত । অন্য কথায়, পছন্দসই সম্ভাবনা ঘনত্ব ফাংশন (পিডিএফ) রৈখিকভাবে বৃদ্ধি পায়। যেহেতু পিডিএফের ক্ষেত্রফল 1 এর সমান এবং সর্বাধিক ব্যাসার্ধ 1 হওয়া উচিত, তাই আমাদের রয়েছে


                

সুতরাং আমরা জানি যে আমাদের এলোমেলো মানগুলির পছন্দসই ঘনত্বটি কেমন হওয়া উচিত। এখন: আমরা কীভাবে এমন এলোমেলো মান তৈরি করব যখন আমাদের সমস্ত কিছু 0 থেকে 1 এর মধ্যে অভিন্ন র্যান্ডম মান হয়?

আমরা একটি কৌশল ব্যবহার করি যার নাম ইনভার্স ট্রান্সফর্ম স্যাম্পলিং

  1. পিডিএফ থেকে, ক্রম বিতরণ ফাংশন (সিডিএফ) তৈরি করুন
  2. Y = x এর সাথে এটি মিরর করুন
  3. ফলস্বরূপ ফাংশনটি 0 এবং 1 এর মধ্যে একটি অভিন্ন মান প্রয়োগ করুন।

জটিল মনে হচ্ছে? আমাকে সামান্য পাশের ট্র্যাক সহ একটি ব্লককোট প্রবেশ করান যা অন্তর্দৃষ্টি বোঝায়:

মনে করুন আমরা নিম্নলিখিত বিতরণ সহ একটি এলোমেলো পয়েন্ট উত্পন্ন করতে চাই:

                

এটাই

  • 1 এবং 2 এর মধ্যে সমানভাবে পয়েন্টগুলির 1/5, এবং
  • পয়েন্ট 4/5 সমান 2 এবং 3 এর মধ্যে।

সিডিএফ হ'ল নাম অনুসারে, পিডিএফটির संचयी সংস্করণ। স্বজ্ঞাতভাবে: পিডিএফ ( x ) x এলোমেলো মানের সংখ্যা বর্ণনা করে , সিডিএফ ( এক্স ) এক্স এর চেয়ে কম এলোমেলো মানগুলির সংখ্যা বর্ণনা করে ।

এক্ষেত্রে সিডিএফ দেখতে চাইবে:

                

এটি কীভাবে কার্যকর তা দেখতে, কল্পনা করুন যে আমরা সমানভাবে বিতরণ করা উচ্চতায় বুলেটগুলি বাম থেকে ডানদিকে গুলি করি shoot বুলেটগুলি লাইনে আঘাত করার সাথে সাথে তারা মাটিতে নেমে যায়:

                

দেখুন মাটির বুলেটের ঘনত্ব কীভাবে আমাদের কাঙ্ক্ষিত বিতরণের সাথে মিলে যায়! আমরা প্রায় সেখানে!

সমস্যাটি হ'ল এই ফাংশনের জন্য, y অক্ষটি আউটপুট এবং এক্স অক্ষটি ইনপুট । আমরা কেবল "মাটি থেকে সরাসরি গুলি চালাতে পারি"! আমাদের বিপরীত কার্য প্রয়োজন!

এই কারণেই আমরা পুরো জিনিসটি আয়না করি; এক্স হয়ে Y এবং Y হয়ে এক্স :

                

আমরা এই সিডিএফ -1 কল । পছন্দসই বিতরণ অনুযায়ী মানগুলি পেতে, আমরা সিডিএফ -1 (এলোমেলো ()) ব্যবহার করি।

… সুতরাং, ফিরে এলোমেলো ব্যাসার্ধের মান উত্পাদন করতে যেখানে আমাদের পিডিএফ 2 x এর সমান ।

পদক্ষেপ 1: সিডিএফ তৈরি করুন:

যেহেতু আমরা বাস্তবের সাথে কাজ করছি, সিডিএফ পিডিএফের অবিচ্ছেদ্য হিসাবে প্রকাশ করা হয়।

সিডিএফ ( এক্স ) = x 2 এক্স = এক্স 2

পদক্ষেপ 2: মিরর বরাবর সিডিএফ Y = এক্স :

গাণিতিকভাবে এইগুলি এক্স এবং y অদলবদল করতে এবং y এর জন্য সমাধান করতে উত্পন্ন হয় :

সিডিএফ :      y = x 2
অদলবদল:    x = y 2
সমাধান:    y = √ x
সিডিএফ -1 :   y = √ x

পদক্ষেপ 3: 0 এবং 1 এর মধ্যে একটি অভিন্ন মানটিতে ফলাফল ফাংশনটি প্রয়োগ করুন

সিডিএফ -1 (এলোমেলো ()) = রেন্ডোম ()

আমরা যা বের করতে পেরেছি :-)


এই অ্যালগরিদমটি দক্ষতার সাথে রিংয়ের পয়েন্টগুলি তৈরি করতে ব্যবহার করা যেতে পারে।
ইভান কোভাতুন

রিং এ? একটি নির্দিষ্ট ব্যাসার্ধের মতো? আমি আপনার প্রশ্নটি বুঝতে পেরেছি কিনা তা নিশ্চিত নয় তবে আপনার যদি একটি নির্দিষ্ট ব্যাসার্ধ থাকে তবে আপনার কেবল কোণটি এলোমেলো করে নেওয়া দরকার।
আইয়ুব

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

1
ওহ্হ দারুন! স্পষ্টতই, আপনি যখন বলছেন random(min_radius², max_radius²), আপনি কি এর সমান কিছু বোঝাচ্ছেন random() * (max_radius² - min_radius²) + min_radius², যেখানে random()0 এবং 1 এর মধ্যে অভিন্ন মান দেয়?
আইয়ুব

হ্যাঁ, আমার অর্থ হ'ল: ব্যাসার্ধ = স্কয়ার্ট (এলোমেলো () (ম্যাক্স_রাডিয়াস - মিনিট_ডিয়াস²) + মিনিট_আগ্রিয়াস)।
ইভান কোভাতুন

27

এখানে একটি দ্রুত এবং সহজ সমাধান রয়েছে।

পরিসরে দুটি এলোমেলো সংখ্যা বাছুন (0, 1) যথা aএবং b। যদি b < a, তাদের অদলবদল। আপনার কথা (b*R*cos(2*pi*a/b), b*R*sin(2*pi*a/b))

আপনি নিম্নলিখিত হিসাবে এই সমাধান সম্পর্কে চিন্তা করতে পারেন। আপনি যদি চেনাশোনাটি গ্রহণ করেন, এটি কেটে ফেলুন, তারপর এটি সোজা করুন, আপনি একটি ডান কোণযুক্ত ত্রিভুজ পাবেন। স্কেল যে ত্রিভুজ নিচে, এবং আপনার কাছ থেকে একটি ত্রিভুজ আছে চাই (0, 0)থেকে (1, 0)থেকে (1, 1)প্রয়োজন এবং ফিরে আবার (0, 0)। এই সমস্ত রূপান্তরগুলি ঘনত্বকে অভিন্নভাবে পরিবর্তন করে। আপনি যা করেছেন তা সমানভাবে ত্রিভুজটিতে একটি এলোমেলো পয়েন্টটি বেছে নিয়েছে এবং বৃত্তের বিন্দু পেতে প্রক্রিয়াটিকে বিপরীত করেছে।


এটি কোনও কারণে আমাকে গ্রহণযোগ্য উত্তরের চেয়ে অনেক বেশি অভিন্ন বিতরণ দেয়, যদিও আমাকে ব্যাসার্ধ দ্বারা স্থানাঙ্ক বিভাজন করা দরকার ছিল, অন্যথায় এটি আর ^ 2 এর একটি বৃত্তের মধ্যে রয়েছে
গ্রেগ জাআল

3
ধন্যবাদ, জাভাতে এটি আপনার কোড, সম্ভবত কেউ এটি দরকারী খুঁজে পেতে পারেন: ফ্লোট র্যান্ডম 1 = ম্যাথ ইউটিলস.রেন্ডম (); ভাসমান র‌্যান্ডম 2 = ম্যাথ ইউটিলস.আরেন্ডম (); ভাসা র্যান্ডম এক্সপয়েন্ট = র‌্যান্ডম 2 * ব্যাসার্ধ ম্যাথ ইউটিলস.কোস (ম্যাথুটিলস.পিআই 2 * র্যান্ডম 1 / র্যান্ডম 2); ভাসা র্যান্ডমওয়াইপয়েন্ট = এলোমেলো 2 * ব্যাসার্ধ ম্যাথুটিলস.সিন (ম্যাথ ইউটিলস.পিআই 2 * র্যান্ডম 1 / র্যান্ডম 2);
টনি সেরালভা

খুব ভালো! আমি পয়েন্টগুলি কেন্দ্রীভূত করার জন্য আরও সম্ভাবনার ধারণাটি পছন্দ করি, সুতরাং যখন b < aআমরা এটি অর্জন করতে পারি তখন অদলবদল না করি! জাভাস্ক্রিপ্ট মধ্যে যেমন jsfiddle.net/b0sb5ogL/1
Guilherme

আমি মনে করি আপনার সমাধানটি খারাপ। এটি অভিন্ন ফলাফল দিচ্ছে না। এই স্ক্রিনশটটি দেখুন prntscr.com/fizxgc
bolec_kolec

4
আপনি কীভাবে বৃত্তটি কাটা এবং এটি সোজা করতে আরও কিছুটা ব্যাখ্যা করতে পারেন?
কেইচ

21

উল্লেখ্য সমানুপাতিক পয়েন্ট ঘনত্ব ব্যাসার্ধ বর্গ বিপরীত হয়, অত: পর পরিবর্তে অবচয় এর rথেকে [0, r_max], থেকে বাছাই [0, r_max^2], তারপর হিসাবে আপনার স্থানাঙ্ক গনা:

x = sqrt(r) * cos(angle)
y = sqrt(r) * sin(angle)

এটি আপনাকে ডিস্কে অভিন্ন পয়েন্ট বিতরণ করবে।

http://mathworld.wolfram.com/DiskPointPicking.html


12

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

আপনি কেন এই আচরণ করছেন তা এটি আপনাকে কিছু ধারণা দিতে পারে।

সেই লিঙ্কটিতে যে ফ্যাক্টরটি উদ্ভূত হয়েছে তা আপনাকে বলবে যে আয়তক্ষেত্রের সাথে সম্পর্কিত অঞ্চলটিকে বৃত্তের সাথে ম্যাপ করার পরে ব্যাসার্ধের উপর নির্ভর না করার জন্য কতটা সামঞ্জস্য করা দরকার।

সম্পাদনা করুন: সুতরাং আপনার ভাগ করা লিঙ্কটিতে তিনি যা লিখছেন তা হ'ল "এটি সামগ্রিক বিতরণের বিপরীত গণনা করে করা যথেষ্ট সহজ এবং আমরা r:" এর জন্য পেয়েছি।

মৌলিক ভিত্তিটি এখানে আপনি পছন্দসই সম্ভাবনা ঘনত্ব ফাংশনটির संचयी বিতরণ ফাংশনের বিপরীত ফাংশন দ্বারা ইউনিফর্মটি ম্যাপ করে ইউনিফর্ম থেকে পছন্দসই বিতরণ সহ একটি পরিবর্তনশীল তৈরি করতে পারেন। কেন? আপাতত এটি মঞ্জুর করুন, তবে এটি একটি সত্য।

এখানে আমার গণিত সম্পর্কে কিছুটা স্বজ্ঞাত ব্যাখ্যা। আর এর সাথে ঘনত্বের ফাংশন এফ (আর) এর সাথে নিজেই সমানুপাতিক হতে হবে। এই বাস্তবতা বোঝা যে কোনও বেসিক ক্যালকুলাস বইয়ের অংশ। মেরু অঞ্চল উপাদানগুলির বিভাগগুলি দেখুন। আরও কিছু পোস্টার এটি উল্লেখ করেছেন।

সুতরাং আমরা এটিকে f (r) = C * r বলব;

এটি বেশিরভাগ কাজের হিসাবে প্রমাণিত হয়। এখন, যেহেতু চ (র) একটি সম্ভাব্য ঘনত্ব হওয়া উচিত, আপনি সহজেই দেখতে পাচ্ছেন যে বিরতি (0, আর) এর সাথে f (r) সংহত করে আপনি সি = 2 / আর ^ 2 পেয়েছেন (এটি পাঠকের জন্য অনুশীলন ।)

সুতরাং, চ (আর) = 2 * আর / আর ^ 2

ঠিক আছে, সুতরাং আপনি লিঙ্কটিতে সূত্রটি কীভাবে পাবেন।

তারপরে, চূড়ান্ত অংশটি (0,1) ইউনিফর্মের এলোমেলো পরিবর্তনশীল থেকে চলেছে আপনাকে অবশ্যই এই কাঙ্ক্ষিত ঘনত্ব f (r) থেকে संचयी বিতরণ ফাংশনের বিপরীত ফাংশনটি দিয়ে ম্যাপ করতে হবে। কেন এটি হয় তা বোঝার জন্য আপনাকে পাপুলিসের মতো সম্ভবত একটি উন্নত সম্ভাবনার পাঠ্য খুঁজে পাওয়া দরকার (বা এটি নিজেই অর্জন করতে হবে))

চ (র) সংহত করে আপনি এফ (আর) = আর ^ 2 / আর ^ 2 পাবেন

এর বিপরীত ক্রিয়াকলাপটি সন্ধান করতে আপনি u = r ^ 2 / R ^ 2 নির্ধারণ করেন এবং তারপরে আর এর জন্য সমাধান করুন যা আপনাকে r = আর * স্কয়ার্ট (ইউ) দেয়

এটি সম্পূর্ণরূপে স্বজ্ঞাগতভাবেও বোধ করে তোলে, u = 0 টিও আর = 0 তে মানচিত্র করা উচিত Also এছাড়াও, u = 1 শোরল মানচিত্রটি আর = আরকেও মজায় Also


10

নিষ্পাপ সমাধানটি কাজ না করার কারণটি হ'ল এটি বৃত্ত কেন্দ্রের কাছাকাছি অবস্থিত পয়েন্টগুলিতে একটি উচ্চ সম্ভাবনার ঘনত্ব দেয়। অন্য কথায়, যে বৃত্তের ব্যাসার্ধ r / 2 রয়েছে তার মধ্যে একটি বিন্দু নির্বাচিত হওয়ার সম্ভাবনা r / 2 রয়েছে তবে এর ক্ষেত্রফল (পয়েন্ট সংখ্যা) pi * r ^ 2/4 রয়েছে।

অতএব আমরা নিম্নলিখিত বৈশিষ্ট্যটির ব্যাসার্ধের সম্ভাবনার ঘনত্ব চাই:

প্রদত্ত আর এর চেয়ে ছোট বা সমান ব্যাসার্ধ বেছে নেওয়ার সম্ভাবনাটি ব্যাসার্ধের সাথে বৃত্তের ক্ষেত্রের সাথে সমানুপাতিক হতে হবে। (কারণ আমরা পয়েন্টগুলিতে সমান বিতরণ করতে চাই এবং বৃহত্তর অঞ্চলগুলি আরও বেশি পয়েন্ট বোঝায়)

অন্য কথায় আমরা [0, r] এর মধ্যে একটি ব্যাসার্ধ বেছে নেওয়ার সম্ভাবনাটি বৃত্তের সামগ্রিক ক্ষেত্রের ভাগের সমান হতে চাই। মোট বৃত্তের ক্ষেত্রফল পাই * আর ^ 2, এবং ব্যাসার্ধের সাথে বৃত্তের ক্ষেত্রফল পাই * আর ^ 2। সুতরাং আমরা [0, r] এর মধ্যে (pi * r ^ 2) / (pi * R ^ 2) = r ^ 2 / R ^ 2 এর মধ্যে একটি ব্যাসার্ধ বেছে নেওয়ার সম্ভাবনাটি চাই।

এখন গণিত আসে:

[0, r] এর মধ্যে একটি ব্যাসার্ধ বেছে নেওয়ার সম্ভাবনা হ'ল পি (আর) ড্র এর 0 থেকে r এর অবিচ্ছেদ্য (এটি কেবল কারণ আমরা ছোট রেডির সমস্ত সম্ভাবনা যুক্ত করি)। এইভাবে আমরা অবিচ্ছেদ্য (পি (আর)) চাই = আর ^ 2 / আর ^ 2। আমরা পরিষ্কারভাবে দেখতে পাচ্ছি যে আর ^ 2 একটি ধ্রুবক, তাই আমাদের কী করতে হবে তা নির্ধারণ করতে হবে যে কোন পি (আর), যখন সংহতগুলি আমাদের আর ^ 2 এর মতো কিছু দেয়। উত্তরটি পরিষ্কারভাবে r * ধ্রুবক। অবিচ্ছেদ্য (r * ধ্রুবক ডাঃ) = আর ^ 2/2 * ধ্রুবক। এটি আর ^ 2 / আর ^ 2 এর সমান হতে হবে, সুতরাং ধ্রুবক = 2 / আরআর ^ 2 ^ সুতরাং আপনার সম্ভাব্য বন্টন p (r) = r * 2 / R ^ 2 রয়েছে

দ্রষ্টব্য: সমস্যাটি সম্পর্কে ভাবার আরও একটি স্বজ্ঞাত উপায় হ'ল কল্পনা করা যে আপনি ব্যাসার্ধের সম্ভাব্য ঘনত্বের প্রতিটি বৃত্তটিকে তার পরিধিতে যে পয়েন্ট রয়েছে তার অনুপাতের সমানভাবে দেওয়ার চেষ্টা করছেন। সুতরাং, একটি বৃত্তের সাথে ব্যাসার্ধের r এর পরিধিতে 2 * পাই * আর "পয়েন্ট" থাকবে। পয়েন্টের মোট সংখ্যা পাই * আর ^ 2। সুতরাং আপনার বৃত্তের রা সম্ভাব্যতা (2 * পিআই * আর) / (পাই * আর ^ 2) = 2 * আর / আর ^ 2 এর সমান দেওয়া উচিত। এটি বোঝা অনেক সহজ এবং স্বজ্ঞাত, তবে এটি গাণিতিকভাবে যথেষ্ট সাধ্য নয়।


9

Let (ব্যাসার্ধ) এবং φ (আজিমুথ) দুটি বৃত্তাকার মধ্যে একটি স্বেচ্ছাসেবী বিন্দুর মেরু স্থানাঙ্কের সাথে সম্পর্কিত দুটি এলোমেলো পরিবর্তনশীল হতে দিন Let যদি পয়েন্টগুলি সমানভাবে বিতরণ করা হয় তবে ρ এবং φ এর বিতরণ ফাংশনটি কী?

যে কোনও আর এর জন্য: 0 <r <R এর ব্যাসার্ধের স্থানাঙ্কের সম্ভাবনা কম থাকে তবে r হয় r

পি [ρ <আর] = পি [পয়েন্টটি ব্যাসার্ধের একটি বৃত্তের মধ্যে r] = এস 1 / এস 0 = (আর / আর) 2

যেখানে এস 1 এবং এস 0 যথাক্রমে r এবং R এর ব্যাসার্ধের ক্ষেত্র। সুতরাং সিডিএফ হিসাবে দেওয়া যেতে পারে:

          0          if r<=0
  CDF =   (r/R)**2   if 0 < r <= R
          1          if r > R

এবং পিডিএফ:

PDF = d/dr(CDF) = 2 * (r/R**2) (0 < r <= R).

নোট করুন যে আর = 1 র্যান্ডম ভেরিয়েবল স্কয়ার্ট (এক্স) এর জন্য যেখানে এক্স একরকম [0, 1) এ সঠিক সিডিএফ রয়েছে (কারণ পি [স্কয়ার্ট (এক্স) <y] = পি [x <y ** 2] = y * * 2 <0 y <= 1) এর জন্য।

Φ এর বন্টন 0 থেকে 2 * from পর্যন্ত স্পষ্টতই অভিন্ন π এখন আপনি এলোমেলো পোলার স্থানাঙ্ক তৈরি করতে এবং ত্রিকোণমিত্রিক সমীকরণগুলি ব্যবহার করে কার্টেসিয়ানে রূপান্তর করতে পারেন:

x = ρ * cos(φ)
y = ρ * sin(φ)

আর = 1 এর জন্য পাইথন কোড পোস্ট করতে প্রতিরোধ করতে পারে না।

from matplotlib import pyplot as plt
import numpy as np

rho = np.sqrt(np.random.uniform(0, 1, 5000))
phi = np.random.uniform(0, 2*np.pi, 5000)

x = rho * np.cos(phi)
y = rho * np.sin(phi)

plt.scatter(x, y, s = 4)

তুমি পাবে

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


7

এটি 'অভিন্ন র্যান্ডম' বলতে কী বোঝায় তার উপর এটি নির্ভর করে। এটি একটি সূক্ষ্ম বিন্দু এবং আপনি উইকি পৃষ্ঠাতে এটি সম্পর্কে আরও পড়তে পারেন: http://en.wikedia.org/wiki/Bertrand_paradox_%28probability%29 , যেখানে একই সমস্যা, 'অভিন্ন র্যান্ডম'কে বিভিন্ন ব্যাখ্যা দেয় বিভিন্ন উত্তর!

আপনি কীভাবে পয়েন্টগুলি বেছে নেবেন তার উপর নির্ভর করে বিতরণটি ভিন্ন ভিন্ন হতে পারে, যদিও তারা কিছুটা অর্থে অভিন্ন ।

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


5
বা বরং, বিন্দুটি কোনও স্বেচ্ছাসেবী অঞ্চলে পড়ার সম্ভাবনাটি অঞ্চলের ক্ষেত্রের সাথে সমানুপাতিক - ধরে নেওয়া যায় যে এই অঞ্চলের একটি অঞ্চল রয়েছে
শ্রীভাতসার আর

@ শ্রীঃ সঠিক, যা আমি প্রথম বন্ধনে আমার বক্তব্য দ্বারা বোঝাতে চাইছিলাম। আমি এটি আরও পরিষ্কার করব, ধন্যবাদ বিটিডব্লিউ, ব্লগ সম্পর্কে, এমন কোনও সত্য প্রমাণ ছিল না যে স্বেচ্ছাসেবী অঞ্চলগুলি আনুপাতিক সম্ভাবনা দেয়, তাই আমি সেভাবে বাক্যটিকে বেছে নিই।

6

numব্যাসার্ধের বৃত্ত থেকে এলোমেলো পয়েন্ট উত্পন্ন করতে আমার পাইথন কোডটি এখানে rad:

import matplotlib.pyplot as plt
import numpy as np
rad = 10
num = 1000

t = np.random.uniform(0.0, 2.0*np.pi, num)
r = rad * np.sqrt(np.random.uniform(0.0, 1.0, num))
x = r * np.cos(t)
y = r * np.sin(t)

plt.plot(x, y, "ro", ms=1)
plt.axis([-15, 15, -15, 15])
plt.show()

1
শুধু কেন নয় r = np.sqrt(np.random.uniform(0.0, rad**2, num))?

4

আমি মনে করি এই ক্ষেত্রে পোলার স্থানাঙ্ক ব্যবহার করে জটিল একটি উপায় সমস্যা, এটা অনেক সহজ যদি আপনি দৈর্ঘ্য 2R পাশ দিয়ে একটি বর্গক্ষেত্র মধ্যে র্যান্ডম পয়েন্ট বাছাই হতে হবে এবং তারপর নির্বাচন পয়েন্ট হবে যে (x,y)যেমন যে x^2+y^2<=R^2


আপনার অর্থ x ^ 2 + y ^ 2 <= আর ^ 2 আমার মনে হয়।
sigfpe

1
এটি প্রত্যাখ্যানের নমুনা। এটি ঠিক আছে, তবে এর অর্থ হ'ল গণনার সময় কিছুটা পরিবর্তিত হয় যা কোনও সমস্যা হতে পারে।
স্টিভ বেনেট

সমস্ত স্কোয়ার 4-পার্শ্বযুক্ত।
xaxxon

এই অ্যালগরিদম আরও কার্যকর যে বর্গমূল বা পাপ / কোস গণনা জড়িত যে কোনও কিছু। এটি স্কোয়ারের 21.5% পয়েন্টের চেয়ে কম প্রত্যাখ্যান করে।
ইভান কোভাতুন

3

জাভা সমাধান এবং বিতরণ উদাহরণ (2000 পয়েন্ট)

public void getRandomPointInCircle() {
    double t = 2 * Math.PI * Math.random();
    double r = Math.sqrt(Math.random());
    double x = r * Math.cos(t);
    double y = r * Math.sin(t);
    System.out.println(x);
    System.out.println(y);
}

2000 পয়েন্ট বিতরণ

প্রিভিয়াস সমাধানের ভিত্তিতে @sigfpe থেকে https://stackoverflow.com/a/5838055/5224246


2

প্রথমে আমরা একটি সিডিএফ তৈরি করি [এক্স] যা

একটি পয়েন্ট বৃত্তের কেন্দ্র থেকে দূরত্ব x এর চেয়ে কম হওয়ার সম্ভাবনা। ধরুন, বৃত্তটির R এর ব্যাসার্ধ রয়েছে

স্পষ্টতই যদি x শূন্য হয় তবে সিডিএফ [0] = 0

স্পষ্টতই যদি x আর হয় তবে সিডিএফ [আর] = 1

স্পষ্টতই যদি x = r হয় তবে সিডিএফ [আর] = (পাই আর ^ 2) / (পাই আর ^ 2)

এটি কারণ বৃত্তের প্রতিটি "ছোট অঞ্চল" বাছাই করার একই সম্ভাবনা থাকে, সুতরাং সম্ভাবনাটি প্রশ্নযুক্ত অঞ্চলে আনুপাতিকভাবে। এবং বৃত্তের কেন্দ্র থেকে দূরত্ব x প্রদত্ত অঞ্চলটি পাই r ^ 2

সুতরাং সিডিএফ [x] = x ^ 2 / আর ^ 2 কারণ পাই একে অপরকে বাতিল করে দেয়

আমাদের সিডিএফ [x] = x ^ 2 / আর ^ 2 রয়েছে যেখানে x 0 থেকে আর হয়

সুতরাং আমরা এক্স জন্য সমাধান

R^2 cdf[x] = x^2

x = R Sqrt[ cdf[x] ]

আমরা এখন সিডিএফকে 0 থেকে 1 এলোমেলো নম্বর দিয়ে প্রতিস্থাপন করতে পারি

x = R Sqrt[ RandomReal[{0,1}] ]

পরিশেষে

r = R Sqrt[  RandomReal[{0,1}] ];
theta = 360 deg * RandomReal[{0,1}];
{r,theta}

আমরা পোলার স্থানাঙ্কগুলি পাই 60 0.601168 আর, 311.915 ডিগ্রি}


1

ব্যাসার্ধ এবং সেই ব্যাসার্ধের "নিকটে" পয়েন্টের সংখ্যার মধ্যে একটি লৈখিক সম্পর্ক রয়েছে, সুতরাং তাকে ব্যাসার্ধের বিতরণ ব্যবহার করা দরকার যা rসমানুপাতিক ব্যাসার্ধের কাছে ডেটা পয়েন্টের সংখ্যাও তৈরি করে r


1

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

bool[,] getMatrix(System.Drawing.Rectangle r) {
    bool[,] matrix = new bool[r.Width, r.Height];
    return matrix;
}

void fillMatrix(ref bool[,] matrix, Vector center) {
    double radius = center.X;
    Random r = new Random();
    for (int y = 0; y < matrix.GetLength(0); y++) {
        for (int x = 0; x < matrix.GetLength(1); x++)
        {
            double distance = (center - new Vector(x, y)).Length;
            if (distance < radius) {
                matrix[x, y] = r.NextDouble() > 0.5;
            }
        }
    }

}

private void drawMatrix(Vector centerPoint, double radius, bool[,] matrix) {
    var g = this.CreateGraphics();

    Bitmap pixel = new Bitmap(1,1);
    pixel.SetPixel(0, 0, Color.Black);

    for (int y = 0; y < matrix.GetLength(0); y++)
    {
        for (int x = 0; x < matrix.GetLength(1); x++)
        {
            if (matrix[x, y]) {
                g.DrawImage(pixel, new PointF((float)(centerPoint.X - radius + x), (float)(centerPoint.Y - radius + y)));
            }
        }
    }

    g.Dispose();
}

private void button1_Click(object sender, EventArgs e)
{
    System.Drawing.Rectangle r = new System.Drawing.Rectangle(100,100,200,200);
    double radius = r.Width / 2;
    Vector center = new Vector(r.Left + radius, r.Top + radius);
    Vector normalizedCenter = new Vector(radius, radius);
    bool[,] matrix = getMatrix(r);
    fillMatrix(ref matrix, normalizedCenter);
    drawMatrix(center, radius, matrix);
}

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


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

1

চেনাশোনাতে অঞ্চল উপাদানটি ডিএ = আরডিআর * ডিপিআই। এই অতিরিক্ত ফ্যাক্টরটি এ্যান্ড এবং ফাই এলোমেলোভাবে বেছে নিতে আপনার ধারণাটিকে ধ্বংস করেছে destroyed যখন ফাই ফ্ল্যাট বিতরণ করা হয়, r হয় না, তবে 1 / আর তে ফ্ল্যাট হয় (যেমন আপনি "ষাঁড়ের চোখের" চেয়ে সীমানা মারার সম্ভাবনা বেশি বেশি)।

সুতরাং চেনাশোনাতে সমানভাবে বিতরণ করা পয়েন্টগুলি উত্পন্ন করতে ফ্ল্যাট বিতরণ থেকে পিএইচআই ফাই এবং 1 / আর বিতরণ থেকে আর।

বিকল্পভাবে মেহেদাদ প্রস্তাবিত মন্টি কার্লো পদ্ধতিটি ব্যবহার করুন।

সম্পাদনা

1 / r এ একটি র্যান্ডম আর ফ্ল্যাট বাছাই করতে আপনি বিরতি [1 / আর, অনন্ত] থেকে একটি র্যান্ডম এক্স চয়ন করতে এবং r = 1 / x গণনা করতে পারেন। r এর পরে 1 / r এ ফ্ল্যাট বিতরণ করা হয়।

একটি র্যান্ডম ফাই গণনা করতে অন্তর [0, 1] থেকে একটি এলোমেলো এক্স বাছুন এবং ফাই = 2 * পাই * এক্স গণনা করুন।


আমি একজন কিভাবে ঠিক সংগ্রহ করবো R থেকে "একটি 1 / R বন্টন" ?
আইয়ুব

0

আমি জানি না যে এই প্রশ্নটি ইতিমধ্যে দেওয়া সমস্ত উত্তর সহ নতুন সমাধানের জন্য উন্মুক্ত কিনা, তবে আমি নিজেও ঠিক একই প্রশ্নের মুখোমুখি হয়েছি। আমি একটি সমাধানের জন্য নিজের সাথে "যুক্তি" দেওয়ার চেষ্টা করেছি, এবং আমি একটি খুঁজে পেয়েছি। এটি ইতিমধ্যে কেউ কেউ ইতিমধ্যে এখানে পরামর্শ হিসাবে একই জিনিস হতে পারে, তবে যাইহোক এখানে এটি হয়:

বৃত্তের পৃষ্ঠের দুটি উপাদান সমান হওয়ার জন্য, সমান ডাঃ এর ধারণা ধরে আমাদের অবশ্যই dtheta1 / dtheta2 = r2 / r1 থাকতে হবে। P (r, theta) = P {r1 <r <r1 + dr, theta1 <theta <theta + dtheta1} = f (r, theta) * dr * dtheta1, এবং দুটি নির্ধারণের জন্য সেই উপাদানটির সম্ভাবনার প্রকাশের প্রকাশ সম্ভাব্যতা (আর 1 এবং আর 2 এর জন্য) সমান, আমরা পৌঁছলাম (ধরে নিচ্ছি আর এবং থিয়েটা স্বতন্ত্র) f (r1) / r1 = f (r2) / r2 = ধ্রুবক, যা f (r) = c * r দেয়। এবং বাকী, ধ্রুবক সি নির্ধারণ করে পি (পি) পিডিএফ হওয়ার শর্ত থেকে অনুসরণ করে।


Dtheta1 / dtheta2 = r2 / r1 দিয়ে শুরু করার জন্য আকর্ষণীয় পন্থা। আপনি কীভাবে সেই সমীকরণটি নিয়ে এসেছিলেন তা বিশদভাবে বলতে পারেন?
আইয়ুব

অন্যরা যেমন উল্লেখ করেছেন (উদাহরণস্বরূপ), একটি বৃত্তের পৃষ্ঠের একটি ডিফারেনশন উপাদানকে আর থেটিটা হিসাবে দেওয়া হয়েছে , সুতরাং আমরা যদি r1 = আর 2 ধরে নিই, তবে আমাদের কাছে ড্র 1 * ডিথেটা ১ = ড্র 2 * ডিটিটা 2 থাকবে এবং বাকিগুলি অনুসরণ করবে ।
arsaKasra

0

একটি প্রোগ্রামার সমাধান:

  • কিছুটা মানচিত্র তৈরি করুন (বুলিয়ান মানগুলির একটি ম্যাট্রিক্স)। এটি আপনার ইচ্ছামতো বড় হতে পারে।
  • বিট মানচিত্রে একটি বৃত্ত আঁকুন।
  • বৃত্তের পয়েন্টগুলির একটি সারণী তৈরি করুন।
  • এই দেখার সারণীতে একটি এলোমেলো সূচী চয়ন করুন।
const int RADIUS = 64;
const int MATRIX_SIZE = RADIUS * 2;

bool matrix[MATRIX_SIZE][MATRIX_SIZE] = {0};

struct Point { int x; int y; };

Point lookupTable[MATRIX_SIZE * MATRIX_SIZE];

void init()
{
  int numberOfOnBits = 0;

  for (int x = 0 ; x < MATRIX_SIZE ; ++x)
  {
    for (int y = 0 ; y < MATRIX_SIZE ; ++y)
    {
      if (x * x + y * y < RADIUS * RADIUS) 
      {
        matrix[x][y] = true;

        loopUpTable[numberOfOnBits].x = x;
        loopUpTable[numberOfOnBits].y = y;

        ++numberOfOnBits;

      } // if
    } // for
  } // for
} // ()

Point choose()
{
  int randomIndex = randomInt(numberOfBits);

  return loopUpTable[randomIndex];
} // ()

বিটম্যাপটি কেবল যুক্তির ব্যাখ্যার জন্য প্রয়োজনীয়। এটি বিটম্যাপ ছাড়াই কোড:

const int RADIUS = 64;
const int MATRIX_SIZE = RADIUS * 2;

struct Point { int x; int y; };

Point lookupTable[MATRIX_SIZE * MATRIX_SIZE];

void init()
{
  int numberOfOnBits = 0;

  for (int x = 0 ; x < MATRIX_SIZE ; ++x)
  {
    for (int y = 0 ; y < MATRIX_SIZE ; ++y)
    {
      if (x * x + y * y < RADIUS * RADIUS) 
      {
        loopUpTable[numberOfOnBits].x = x;
        loopUpTable[numberOfOnBits].y = y;

        ++numberOfOnBits;
      } // if
    } // for
  } // for
} // ()

Point choose()
{
  int randomIndex = randomInt(numberOfBits);

  return loopUpTable[randomIndex];
} // ()

0

সঠিক '(2 / আর 2) × আর' সম্পর্কে আমি এখনও নিশ্চিত নই তবে যা স্পষ্ট তা বোঝা যাচ্ছে প্রদত্ত ইউনিট 'ডাঃ' এ বিতরণ করার জন্য প্রয়োজনীয় পয়েন্টের সংখ্যা অর্থাত্ আর-এর বৃদ্ধি আর 2 এর সাথে সমানুপাতিক হবে এবং আর নয়।

এইভাবে পরীক্ষা করুন ... কোনও কোণ থেটাতে এবং r (0.1r থেকে 0.2r) এর মধ্যে পয়েন্টের সংখ্যা অর্থাৎ r এর ভগ্নাংশ এবং r (0.6r থেকে 0.7r) এর মধ্যে পয়েন্টের সংখ্যা সমান হবে যদি আপনি স্ট্যান্ডার্ড জেনারেশন ব্যবহার করেন, যেহেতু দুটি অন্তর মধ্যে পার্থক্যটি মাত্র 0.1 র। তবে যেহেতু পয়েন্টের (0.6r থেকে 0.7r) এর মধ্যে আচ্ছাদিত ক্ষেত্রটি 0.1r থেকে 0.2r এর মধ্যে আচ্ছাদিত ক্ষেত্রের তুলনায় অনেক বড় হবে, সমান পয়েন্টের বৃহত্তর অঞ্চলে বিচ্ছিন্নভাবে ব্যবধান করা হবে, এটি আমি ধরে নিলাম আপনি ইতিমধ্যে জানেন, সুতরাং ফাংশন এলোমেলো পয়েন্টগুলি উত্পন্ন করতে অবশ্যই লিনিয়ার নয় তবে চতুর্ভুজযুক্ত হতে হবে (যেহেতু প্রদত্ত ইউনিট 'ড্র'তে বিতরণ করার জন্য প্রয়োজনীয় পয়েন্টের সংখ্যা অর্থাত্ আর-এর বৃদ্ধি আর -2 এর সাথে সমানুপাতিক হবে এবং আর নয়), এক্ষেত্রে এটি বিপরীত হবে will চতুষ্কোণ, যেহেতু আমাদের ডেল্টা রয়েছে (0)


আপনি এখানে পাইথাগোরাস উপপাদ্যটি প্রথম উল্লেখ করেছেন one আপনার ব্যাখ্যাটি সমর্থন করে আপনি যদি একটি বা দুটি চিত্র দিয়ে এটিকে প্রসারিত করতে পারেন তবে আমি পছন্দ করব। এটি এখন যেমন দাঁড়িয়েছে তখন আমার অনুসরণ করতে খুব কঠিন সময়
কাটাচ্ছে

@ আইয়ুব আমি উত্তরটি পুনঃপ্রবিষ্ট করার চেষ্টা করেছি, আপনার প্রয়োজন হলে আমি চিত্রগুলি যুক্ত করতে পারি :)
चीजফেষ্ট

আমি বুঝতে পারি যে কেন আমি এটি রৈখিকভাবে ছড়িয়ে দিতে পারি না। আমি যা এখানে বুঝতে পারি তা পাইথাগোরাস বা পাপ / কোসের সংযোগ is ডায়াগ্রামগুলি এখানে আমাকে সহায়তা করতে পারে।
আইয়ুব

পাইথাগোরাস আমার ভুল, দয়া করে এটি সম্পর্কে ভুলে যান, তবে আশা করি আপনি ফাংশনটির চতুষ্কোণ প্রকৃতি বুঝতে পেরেছিলেন, সঠিক (2 / আর 2) proof r এর প্রমাণ প্রয়োজন এবং আমি এর পক্ষে কোনও প্রমাণ আনতে পারছি না
चीजফেষ্ট

0

এমন মজাদার সমস্যা
অক্ষের উত্স থেকে দূরত্ব কম হওয়ার কারণে একটি পয়েন্টকে বেছে নেওয়ার সম্ভাবনার যুক্তিটি উপরে একাধিকবার ব্যাখ্যা করা হয়েছে। আমরা ইউ [0,1] এর মূল গ্রহণ করে তার জন্য অ্যাকাউন্ট করি। পাইথন 3 এ ধনাত্মক আর এর জন্য একটি সাধারণ সমাধান এখানে।

import numpy
import math
import matplotlib.pyplot as plt

def sq_point_in_circle(r):
    """
    Generate a random point in an r radius circle 
    centered around the start of the axis
    """

    t = 2*math.pi*numpy.random.uniform()
    R = (numpy.random.uniform(0,1) ** 0.5) * r

    return(R*math.cos(t), R*math.sin(t))

R = 200 # Radius
N = 1000 # Samples

points = numpy.array([sq_point_in_circle(R) for i in range(N)])
plt.scatter(points[:, 0], points[:,1])

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


0

আপনি আপনার স্বজ্ঞাত ব্যবহার করতে পারেন।

একটি বৃত্তের ক্ষেত্রফল pi*r^2

জন্য r=1

এটি আমাদের একটি অঞ্চল দেয় pi। আসুন আমরা ধরে নিই যে আমাদের এমন fএকধরণের ফাংশন রয়েছে যা N=10বৃত্তের ভিতরে পয়েন্টগুলি অভিন্নভাবে বিভ্রান্ত করবে । অনুপাতটি এখানে10 / pi

এখন আমরা ক্ষেত্রফল এবং পয়েন্টের সংখ্যা দ্বিগুণ করব

জন্য r=2এবংN=20

এটির একটি ক্ষেত্র দেয় 4piএবং অনুপাতটি এখন 20/4piবা 10/2pi। ব্যাসার্ধটি বৃহত্তর এবং বৃহত্তর বৃহত্তর হবে, কারণ এর বৃদ্ধিটি চতুর্ভুজ এবং Nস্কেলগুলি রৈখিকভাবে হয়।

এটি ঠিক করার জন্য আমরা কেবল বলতে পারি

x = r^2
sqrt(x) = r

আপনি যদি পোলার স্থানাঙ্কগুলিতে এটির মতো ভেক্টর তৈরি করেন

length = random_0_1();
angle = random_0_2pi();

আরও পয়েন্টগুলি কেন্দ্রের চারদিকে অবতরণ করবে।

length = sqrt(random_0_1());
angle = random_0_2pi();

length আর অভিন্নভাবে বিতরণ করা হয় না, তবে ভেক্টরটি এখন অভিন্নভাবে বিতরণ করা হবে।


-1

1) -1 এবং 1 এর মধ্যে একটি এলোমেলো এক্স চয়ন করুন।

var X:Number = Math.random() * 2 - 1;

2) বৃত্ত সূত্রটি ব্যবহার করে, X এবং 1 এর ব্যাসার্ধের প্রদত্ত Y এর সর্বাধিক এবং সর্বনিম্ন মান গণনা করুন:

var YMin:Number = -Math.sqrt(1 - X * X);
var YMax:Number = Math.sqrt(1 - X * X);

3) এই চরমের মধ্যে একটি এলোমেলো ওয়াই চয়ন করুন:

var Y:Number = Math.random() * (YMax - YMin) + YMin;

4) আপনার অবস্থান এবং ব্যাসার্ধের মানগুলি চূড়ান্ত মানটিতে অন্তর্ভুক্ত করুন:

var finalX:Number = X * radius + pos.x;
var finalY:Number = Y * radois + pos.y;

2
অভিন্ন নয় - [-1, 0] এর সম্ভাবনা [0, 0] এর তুলনায় অনেক বেশি, পি ([- 1, Y]) = পি ([0, ওয়াই]) দেওয়া আছে এবং কেবলমাত্র একটিই আছে [-1, Y] এর জন্য পছন্দ এবং [0, Y] এর জন্য অনেক পছন্দ
আমদান

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