搜了很久,没有相关的,所以自己写一下,同时分享出来。
画图主要分为两种,一种是在画布上画,例如plot这类的:
利用fill函数,其传入参数为若干个坐标点,所以可以利用圆的角度公式
x=x0+rcos(a),y=y0+rsin(a)。然后可以生成两个不同直径的圆,其代码如下:
a1=30; %弧度角
a2=270;
r=40;
d=5; %弧线厚度/2
x0=100;
y0=100;
t1= a1/360*2*pi:2*pi/360:a2/360*2*pi;
cir1 = x0+(r-d)*cos(t1);
cir2 = y0+(r-d)*sin(t1);
t2= a2/360*2*pi:-2*pi/360:a1/360*2*pi; %注意角度递减
cir3 = x0+(r+d)*cos(t2);
cir4 = y0+(r+d)*sin(t2);
figure;
fill([cir1,cir3],[cir2,cir4],[0,0,1],'EdgeColor',[0,0,1]);
所得结果如下:
另外一种是在图片中以像素点的形式生成,可以利用insertShape函数,其可以在像素图像中生成指定的形状,我们需要的形状是填充多边形:‘FilledPolygon’,其原理与fill相似,所以直接给代码如下:
img=zeros(200,200);
a1=30; %弧度角
a2=270;
r=40;
d=5; %弧线厚度
x0=100;
y0=100;
t1= a1/360*2*pi:2*pi/360:a2/360*2*pi;
cir1 = x0+(r-d)*cos(t1);
cir2 = y0+(r-d)*sin(t1);
t2= a2/360*2*pi:-2*pi/360:a1/360*2*pi; %注意角度递减
cir3 = x0+(r+d)*cos(t2);
cir4 = y0+(r+d)*sin(t2);
c1=zeros(size(t1,2)*2,1);
c1(1:2:end-1)=cir1';
c1(2:2:end)=cir2';
c2=zeros(size(t2,2)*2,1);
c2(1:2:end-1)=cir3';
c2(2:2:end)=cir4';
c1=[c1',c2'];
img=insertShape(img,'FilledPolygon',c1,'Color','red');
figure;
imshow(img);
所得结果如下: