找回密码
 欢迎注册
查看: 166392|回复: 275

[讨论] 果树种植最优解精美图形作法探讨

  [复制链接]
发表于 2012-1-13 20:00:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
2年前,数学爱好者们在 mathe的领导下完成了 20棵树种植问题
emath如此伟大的壮举,如此巨大的革命成果 理应 让坛子外面更广大的人民群众所享有。
而要让更多的人欣赏此题的话,精美的图片展示应该是必要的。

目前本人尚有一点时间,打算完成这“赞”字 ,“叹”字,“美”字,的最后一捺。

但由于本人一直没好好学高等几何,也没完整的参与问题的讨论,所以肯定是有困难的,
但比起问题本身的解决来说,我这点工作根本算不了什么。

特开此贴。后面会有很多问题要请教mathe的。

看花容易绣花难,
预期在这过程中,
我能吸收到解决本题的所有精华。。。。

站内链接:
果树问题讨论
20棵树最优解计算
果树问题最优解大全
果树种植最优解精美图形作法探讨
植树问题王兴君解
植树问题蔡上人解


先睹为快:










可以直接看 #28
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-1-13 20:25:23 | 显示全部楼层
目前mathe的代码输出格式是:

  1. print(ADGJBEIJCDHKAFIKCEGLBFHLCJMODINODLMPAHNPGKOPBGMQFJNQAEOQEHMRBKNRCFPRILQRABCSDEFSGHITJKLTMNST);
  2. solve([+1+3*T_Y+1*T_Y*T_Y,-3/5+1*R_Y-2/5*T_Y,-4/5+1*R_X-1/5*T_Y,-3+1*H_X-1*T_Y,-4+1*P_X-1*T_Y,+1+1*S_X,-2+1*Q_X-1*T_Y,+2+1*O_X+1*T_Y,-1+1*L_Y-1*T_Y,+1+1*P_Y,-3+1*M_Y-2*T_Y,+1+1*D_Y+1*T_Y,-2+1*S_Y-1*T_Y,+1*G_Y-1*T_Y,-1+1*Q_Y,+1+1*N_Y,-2+1*C_Y-1*T_Y,-2+1*B_Y-1*T_Y,-1+1*O_Y,+1+1*H_Y,+2+1*C_X+1*T_Y,-2+1*N_X-1*T_Y,-1+1*L_X,-1+1*T_X,+2+1*M_X+1*T_Y,-2+1*F_X-1*T_Y],[T_Y,R_Y,R_X,H_X,P_X,S_X,Q_X,O_X,L_Y,P_Y,M_Y,D_Y,S_Y,G_Y,Q_Y,N_Y,C_Y,B_Y,O_Y,H_Y,C_X,N_X,L_X,T_X,M_X,F_X]);
  3. print("A=(1,0,0) B_x=0 D=(1,D_y,0) E_x=0 E_y=1 F_y=0 G=(1,G_y,0) I_x=0 I_y=0 J=(0,1,0) K_x=1 K_y=0 ");
复制代码
按照原型,可以认为:
输出解的描述由三大部分组成:

1) 点与点的集合关系,即四元集合:
如上:ADGJBEIJCDHKAFIKCEGLBFHLCJMODINODLMPAHNPGKOPBGMQFJNQAEOQEHMRBKNRCFPRILQRABCSDEFSGHITJKLTMNST
2)点与线的结合关系,即线性方程组
如上:就是solve函数里面的。
3)预设的几个点的坐标形式该如何输出?
   如上: print("A=(1,0,0) B_x=0 D=(1,D_y,0) E_x=0 E_y=1 F_y=0 G=(1,G_y,0) I_x=0 I_y=0 J=(0,1,0) K_x=1 K_y=0 ");

