但是,只是對於壹點來說,那麽它影響的範圍對行列來說都不會超過正負5
所以,我們可以線建立壹個從縱橫都是從-5到5的模版
先計算出符合要求的點的偏移量
以後無論p,q怎麽取,影響到的點,全部都可以由這些偏移量得到
[di,dj]=meshgrid(-5:5);
temp=(sqrt(di.^2+dj.^2)<=5);
di=di(temp); %得到第壹維偏移量
dj=dj(temp); %得到第二維偏移量
%以上模版偏移量只需要計算壹次
%以下每給壹點(p,q),計算壹次
%如果給壹點(p,q),那麽全部要更改的坐標是
ii=p+di;jj=q+dj;
temp=(ii>=1&ii<=1000&jj>=1&jj<=1000);%考慮不能超越邊界
ii=ii(temp);jj=jj(temp);
ind = sub2ind([1000 1000],ii,jj);%為了方便使用,將i,j雙坐標轉為ind單坐標
a(ind)=a(ind)*2; %完成更改
註意,這樣每給出壹點(p,q),得到的壹個圓形區域的數據就乘以二
如果這些圓形的區域有重疊,那麽重疊的區域會累積翻倍
如果重疊的區域不希望累積乘上很多陪,只要兩倍
那麽可以先設定壹個邏輯矩陣
TF=false(1000,1000);
壹開始全是0
每次給壹個(p,q)點,先不乘以二,而是先記錄要修改的區域
TF(ind)=true;
在所有(p,q)都計算完畢後,再用
a(TF)=a(TF)*2;
壹次性將需要改變的區域改變