# 使用matlab或python绘制图像并输出为txt文件

vr为圆形面积占总面积的比例；
r为圆形半径；
k1为圆外数字；
k2为园内数字；

``````function producestructure()

clc;
clear all;
nx=256;
ny=256;

p=zeros(nx,ny);

vr=0.04;

nxy=nx*ny;

hn=nxy*vr;

nh=11;

rr=((hn/nh)/pi)^0.5;

km=1;

kh=0.048;  %圆内
distt=8;

nk=1;

bddis=10;

for n=1:1:10000

x0=floor(rr+bddis+ (nx-2*rr-2*bddis)*rand);
y0=floor(rr+bddis+ (ny-2*rr-2*bddis)*rand);

if(n==1)
hc(nk,1)=x0;
hc(nk,2)=y0;
end
tr=1;
if(n>1)

for i=1:1:nk

D=((x0-hc(i,1))^2+(y0-hc(i,2))^2)^0.5;

if(D<(2*rr+distt))
tr=0;
end
end
end

if(tr>0)
nk=nk+1;
hc(nk,1)=x0;
hc(nk,2)=y0;
disp([x0  y0])
end

if(nk==nh) break; end

end

if(nk==nh)

p=p+km;

for k=1:1:nh

for m=1:1:ny
for n=1:1:nx
D=((n-hc(k,1))^2+(m-hc(k,2))^2)^0.5;
if(D<rr)
p(m,n)=kh;
end
end
end

end

pcolor(p);

else
disp(['please change dis for more point']);
end

fn=fopen('k.txt','w');

for m=1:1:ny
for n=1:1:nx
fprintf(fn,'%f\n',p(m,n));
end
end
fclose(fn) ;

df=0.01*(diff(p,2,2)+diff(p,2,1));
size(df)
``````
• 写回答

#### 5条回答默认 最新

• 「已注销」 2023-04-14 13:47
关注

我在你的代码基础上修改后，运行结果如下：

代码如下：

``````clc;
clear all;
nx = 256;
ny = 256;

p = zeros(nx, ny);

vr = 0.04;

nxy = nx*ny;

hn = nxy*vr;

nh = 11;

rr = ((hn/nh)/pi)^0.5;

km = 1;
k2 = 0.1;
kh = 0.048;  % 圆内数字
k1 = 0.01;   % 圆外数字
distt = 8;

nk = 1;

bddis = 10;

% 生成正态分布的圆心坐标
mu = [nx/2, ny/2];  % 均值
sigma = [50, 50];   % 标准差
hc = zeros(nh, 2);
while nk <= nh
coord = round(normrnd(mu, sigma, 1, 2));
if all(coord > rr+bddis) && all(coord < [nx, ny]-rr-bddis)
tr = 1;
if nk > 1
for i = 1:1:nk-1
D = ((coord(1)-hc(i,1))^2 + (coord(2)-hc(i,2))^2)^0.5;
if D < (2*rr+distt)
tr = 0;
break
end
end
end
if tr > 0
hc(nk,:) = coord;
nk = nk+1;
end
end
end

for k = 1:nh
r = randi([10,20]); % 生成10~20之间的整数作为半径
for m = 1:ny
for n = 1:nx
D = ((n - hc(k,1))^2 + (m - hc(k,2))^2)^0.5;
if (D < r)
if (D > r - 2) % 设置圆周边缘的宽度
p(m,n) = k2*(1-cos(pi*(D-r+2)/4))^2; % 通过插值平滑圆周边缘
elseif (D > r)
p(m,n) = k1;
else
p(m,n) = k2;
end
end
end
end
end
p(p == 0) = k1;  % 圆外数字为 k1

pcolor(p);

fn = fopen('k.txt', 'w');
for m = 1:1:ny
for n = 1:1:nx
fprintf(fn, '%g\n', p(m,n));
end
end
fclose(fn);
``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论 编辑记录

• 系统已结题 4月22日
• 已采纳回答 4月14日
• 修改了问题 4月14日
• 修改了问题 4月14日
• 展开全部

#### 悬赏问题

• ¥15 pyqt5 中python如何通过Qtwebchannel主动发消息给web前端
• ¥15 关于HTML中title获取xml内容的问题
• ¥15 fanuc机器人PRIO083数字信号未复原错误，如何解决？
• ¥20 如何为现有电路板增加远程控制功能
• ¥15 C#点击按钮的时候的循环次数就是最后一次，如何是循环第几次的值？
• ¥15 UE5打包失败，求解决
• ¥15 请问STM32G431的CANOPEN协议函数怎么写