کلیدستان

نسخه‌ی کامل: توزیع یکنواخت دوبعدی
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با سلام و خسته نباشید،

چگونه میتوان تعدادی نود (عامل) را با  یک توزیع خاص مثلا یکنواخت  در یک دایره با مرکز خاص به طور تصادفی  پخش نمود، به طوریکه فاصله هر کدام از این نودها تا مرکز دایره توسط پارامترهای  rو زاویه تتا  به دست آید؟ به عنوان مثال دستور ( [2,4], random ('uniform' , 0, تعدادی داده را با سایز ماتریس 4*2  با توزیع یکنواخت یک بعدی به ما می دهد، در حالیکه ما میخواهیم همین کار را منتها در فضای دو بعدی  بر روی صفحه دایره ای داشته باشیم؟ لطف میکند اگر در اسرع وقت  پاسخ اینجانب را بدهید. ممنون
سلام.
کدهای متلب برای ایجاد تعدادی نقطه به صورت تصادفی (با توزیع یکنواخت) در یک دایره :



کد:
clear all
close all
clc

circle_radius=2;
circle_center=[3 4]; % [x y]

rectangle('Position',[circle_center(1)-circle_radius,circle_center(2)-circle_radius,2*circle_radius,2*circle_radius],'Curvature',[1,1]);

axis([0 7 0 7]);
axis('image');

hold on
nodes_x=0;
nodes_y=0;
for nn=1:30
    a=0;
    b=circle_radius;
    distance=a+(b-a)*rand(1);
    
    a=0;
    b=2*pi;
    teta=a+(b-a)*rand(1);
    
    nodes_x(nn)=distance*cos(teta);
    nodes_y(nn)=distance*sin(teta);
    
    plot(circle_center(1)+nodes_x,circle_center(2)+nodes_y,'rs','LineWidth',5,'MarkerSize',1.5);
end
nodes_x=nodes_x+circle_center(1)
nodes_y=nodes_y+circle_center(1)

سه خط اول کدها،برای عدم تداخل با برنامه های قبلی اجرا شده در نرم افزار متلب می باشد.
متغیر circle_radius ، همان شعاع دایره و متغیر circle_center نیز شامل مختصات نقطه مرکز دایره می باشد.
با دستور rectangle ، ابتدا دایره مورد نظر رو رسم کردیم.
با دستور axis ابتدا حدود محورهای شکل رو مشخص کردیم و سپس در خط بعدی و با تعیین مشخصه image برای دستور axis ، تعیین کرده ایم که اندازه محورهای افقی و عمودی با مقیاس یکسان نمایش داده شود (وگرنه دایره به شکل بیضی به نظر خواهد آمد).
با دستور hold on تعیین کرده ایم که شکل های بعدی، در همین پنجره شکل باز شده، رسم شوند.
مختصات نقاط تصادفی را در دو بردار nodes_x و nodes_y ذخیره خواهیم کرد.
درون حلقه for ، برای فاصله نقطه تصادفی از مرکز دایره و همچنین زاویه آن نقطه با محور، دو مقدار تصادفی ایجاد می کنیم و سپس بر اساس این دو مقدار، مختصات x و y نقطه تصادفی به دست می آید و آن را با دستور plot رسم می کنیم.
دقت شود که a و b ، حدهای بالا و پایین برای تولید عدد تصادفی توسط دستور rand می باشند.

نتیجه اجرای کد متلب بالا :


البته بنده مختصات x و y را ذخیره کردم، شما می توانید مقادیر فاصله از مرکز دایره و زاویه را در دو بردار ذخیره کنید (البته باید مختصات x و y نهایی رو تبدیل به مختصات قطبی بکنید تا مختصات قطبی واقعی نقاط رو داشته باشید، زیرا اون مقادیر نسبی هستند).
ممنون از راهنماییتون، واقعا مفید بود.
متشکرم
خواهش می کنم.
موفق باشید.
سلام
ببخشید چطورمیتونم 200 نمونه تصادفی درفضا ایجادکنیم البته یه باریک بعدی ویک باردوبعدی
ممنونم