ejsoon 发表于 2024-7-10 12:27:18

包含24個正方形和24個等腰直角三角形的方形对称图案

圖案上下、左右對稱,并且旋转90度不变,整体包含在一個大正方形中。

所用線段越少越好。对称探寻,老少皆宜;烧脑费眼,童叟无欺;数理推导,追本溯源;智能算法,所向披靡

ejsoon 发表于 2024-7-11 11:55:36

自己构造了一個

<p>
<canvas id="grid" width="242" height="242"></canvas>
<script type="text/javascript">
function draw(){
    var canvas = document.getElementById('grid');
    if(!canvas.getContext) return;
    var ctx = canvas.getContext("2d");
   //绘制网格点阵
    ctx.translate(121, 121) ; //
for (var x =-6; x <7; x++) {
      for (var y =-6; y <7; y++) {
      ctx.lineWidth = 0.5;
      ctx.beginPath();
      // 绘制水平线段
      let t=20;
      ctx.moveTo(3+x * t , y *t);
      ctx.lineTo(x * t-3, y *t);
      // 绘制垂直线段
      ctx.moveTo(x * t, y * t +3);
      ctx.lineTo(x * t, y *t -3);
      ctx.strokeStyle = 'Black';
      ctx.stroke();
      }
    }

//绘制网格
    {
    let s=5;
    let t=20
    let r=6*t
    ctx.beginPath();
    ctx.strokeStyle = 'Blue';
    ctx.lineWidth = 2.5;
    ctx.rect(-r, -r, 2*r, 2*r);
   
    ctx.rect(t-r, t-r, 10*t, 10*t);
   
    ctx.moveTo(-r, -2*t);
    ctx.lineTo(r, -2*t);
    ctx.lineTo(2*t, -r);
    ctx.lineTo(2*t, r);
    ctx.lineTo(r, 2*t);
    ctx.lineTo(-r, 2*t);
    ctx.lineTo(-2*t, r);
    ctx.lineTo(-2*t, -r);
    ctx.lineTo(-r, -2*t);
    ctx.moveTo(-2*t, 0);
    ctx.lineTo(0, -2*t);
    ctx.lineTo(2*t,0);
    ctx.lineTo(0, 2*t);
    ctx.lineTo(-2*t, 0);
    ctx.stroke();
   }
}
draw();
</script>
</p>
線段20條,12x12网格(13x13点阵)。

ejsoon 发表于 2024-7-11 12:03:59

<p>
<canvas id="grid1" width="122" height="122"></canvas>
<script type="text/javascript">
function draw(){
    var canvas = document.getElementById('grid1');
    if(!canvas.getContext) return;
    var ctx = canvas.getContext("2d");
   //绘制网格点阵
    ctx.translate(61, 61);//移动原点
    let t=20;//网格单元格大小
for (var x =-3; x <4; x++) {
      for (var y =-3; y <4; y++) {
      ctx.lineWidth = 0.5;
      ctx.beginPath();
      // 绘制水平线段
      ctx.moveTo(3+x * t , y *t);
      ctx.lineTo(-3+x * t, y *t);
      // 绘制垂直线段
      ctx.moveTo(x * t, y * t +3);
      ctx.lineTo(x * t, y *t -3);
      ctx.strokeStyle = 'Black';
      ctx.stroke();
      }
    }

//绘制图案
    {
    let r=3*t;//网格右边界
    ctx.beginPath();
    ctx.strokeStyle = 'Blue';
    ctx.lineWidth = 2.5;
    ctx.rect(-r, -r, 2*r, 2*r); //外围正方形
   
    ctx.rect(t-r, t-r, 4*t, 4*t); //二环
    //大井字形
    ctx.moveTo(-r, -t);
    ctx.lineTo(r, -t);
    ctx.moveTo(-r, t);
    ctx.lineTo(r, t);
    ctx.moveTo(-t, -r);
    ctx.lineTo(-t, r);
    ctx.moveTo(t, -r);
    ctx.lineTo(t, r);
    //中心斜方
    ctx.moveTo(0, t-r);
    ctx.lineTo(r-t, 0);
    ctx.lineTo(0, r-t);
    ctx.lineTo(t-r, 0);
    ctx.lineTo(0, t-r);
    //四条单独斜线
    ctx.moveTo(t-r, -t);
    ctx.lineTo(-t, t-r);
    ctx.moveTo(t, t-r);
    ctx.lineTo(r-t, -t)
    ctx.moveTo(r-t, t);
    ctx.lineTo(t, r-t);
    ctx.moveTo(-t, r-t);
    ctx.lineTo(t-r, t);
    ctx.stroke();
   }
}
draw();
</script>
</p>
線段20條,6X6网格(7x7点阵)

gxqcn 发表于 2024-7-11 16:03:34

ejsoon 发表于 2024-7-11 17:48:19

