之前我們講了正方形運算規則下的圖形編程。
它有4種運算規則,如果我們使用6種運算規則,會有什麼情況發生呢?
下面,我定義了一個正六邊形運算規則。
大家可以想象一個正六邊形。
①0代表什麼都沒發生
②-3代表向左上
③+3代表向左下
④-1代表向右上
⑤+1代表向右下
⑥+2代表向下
⑦-2代表向上
現在我們隨便輸入一些數字,讓它們使用上面的任一規則,看最後會發生什麼?
OK,我們預設了這幾組數字。
第一組:2、6、7
第二組:2、3、8
第三組:2、3、12
第四組:5、6、7
第五組:3、5、7
現在開始:
第一組:
第二組:
第三組:
第四組:
第五組:
你們一會兒可以複製代碼,自己玩,只要顯示器夠大,理論上可以有無限多的組合。
(新建一個文本文檔,複製下面的代碼,然後保存退出,把文件名後綴改成.html,用瀏覽器打開,就可以執行程序了)
代碼如下:
輸入數字:
<button>確定/<button>
<canvas>
function p(a,b,c,d){
var r=10;
var s=10;
var x0=700;
var y0=800;
var br=document.createElement("br");
document.body.appendChild(br);
var v=document.getElementById("myCanvas");
var cxt=v.getContext("2d");
cxt.fillRect(x0, y0, 1.5*r, 1.5*r);
//cxt.arc(x0, y0, r, 0, 2*Math.PI, true);
cxt.fill();
for(x1=-3;x1<4;x1++){
for(x2=-3;x2<4;x2++){
for(x3=-3;x3<4;x3++){
for(x4=-3;x4<4;x4++){
var x=x0
+(
((x1+4)%2-((x1%2)*parseInt(x1/2))*2 )*Math.sqrt(3)*a+
((x2+4)%2-((x2%2)*parseInt(x2/2))*2 )*Math.sqrt(3)*b+
((x3+4)%2-((x3%2)*parseInt(x3/2))*2 )*Math.sqrt(3)*c+
((x4+4)%2-((x4%2)*parseInt(x4/2))*2 )*Math.sqrt(3)*d
)*s;
var y=y0
+(
(x1-parseInt(x1/3)*2)*a+
(x2-parseInt(x2/3)*2)*b+
(x3-parseInt(x3/3)*2)*c+
(x4-parseInt(x4/3)*2)*d
)*s;
cxt.beginPath();
cxt.fillStyle=color16();
cxt.fillRect(x, y, 1.5*r, 1.5*r);
//cxt.arc(x, y, r, 0, 2*Math.PI, true);
cxt.closePath();
cxt.fill();
}
}
}
}
}
function color16(){
//十六進制顏色隨機
var r = Math.floor(Math.random()*256);
var g = Math.floor(Math.random()*256);
var b = Math.floor(Math.random()*256);
var color = '#'+r.toString(16)+g.toString(16)+b.toString(16);
return color;
}
閱讀更多 數學與編程 的文章