要不要 先探讨一下输出解的格式的 标准化?
让输出结果的表达 对计算机语言更加的中性化,对人更加的友好。
以后也就方便把问题推广一般化,比如,n棵树,每行m棵。。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-1-13 20:41:45 | 显示全部楼层
2# wayne
我的工作流程:
1)稍稍改动mathe的源程序,将数据的输出定制成方便Mathematica导入的格式
2)Mathematica作图。程序要具有普适性,不能有人工的介入,方便其他数据图案的批量生成。
3)仿射变换。仅根据原始数据,作出来的图形不一定美观清晰,需要做变换。
        这个是工作的重点,也是难点,办不到的话,批量产生精美图片也就无从谈起了。
4) 将公布14-20棵树每行4棵的所有最优解的美观的图案
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-1-13 20:51:48 | 显示全部楼层
接下来,我先做一下试探性的工作,以上面的例子数据作分析:
暂时将格式转换成:
  1. ADGJBEIJCDHKAFIKCEGLBFHLCJMODINODLMPAHNPGKOPBGMQFJNQAEOQEHMRBKNRCFPRILQRABCSDEFSGHITJKLTMNST
  2. +1+3*Ty+1*Ty*Ty,-3/5+1*Ry-2/5*Ty,-4/5+1*Rx-1/5*Ty,-3+1*Hx-1*Ty,-4+1*Px-1*Ty,+1+1*Sx,-2+1*Qx-1*Ty,+2+1*Ox+1*Ty,-1+1*Ly-1*Ty,+1+1*Py,-3+1*My-2*Ty,+1+1*Dy+1*Ty,-2+1*Sy-1*Ty,+1*Gy-1*Ty,-1+1*Qy,+1+1*Ny,-2+1*Cy-1*Ty,-2+1*By-1*Ty,-1+1*Oy,+1+1*Hy,+2+1*Cx+1*Ty,-2+1*Nx-1*Ty,-1+1*Lx,-1+1*Tx,+2+1*Mx+1*Ty,-2+1*Fx-1*Ty
  3. Ty,Ry,Rx,Hx,Px,Sx,Qx,Ox,Ly,Py,My,Dy,Sy,Gy,Qy,Ny,Cy,By,Oy,Hy,Cx,Nx,Lx,Tx,Mx,Fx
  4. Ax=1,Ay=0,Az=0,Bx=0,Bz=1,Dx=1,Dz=0,Ex=0,Ez=1,Ey=1,Ez=1,Fy=0,Fz=1,Gx=1,Gz=0,Ix=0,Iz=1,Iy=0,Iz=1,Jx=0,Jy=1,Jz=0,Kx=1,Kz=1,Ky=0,Kz=1,