<p>
<canvas id="L18H3+3" width="202" height="202"></canvas>
<script type="text/javascript">
function draw(){
    var canvas = document.getElementById('L18H3+3');
    if(!canvas.getContext) return;
    var ctx = canvas.getContext("2d");
   //绘制网格点阵
ctx.translate(101, 101) ;
for (var x =-5; x <6; x++) {
      for (var y =-5; y <6; y++) {
      ctx.lineWidth = 0.5;
      ctx.beginPath();
      // 绘制水平线段
      let t=20;
      ctx.moveTo(x * t-3, y *t);
      ctx.lineTo(3+x * t, y *t);
      // 绘制垂直线段
      ctx.moveTo(x * t, y * t +3);
      ctx.lineTo(x * t, y *t-3);
      ctx.strokeStyle = 'Black';
      ctx.stroke();
      }
    }
//绘制图案
    {
    let t=20;//网格单元格大小
    let r=5*t;//网格右边界
    let s=-r;//左边界
    let d=2*t;//斜方半径
    ctx.beginPath();
    ctx.strokeStyle = 'Blue';
    ctx.lineWidth = 2.5;
    ctx.rect(-r, -r, 2*r, 2*r); //外围正方形
   
    ctx.rect(-2*t, -2*t, 4*t, 4*t); //二环
    //大井字形
    ctx.moveTo(s, s+2*t);
    ctx.lineTo(r, s+2*t);
    ctx.moveTo(s, r-2*t);
    ctx.lineTo(r, r-2*t);
    ctx.moveTo(s+2*t, s);
    ctx.lineTo(s+2*t, r);
    ctx.moveTo(r-2*t, s);
    ctx.lineTo(r-2*t, r);
    //大十字
    ctx.moveTo(s, 0);
    ctx.lineTo(r, 0);
    ctx.moveTo(0, s);
    ctx.lineTo(0, r);
    //中心斜方
    ctx.moveTo(-d, 0);
    ctx.lineTo(0, -d);
    ctx.lineTo(d, 0);
    ctx.lineTo(0, d);
    ctx.lineTo(-d, 0);
    //四条单独斜线
    ctx.moveTo(s, -t);
    ctx.lineTo(-t, s);
    ctx.moveTo(t, s);
    ctx.lineTo(r, -t)
    ctx.moveTo(r, t);
    ctx.lineTo(t, r);
    ctx.moveTo(-t, r);
    ctx.lineTo(s, t);
    ctx.stroke();
   }
}
draw();
</script>
</p>
由樓上高手啟發的。線段22條,网格10x10(点阵11x11)。

ejsoon 发表于 2024-7-12 21:32:15

不知是否還有其它的圖形符合題目要求?

不知電腦是否能夠算出所有符合題意的圖形?

(聯想到凸五邊形,最終是用電腦證明的,只有十五種)

ejsoon 发表于 2024-7-13 18:37:56

<p>
<canvas id="ejsoon4" width="250" height="250"></canvas>
<script type="text/javascript">
function draw(){
    var canvas = document.getElementById('ejsoon4');
    if(!canvas.getContext) return;
    var ctx = canvas.getContext("2d");
   //绘制网格点阵   
for (var x =0; x <13; x++) {
      for (var y =0; y <13; y++) {
      ctx.lineWidth = 0.5;
      ctx.beginPath();
      // 绘制水平线段
      let t=20;
      ctx.moveTo(3+x * t , 5+y *t);
      ctx.lineTo(7+x * t, 5+y *t);
      // 绘制垂直线段
      ctx.moveTo(5+x * t, y * t +3);
      ctx.lineTo(5+x * t, y *t + 7);
      ctx.strokeStyle = 'Black';
      ctx.stroke();
      }
    }

//绘制图案
    {
    let s=5;
    let t=20;
    let r=s+12*t;
    ctx.beginPath();
    ctx.strokeStyle = 'Blue';
    ctx.lineWidth = 2.5;
    ctx.rect(s, s, 12*t, 12*t);//外方
   
    //大井字形
    ctx.moveTo(s, s+4*t);
    ctx.lineTo(r,s+4*t);
    ctx.moveTo(s, s+8*t);
    ctx.lineTo(r, s+8*t);
    ctx.moveTo(s+4*t, s);
    ctx.lineTo(s+4*t, r);
    ctx.moveTo(s+8*t,s);
    ctx.lineTo(s+8*t,r);
    //大斜方
    ctx.moveTo(s+2*t, s+6*t)
    ctx.lineTo(s+6*t, s+2*t);
    ctx.lineTo(s+10*t, s+6*t);
    ctx.lineTo(s+6*t, s+10*t);
    ctx.lineTo(s+2*t, s+6*t);
    // 小斜方
    ctx.moveTo(s+4*t, s+6*t)
    ctx.lineTo(s+6*t, s+4*t);
    ctx.lineTo(s+8*t, s+6*t);
    ctx.lineTo(s+6*t,s+8*t);
    ctx.lineTo(s+4*t,s+6*t);
    //中心X
    ctx.moveTo(s+4*t, s+4*t)
    ctx.lineTo(s+8*t, s+8*t);
   ctx.moveTo(s+4*t, s+8*t)
    ctx.lineTo(s+8*t, s+4*t);
    ctx.stroke();
   }
}
draw();
</script>
</p>
線段18條,网格12x12(点阵13X13)

