Wednesday, July 15, 2020

วาดวงกลม จาก 1D vector

อีก 1 รูปที่ใช้บ่อย สมมติว่าเรามี vector อยู่ 1 อัน เราจะวาดวงกลมจาก vector นี้ได้อย่างไร

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