设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: zh99998
打印 上一主题 下一主题

[已经解决] 求一个自动排版算法

 关闭 [复制链接]

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

31
 楼主| 发表于 2009-10-5 21:01:29 | 只看该作者
是在做GUI库

LS的链接是Java语吗- -求能看懂的
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

32
发表于 2009-10-5 21:56:30 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

33
发表于 2009-10-5 23:20:58 | 只看该作者
算法的话差不多把 (当然里面残渣了很多UI类)
布局最多的就是Java的了。。
其他。net的ms本身几乎不开源
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

34
 楼主| 发表于 2009-10-6 06:06:29 | 只看该作者
如果间距固定值就很可能无结果...如果在一定范围内取间距值,那就用极大值深度优先搜索了
沉影不器 发表于 2009-10-5 21:56

间距吗……就设个最小间距10,大了不限
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
35
发表于 2009-10-6 09:45:59 | 只看该作者
最后在某一行放不下时,把总宽减元件宽和,再除以元件数减一就是列间距了…
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

36
 楼主| 发表于 2009-10-6 12:40:28 | 只看该作者
还是固定值会比较整齐一些吧


另外还有一个难题就是,怎么保证界面尽量的稳定,也就是尽量不要改动一点点数据就让整个界面布局大改变
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
37
发表于 2009-10-6 14:12:55 | 只看该作者
本帖最后由 九夜神尊 于 2009-10-6 14:15 编辑

我有一个新的想法,就是试排(适用于窗口较少)
按照数学组合的方式。按不同顺序依次试着排入窗口
(如果有10个窗口就可能要排1*2*3*4*5*6*7*8*9*10次)
然后再算总的面积!

虽然以上方法似乎乱扯,但是加入一些人工智能可以智能去除一些显然
不和逻辑的排法!
好!
以下写算法步骤
假设10个窗口
获取第一个排入顺序 顺序为 1 2 3 4 5 6 7 8 9  10
排入第一个 1
在第一个的右边排入第二个     ←-------------------------------                                   
分歧 如果可以放进去            |                                    |         
       在往右边排第三个 ————                        |   
    如果放不进去                                        |
       计算空出来的面积                                 |
          case 面积                                    |
           when  太大                                 |
              直接否认 前两位为 1 2 的窗体组合         |
           when  不算太大                             |
              在下方排入 下一个窗口(接着返回前面的步骤计算)              end   
排版结束
   计算空间使用率。(使用面积,和窗口面积之比)
        if  若还有很大的残留空间
            均匀分布每个窗体
          else
                 记录下使用率
            进行新的排版
          end
够智能化吧
只不过算的真的有一点点慢
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
38
发表于 2009-10-6 14:16:11 | 只看该作者
阶乘级的算法...这不就是枚举么= =
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
39
发表于 2009-10-6 14:32:25 | 只看该作者
当然可以根据需求调节
比如有的需求是,放进去就行。
  那样成功排入一次就结束运算
有的要限制空间使用率
  这样要多算一些
还有的呢要最佳使用率
  那就是要算完对比
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
609
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

40
 楼主| 发表于 2009-10-6 18:18:52 | 只看该作者
关于那个预知整体布局,可以这么来弄
首先,固定几个特定的控件,比如【名称】一定在左上角,【备注】一定在右下角,【属性】和【状态】一定在右上角,并且它们的大小也固定,那么,一旦出现带这些特定名字的,就直接安放上不用动了
然后,比较大的靠右靠下,小的靠左靠上,然后难点就是像截图里的那种【能力值变化】那种组合框怎么办,可能有两种排列,即2*2和四个排成一纵行(为了减小一些可能性,四个以上的时候禁用单行横向排)
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-21 19:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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