ejsoon 发表于 2024-7-14 15:50:45

<p>
<canvas id="ejsoon5" width="170" height="170"></canvas>
<script type="text/javascript">
function draw(){
    var canvas = document.getElementById('ejsoon5');
    if(!canvas.getContext) return;
    var ctx = canvas.getContext("2d");
   //绘制网格点阵   
for (var x =0; x <17; x++) {
      for (var y =0; y <17; y++) {
      ctx.lineWidth = 0.5;
      ctx.beginPath();
      // 绘制水平线段
      let t=20;
      ctx.moveTo(3+x * t , 5+y *t);
      ctx.lineTo(7+x * t, 5+y *t);
      // 绘制垂直线段
      ctx.moveTo(5+x * t, y * t +3);
      ctx.lineTo(5+x * t, y *t + 7);
      ctx.strokeStyle = 'Black';
      ctx.stroke();
      }
    }

//绘制图案
    {
    let s=5;
    let t=20;
    let r=s+8*t;
    ctx.beginPath();
    ctx.strokeStyle = 'Blue';
    ctx.lineWidth = 2.5;
    ctx.rect(s, s, 8*t, 8*t);//外方
    ctx.rect(s+3*t, s+3*t, 2*t, 2*t);//内方
   
    //大井字形
    ctx.moveTo(s, s+2*t);
    ctx.lineTo(r,s+2*t);
    ctx.moveTo(s, s+6*t);
    ctx.lineTo(r, s+6*t);
    ctx.moveTo(s+2*t, s);
    ctx.lineTo(s+2*t, r);
    ctx.moveTo(s+6*t,s);
    ctx.lineTo(s+6*t,r);
    //断十字线
    ctx.moveTo(s, s+4*t);
    ctx.lineTo(s+3*t, s+4*t);
    ctx.moveTo(s+5*t, s+4*t);
    ctx.lineTo(r, s+4*t);
    ctx.moveTo(s+4*t, s);
    ctx.lineTo(s+4*t, s+3*t);
    ctx.moveTo(s+4*t,s+5*t);
    ctx.lineTo(s+4*t,r);
    //大斜方
    ctx.moveTo(s+2*t, s+4*t)
    ctx.lineTo(s+4*t, s+2*t);
    ctx.lineTo(s+6*t, s+4*t);
    ctx.lineTo(s+4*t, s+6*t);
    ctx.lineTo(s+2*t, s+4*t);
      //中心X
    ctx.moveTo(s+3*t, s+3*t)
    ctx.lineTo(s+5*t, s+5*t);
   ctx.moveTo(s+3*t, s+5*t)
    ctx.lineTo(s+5*t, s+3*t);
    ctx.stroke();
   }
}
draw();
</script>
</p>
線段22個条,8x8网格(9X9点阵)

gxqcn 发表于 2024-7-14 23:52:48

新增要求:所有碎线段端点的坐标必须为整数,即均位于格点上。
并记格点间最小间距为单位长度 \(1\) 。

昨天周六,到中科大跟儿子汇合,小游合肥,
今早在宾馆构造出了一个新的,晚上在高铁 G3178 上又得到一个,
当时没带电脑,所以留待返家后再发帖。
可惜,“宾馆版”与楼主现在的3#的一致(以前怎么没注意到?);
所以,现仅发布“高铁版”,如下:



关于点:
上图最小可覆盖格点矩阵大小为 \(7\times7\),

关于线:
线段 \(24\) 条,含 \(5\) 种长度规格:\(1(*4), \sqrt2(*4), 2(*4), 2\sqrt2(*4), 6(*8)\);

其中,
斜整线段 \(8\) 条,仅 \(2\) 种长度规格:\(\sqrt2(*4),2\sqrt2(*4)\);

以上描述中,括号中的数字为前面数字对应的数目。

gxqcn 发表于 2024-7-15 08:01:54

在引入“格点”要求后,就可以多维度量化一个结果的优劣,比如上面的:


[*]最小可覆盖格点矩阵:\(7\times7\)
[*]格点利用率:\(\dfrac{32}{7\times7} = 65.31\%\)
[*]端点重复利用率:\(\dfrac{4\times24 +3\times24}{32} =\dfrac{21}{4}=525\%\)
[*]长度重复利用率:\(\dfrac{\left(1\times8+\sqrt2\times1+2\times9+2\sqrt2\times1+4\times4+6\times1\right)\times4+\left(1\times2+\sqrt2\right)\times20+\left(\sqrt2\times2+2\right)\times4}{1\times24+\sqrt2\times12+2\times12}=\dfrac{60+10\sqrt2}{12+3\sqrt2} =456.47\%\)
[*]面积重复利用率:\(\dfrac{\left(1\times8+2\times1+4\times9+8\times1+16\times4+36\times1\right)+\left(0.5\times20+2\times4\right)}{6\times6} =\dfrac{50}{9}=555.56\%\)


显然,利用率越高越好。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 包含24個正方形和24個等腰直角三角形的方形对称图案