1. เหมือนเดิมค่ะ สร้าง index array ขึ้นมาก่อน
npts = 201; x = linspace(-1,1,npts); y = x; [Y,X] = meshgrid(y,x);
2. เปลี่ยน coordinate x,y ให้เป็น polar coordinate โดย rho จะเป็นรัศมี และ phi คือมุม
[phi,rho] = cart2pol(X,Y);
phi จะมีค่าจาก -pi ถึง pi
3. สร้าง 1D vector ที่ต้องการจะทำเป็นวงกลมขึ้นมา ในที่นี้จะใช้ rand ฟังชั่นในการสร้าง โดยจำนวนจุดจะเท่ากับครึ่งหนึ่งของขนาด matrix
z = rand(1,ceil(npts/2));
4. หลังจากนั้นก็วาดรูปวงกลมด้วยคำสั่ง interp1 ตามข้างล่างนี้เลยค่ะ
Z = interp1(x(ceil(npts/2):end),z,rho);
ปล. คำสั่ง interp นี่ใช้ในการวาดรูปบ่อยเลยค่ะ มันดีจริงๆ
เพิ่มเติมอีกนิด ในส่วนนอกวงกลมจะมีค่าเป็น NaN (not a number) ซึ่งหลายๆครั้งใช้ในการคำนวณต่อไม่ได้ ดังนั้นก่อนจะนำรูปที่วาดไปเข้าสมการอื่น อาจจะเปลี่ยนNaN ให้เป็น 0 หรือเลขอื่นก่อนโดยใช้คำสั่งดังนี้
Z(isnan(Z)) = 0;
No comments:
Post a Comment