ejsoon 发表于 2024-7-19 09:46:42

mathe 发表于 2024-7-19 08:57
搜索到了26边以内,并且按胡的要求做了部分分类(类型,边数,顶点数)
自由度计算起来比较麻烦(需要判断 ...

同時對於41#的「大斜方」類別,是否可能找到更多結果?

gxqcn 发表于 2024-7-19 09:58:40

背景底板小方块,称为网格;网格顶点,称为格点。
显然,在一维尺度上计数,后者比前者大1.


可以只考虑网格数在 12x12 以内(包含)的情形。
另外,是否有奇数网格的解?

mathe 发表于 2024-7-19 12:36:19

ejsoon 发表于 2024-7-18 19:16
此結果非常強大!可能六乘六方、八乘八方已經窮舉完了。

如果要往十乘十、十二乘十二,可能需要加上兩種 ...

自由度判定实际上就是解方程过程。
图上每个点的坐标作为变量,先考虑对称性,可以减少部分变量,余下应该略大于总数的1/8.也可以选择每条直线作为一个变量。
然后根据正方形和等腰三角形条件,可以得出某些方程

mathe 发表于 2024-7-19 12:52:50


如图,根据对称性只需要设置三个变量a,b,c
然后根据第三行第二列的正方形条件得到1-a-a=a,也就是a=1/3.
然后其它相等条件会发现都已经不需要。所以留下两个变量b,c,自由度为2。这个图自由度应该算挺高的

ejsoon 发表于 2024-7-19 18:52:37

本帖最后由 ejsoon 于 2024-7-19 18:54 编辑

mathe 发表于 2024-7-19 12:52
如图,根据对称性只需要设置三个变量a,b,c
然后根据第三行第二列的正方形条件得到1-a-a=a,也就是a=1/3.
然 ...

你們說的「自由度」跟我想的不太一樣。

我是希望當窮舉完六乘六之後,在檢索八乘八時,不要出現拉伸型的重覆。

比如:



這張圖明顯就是下面這張拉伸而來:



而當我們拿到小的圖時,我們不必判定它的自由度,而是把它的數據放進一個map中。

當我們檢索大圖時,如果發現它在第二,第六行及列都沒有交點,則它很可能是由一個自由度高的圖拉伸而來。

則這時我們再把這個大圖坍縮之後,匹配下之前保存的map,如果能匹配到,就證實是一個重覆生成的圖。

如果加了「排重」,說不定就能把十乘十,十二乘十二的也窮舉出來。

mathe 发表于 2024-7-19 23:06:37

gxqcn 发表于 2024-7-19 09:58
背景底板小方块,称为网格;网格顶点,称为格点。
显然,在一维尺度上计数,后者比前者大1.

是的, 只有在坐标轴上没有交点的A类图案才可能存在于奇数网格。
例如图案A24L40.120017ff.svg具有2个自由度,可以由8X8调整为7X7的解


类似地,还有A24L48.34000012ff.svg, A24L48.48000012ff.svg 也可以由8X8调整为7X7图案。

hujunhua 发表于 2024-7-20 12:34:47

3个自由度的图案

9X9网格

hujunhua 发表于 2024-7-20 18:02:41

最小6X6网格

如图1(鼠标悬停可显示图号),A类图案最小网格为7X7,所以6X6以下的网格上只能存在B类或者C类图案。<br>
B类和C类图案只能存在于偶数网格中,如果在6X6以下(不含)的网格中存在解,那么只能是4X4网格。
<p>
<canvas id="hujunhua2" width="250" height="150"></canvas>
<script type="text/javascript">
function draw(){
    var canvas = document.getElementById('hujunhua2');
    if(!canvas.getContext) return;
    var ctx = canvas.getContext("2d");
   //绘制网格点阵   
for (var x =0; x <13; x++) {
      for (var y =0; y <8; 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();
      }
    }

//绘制l图案
    {
    let s=5;
    let t=20;
   {//绘制左图
    ctx.beginPath();
    ctx.strokeStyle = 'Blue';
    ctx.lineWidth = 2.5;
    ctx.rect(s, s, 7*t, 7*t);//外方
    ctx.rect(s+t, s+t, 5*t, 5*t);//内方
    ctx.rect(s+2*t, s+2*t, 3*t, 3*t);//内方
    ctx.rect(s+3*t, s+3*t, t, t);//内方
      }
      {//绘制右图
    let l=s+8*t
    let r=s+12*t
    let u=s+3*t
    ctx.rect(l, u, 4*t, 4*t);//外方
    ctx.rect(l+t, u+t, 2*t, 2*t);//内方
    //外斜方
    ctx.moveTo(l, u+2*t);
    ctx.lineTo(l+2*t,u);
    ctx.lineTo(r, u+2*t);
    ctx.lineTo(l+2*t, u+4*t);
    ctx.lineTo(l, u+2*t);
    //内斜方
    ctx.moveTo(l+t, u+2*t);
    ctx.lineTo(l+2*t, u+t);
    ctx.lineTo(r-t, u+2*t);
    ctx.lineTo(l+2*t,u+3*t);
    ctx.lineTo(l+t, u+2*t);
       }
    ctx.stroke();
   }
}
draw();
</script>
</p><p>
             图1            图2
<br>
如图2,4X4网格上只可能存在C类图案,4个中心正方形只此一种。<br>
剩下16线条分为红、蓝、绿三组,如图3。每组有连与不连两种选择,共有8种图案。<br>

除去全连与全不连两个图案显然不对的,还剩6种,不难穷举验证都不符合要求,见图4。<br>

</p>
                     

ejsoon 发表于 2024-7-20 20:07:16

mathe 发表于 2024-7-19 08:57
搜索到了26边以内,并且按胡的要求做了部分分类(类型,边数,顶点数)
自由度计算起来比较麻烦(需要判断 ...

如果增加以下限制條件:

排除過短的線
所有元素都必須相連
只用16條線

當前算法是否能算12網格?

mathe 发表于 2024-7-21 06:41:14

试了一下让计算机先预填4个正向正方形,搜索所有的A型图案,对于8*8很快就可以结束。
但是处理10*10,在笔记本上运行一个晚上还没有结束。现在只找出一个8*8以外的A型图
页: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14
查看完整版本: 包含24個正方形和24個等腰直角三角形的方形对称图案