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

Project1

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

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

 关闭 [复制链接]

Lv1.梦旅人

风之塞尔达

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

贵宾

41
发表于 2009-10-6 19:22:07 | 只看该作者
ms很复杂哦... ...  
我看了很多布局... ms没有什么可以直接表明算法的(能力不够吧 - -),
n种布局,m中算法 -  -!

我觉得还是简单点就用水平对齐和垂直对齐的自动布局比较好...
首先由一个容器类, 它可以把它里面的控件在一个矩形类简单的进行诸如水平或垂直的布局
然后复杂的布局有这些简单的布局混合而成...
这样lz要写的代码就会简单而且少很多, 然后用户自己组合这些布局(也就是整体布局是用户自己给定的,而不需要我们在代码中里面判定...)或者你可以给定几个布局模板同样有水平或垂直布局的矩形块组成

如果要让一个矩形容器里面空间利用率高的话,lz可以参考 数据结构 中的 装箱问题
不过会比实际的装箱问题复杂的多(自己尝试写了下...个人感觉).. 因为控件的w,h都是未知的... 如能确定其一那就简单多了(我的意见是垂直布局时忽略水平..水平时忽略垂直)= =
这样虽然不会有智能的布局... 但是其实大多数布局都是如此.. 你可以尝试自己在Java的swing或者C#里面拖控件感受下
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

42
 楼主| 发表于 2009-10-6 19:29:08 | 只看该作者
控件的w,h都是已知的啊
还有我不太明白【垂直布局时忽略水平..水平时忽略垂直】是什么意思
需要的是水平有一定限度,比如600,垂直无限大(一根滚动条),但是为了美观,垂直尽量不要占用太大空间,不知道这是不是【忽略垂直】
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

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

贵宾

43
发表于 2009-10-6 19:38:56 | 只看该作者
本帖最后由 link006007 于 2009-10-6 19:43 编辑

我说的未知的意识是... 可变的 - -
也就是.. 如果在同一个容器中所有控件的w,h其中一个是一样的值,那么装箱问题就会简单很多
忽略是:
如果只是依照水平也就是w来布局,那就不要管h...等到在水平上的空间利用率达到最高,在看看如何处理h

装箱问题的代码多的是, 你可以吧每一行看做一个箱子,然后控件的w作为装入箱子的元素, 依照装箱的算法,那么你在水平上的空间利用率就会很高(最高可能没有...  ms主流的装箱算法都不能保证最优装载)
如果同时考虑垂直.. 那会很复杂..水平得到的控件排序基本不可用
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

44
 楼主| 发表于 2009-10-6 19:48:15 | 只看该作者
是这个意思啊……那貌似就就不上装箱算法了
那个已知的的意思是,虽然可变,但是只能在几个固定的长宽中取值

然后优先安排好几个大的之后,也许就能用27楼那个可配元·组合元·矩形评分法了?
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

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

贵宾

45
发表于 2009-10-6 23:27:00 | 只看该作者
不知道呃。。。
可配元什么的 还是问27楼的同学吧
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

电脑的智能是建立在人工智能只上的。
先考虑一下如果给你一大堆方块,在给你一个大的桌子
让你把这些方块摆进去
你会怎么摆?

通常我想方法的时候,就是在想,如果是叫我自己去做
而不是用电脑算的话,我会怎么做,这样得到的可以说是最简练的

好吧,就你这个叫我去做我会怎么做呢 ?

首先,面对一大堆的方块,我会首先把他们拼成一个较大的,再拼成更大的
再往里面放,如果放不进去,就考虑吧某一个组合好的方块换一个
组合方式,减少一点大小。再放进去。

如果叫你来摆,你觉得你会一看就知道怎么摆么。一个一个摆
的话人的智能会被加进去么 ? 
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
47
发表于 2009-10-7 10:08:58 | 只看该作者
根据图灵某理论,越高级的AI,空间复杂度越高,也就是代码很难写
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

48
 楼主| 发表于 2009-10-7 11:12:48 | 只看该作者
如果让我来摆呢,首先像上面说的固定好特定名字的和很大的在右下方之后,就拿那些小的往里塞,以美观为标准进行尝试,区别在于人类是一看就能知道美不美的,而电脑不知道……
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

49
发表于 2009-10-7 11:17:05 | 只看该作者
路过悄悄地说……难道你一定要算出(Math.sqrt(5) - 1)/2的结果到小数点后20位吗(⊙_⊙)?
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

50
 楼主| 发表于 2009-10-7 11:21:01 | 只看该作者
什么意思?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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