复制代码
规定缺失的z坐标为1,
定制后的C++代码
solve8.cpp (29.33 KB, 下载次数: 2)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-1-14 09:28:29 | 显示全部楼层
Mathematica代码出来了,加了注释:

  1. Clear["Global`*x"]; Clear["Global`*y"];Clear["Global`*z"];
  2. (*读入数据*)
  3. ans = Flatten[Import["G:/solve8/ans.txt", "Data"]];
  4. chars = Union[Characters[ans[[1]]]];
  5. (*载入预设坐标的值*)
  6. ToExpression[StringSplit[ans[[4]], ","]];
  7. (*计算出齐次坐标*)
  8. sol = Solve[ToExpression[StringSplit[ans[[2]], ","]] == 0];
  9. tmp1 = {Symbol[# <> "x"], Symbol[# <> "y"], Symbol[# <> "z"]} & /@ chars /. sol[[1]] /. Map[Rule[#, 1] &, DeleteCases[Sort[Symbol[# <> "z"] & /@ chars], _Integer]];
  10. (*做随机仿射变换,并转换成笛卡尔坐标*)
  11. rm = RandomReal[10, {3, 3}];
  12. tmp = Table[ii[[1 ;; 2]]/ii[[3]], {ii, tmp1.rm}];
  13. (*代入到线段的各个端点求出坐标值*)
  14. lines = Partition[Table[tmp[[ii]], {ii, ToCharacterCode[ans[[1]]] - 64}], 4];
  15. (*画图*)
  16. Graphics[{Line[lines], Table[Text[Style[chars[[ii]], Red, 24], tmp[[ii]] + .031], {ii, 20}], Blue, PointSize[.01], Point[tmp]}, AspectRatio -> 1]
复制代码
例子数据我也附带上来,方便感兴趣的人亲自执行 ,见: ans.txt (613 Bytes, 下载次数: 2)


计算出在mathe规范的空间下各个点的齐次坐标为:
A        {1,0,0}
B        {0,1/2 (1-Sqrt[5]),1}
C        {1/2 (-1+Sqrt[5]),1/2 (1-Sqrt[5]),1}
D        {1,1/2 (1+Sqrt[5]),0}
E        {0,1,1}
F        {1/2 (1-Sqrt[5]),0,1}
G        {1,1/2 (-3-Sqrt[5]),0}
H        {1/2 (3-Sqrt[5]),-1,1}
I        {0,0,1}
J        {0,1,0}
K        {1,0,1}
L        {1,1/2 (-1-Sqrt[5]),1}
M        {1/2 (-1+Sqrt[5]),-Sqrt[5],1}
N        {1/2 (1-Sqrt[5]),-1,1}
O        {1/2 (-1+Sqrt[5]),1,1}
P        {1/2 (5-Sqrt[5]),-1,1}
Q        {1/2 (1-Sqrt[5]),1,1}
R        {1/10 (5-Sqrt[5]),-(1/Sqrt[5]),1}
S        {-1,1/2 (1-Sqrt[5]),1}
T        {1,1/2 (-3-Sqrt[5]),1}

我们不妨先将这些点所在的平面,即mathe解题时所规范的空间,称作 mathe的alpha 解空间。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-1-14 09:43:52 | 显示全部楼层
将mathe的alpha 解空间做变换:
{{80, 80, 84}, {50, 80, 97}, {12, 50, 34}}
得到:
20.png
若变换是{{6.59076, 6.55043, 4.11067}, {4.97772, 1.15536, 2.79758}, {4.48417, 9.34313, 9.79811}},得到
20.png

评分

参与人数 1金币 +2 贡献 +2 经验 +2 收起 理由
数学星空 + 2 + 2 + 2 两个图都很完美!选取具有数学几何美的变换矩 ...

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-1-14 10:34:57 | 显示全部楼层
现在一切就绪,问题来了,也是问题的中心,
由给定点集构成的图形,该如何选取祂的变换矩阵,使得变换后的图形看上去更美?

这个时候,由于涉及到人的感官问题,因而无需严格意义的精确,模糊即可,
我认为,变换后的矩阵至少同时满足两个性质才叫美:
1)对称才美。
     至少有一个近似的对称轴。对称轴越多就越美。
2)紧凑均匀才叫美。
     数据坐标点的绝对的大小无关紧要,但要相对差不多,即分散均匀,不能扎堆。

在对于美的评价上,大家怎么看,需要补充的吗,
我打算2天后才继续
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-1-14 12:26:51 | 显示全部楼层
对于数学几何美的定义,我赞同楼上的观点:
1)对称才美。
     至少有一个近似的对称轴。对称轴越多就越美。
2)紧凑均匀才叫美。
     数据坐标点的绝对的大小无关紧要,但要相对差不多,即分散均匀,不能扎堆。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-1-14 12:37:39 | 显示全部楼层
本帖最后由 数学星空 于 2012-1-14 12:39 编辑

数学美的主要特征:
简洁而精确,对称而和谐,普适而深刻!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-1-14 13:05:03 | 显示全部楼层
6# wayne
将第二个图形的变换矩阵稍稍修正,得到很不错的图形:
由{{6.59076, 6.55043, 4.11067}, {4.97772, 1.15536, 2.79758}, {4.48417, 9.34313, 9.79811}}
微调成
{{6, 6, 3}, {6, 1, 3}, {4, 4, 9}}
20-23.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-19 17:35 , Processed in 0.186278 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表