目前大多數細胞自動機都是矩形的,這個是六邊形的。
生存規則在倒數13 - 倒數18行。
下面是兩種不同規則的動畫。
% 列數設定
n_row = round(n_col/0.433*1.5/1.2);
cell = zeros(n_row,n_col, 14,2);
% cell - [細胞狀態 細胞中點座標 六個邊點座標 六個鄰近圖形序號]
% 細胞狀態(1)- [當前狀態 下一步狀態]; 0- 死亡 ,1- 存活。
% 中方點座標(2)- [x, y]
% 六個邊點座標(3~8)- [x,y]。
% 六個鄰近圖形行、列號(9~14)- [行號,列號]。
% 生成六邊形中點座標 %
y_point= 0;
for i_row =1:1:n_row
if(mod(i_row,2)==1)
x_point = 0.5;
else
x_point = 1.25;
endy_point= y_point+ 0.433;
for i_col = 1:1:n_col
x_point = x_point+ 1.5;
cell(i_row, i_col,2,:)= [x_point,y_point];
endend% 生成六邊形角點座標 %
cell(:,:,3,1)= cell(:,: ,2,1)-0.5;
cell(:,:,[4,8],1)= repmat(cell(:,: ,2,1)-0.25,1,1,2);
cell(:,:,[5,7],1)= repmat(cell(:,: ,2,1)+0.25,1,1,2);
cell(:,:,6,1)= cell(:,: ,2,1)+0.5;
cell(:,:,[3,6],2)= repmat(cell(:,: ,2,2),1,1,2);
cell(:,:,[4,5],2)= repmat(cell(:,: ,2,2)+0.433,1,1,2);
cell(:,:,[7,8],2)= repmat(cell(:,: ,2,2)-0.433,1,1,2);
% 繪製中點 %
plot(cell(:, :,2,1),cell(:, :,2,2),'linestyle','none','marker','.','color','b' );hold on;
if(cell(n_row,n_col,2,1)>1.2*cell(n_row,n_col,2,2))
xlim([0, cell(n_row,n_col,2,1)]+1.5);ylim([0, cell(n_row,n_col,2,1)]./1.2);
else
xlim([0, cell(n_row,n_col,2,2).*1.2+1]);ylim([0, cell(n_row,n_col,2,2)]);
end% 繪製六邊形 %
pic= cell(n_row,n_col);
for i=1:1:n_row
for j=1:1:n_col
pic= patch(reshape(cell(i,j,3:8,1),[1,6]),reshape(cell(i,j,3:8,2),[1,6]),'w');
endend% 尋找鄰近圖形的行、列號(沒有細胞的位置為[-1,-1])
for i_center=1:1:n_row
for j_center=1:1:n_col
for i=1:1:6
found = 0;
% 在目標細胞附近 士2 格的範圍內尋找,減少運算量
for i_find= max(1, i_center-2):min(n_row, i_center+2)
for j_find= max(1, j_center-2):min(n_col, j_center+2)
distance = sqrt((cell(i_center, j_center,2,1)- cell(i_find, j_find,2,1))^2 ...
+ (cell(i_center, j_center,2,2)- cell(i_find, j_find,2,2))^2);
% 初步根據距離判斷
if distance> 0.85 && distance< 0.9
x_range = [1,1].* cos(1.0472* (i-1)-0.5236)* distance+ [-0.1 0.1]+ cell(i_center, j_center,2,1);
y_range = [1,1].* sin(1.0472* (i-1)-0.5236)* distance+ [-0.1 0.1]+ cell(i_center, j_center,2,2);
% 再根據夾角判斷
if cell(i_find, j_find,2,1)> x_range(1) && cell(i_find, j_find,2,1)< x_range(2) ...
&& cell(i_find, j_find,2,2)> y_range(1) && cell(i_find, j_find,2,2)< y_range(2)
cell(i_center, j_center,i+8,:) = [i_find, j_find];
found= 1;
endend
endend
if found ==0
cell(i_center, j_center,i+8,:)= -1;
endend
endend% 賦予細胞隨機初試狀態
cell( :, :, 1, 1)=round(rand(n_row, n_col));
% 開始迭代
while 2>1
for i=1:1:n_row
for j=1:1:n_col
% 計算細胞周圍存活細胞數量
n_live = 0;
for k=1:1:6
if cell( i, j, k+8, 1)~= -1 && cell( i, j, k+8, 2)~= -1
n_live = n_live+ cell(cell( i, j, k+8, 1), cell( i, j, k+8, 2), 1, 1);
endend
% 判斷生死
if n_live>4 || n_live<3
cell( i, j, 1, 2)= 0;
else
cell( i, j, 1, 2)= 1;
end% 更新顯示狀態
if cell( i, j, 1, 1) >0.5
set(pic,'facecolor',[0.5 1 0.5]);
else
set(pic,'facecolor',[1 1 1]);
endend
enddrawnow;
% 更新生死狀態
cell( :, :, 1, 1)= cell( :, :, 1, 2);
end
六邊形平面
現在有乙個n n的六邊形網格平面 這種平面類似蜂窩形狀 下圖是n 1,2,3,4條件下的具體形狀,根據它們可以依次類推n 5,6,現在你需要對n n網格中一些格仔進行上色,在給定的輸入中這些格仔被標記上字元 x 而不用上色的網格被標記為 上色時需要注意,如果兩個被上色的格仔有公共邊,那麼這兩個格仔需...
2701 六邊形點陣
題目描述 description 輸入六邊形的邊長n,請你畫出這個六邊形點陣。輸入描述 input description 僅一行,乙個整數n 輸出描述 output description 六邊形點陣 有兩條邊水平 樣例輸入 sample input 6 樣例輸出 sample output 資料...
未知 六邊形 題解
接上題,反正是一起做的那麼故事情節也接上吧嘻嘻嘻 正好,帶我去一趟天線崖。你確定?你都說了都要暴雨了,前幾天的暴雨 是啊,你還抱怨整天悶在家裡啥事也沒幹呢,結果就剩下我在刷題而你整天再睡覺。因為山脈的阻隔,所以他們只能乘坐小船到達那裡。而給他們租小船的人,開出了很高的價錢,但是。你們幫我解決乙個問題...