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

Project1

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

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

 关闭 [复制链接]

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
11
发表于 2009-10-5 11:57:41 | 只看该作者
这如果作为算法题的话绝对是IOI水平的…我也像过枚举、贪心、搜索、动态规划但无一例外存在反例。或许把元件作为凸包用计算几何+floodfill可以实现吧?但这不是我擅长的…另外我越看这个越觉得像NP完全问题…
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

真实之终章

梦石
0
星屑
60
在线时间
48 小时
注册时间
2008-8-7
帖子
281
12
发表于 2009-10-5 12:02:41 | 只看该作者
这如果作为算法题的话绝对是IOI水平的…我也像过枚举、贪心、搜索、动态规划但无一例外存在反例。或许把元件作为凸包用计算几何+floodfill可以实现吧?但这不是我擅长的…另外我越看这个越觉得像NP完全问题… ...
小幽的马甲 发表于 2009-10-5 11:57

NOIP做多了吧……= =
玫瑰绽放,彼岸流殇。
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

13
 楼主| 发表于 2009-10-5 12:07:08 | 只看该作者
如果,可能描绘的框框的长宽是固定的几种,而不是随意的,会不会简单一些
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

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

贵宾

14
发表于 2009-10-5 12:11:31 | 只看该作者
本帖最后由 link006007 于 2009-10-5 12:15 编辑

伪代码。。
不知道如何用语言表达。。。。
效率很低的循环嵌套 - -。。。
效率应该在功能实现后在考虑。
def collisionDetect2D (obj1, obj2)
end

# objList 你所有要安放的控件的列表
def sort (objList, maxX, maxY)
    i = 0;
   while (i < objList.length)
        x = y = j = 0;
        # 和前面的进行碰撞检测
     while (j < i)
            # 假设当前的有效位置
        objList.setRect(x, y, objList.w, objList.h)
            if (collisionDetect2D(objList[j], objList))
                 #重设x,y  这里就是你排版的规则 如按y
                y = objList[j].y + objList[j].h + 间隙
           if (y > maxY)
                     y = 0;
                     #y满了就设置x坐标
              x = 。。。 。。。
           end
           else
                 j++;
           end
        end
        i++;
    end
end
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
15
发表于 2009-10-5 12:14:42 | 只看该作者
目的不是要尽可能拼成矩形么,所以元件之间的间距也是很重要的…
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

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

贵宾

16
发表于 2009-10-5 12:18:35 | 只看该作者
尽量排成矩形
你可以计算剩余间隙然后来平分间距
不过这样的话。。 你的间距就是一个不固定的有大有小  很难看 = =
除非你已开始就能预计出整体布局

这个应该去看看Java Swig的源代码
那里面有很多的控件布局方式 哈哈。。
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

17
 楼主| 发表于 2009-10-5 12:23:46 | 只看该作者
如果,可能描绘的框框的长宽是固定的几种,而不是随意的,会不会简单一些
zh99998 发表于 2009-10-5 12:07

使用固定的这一条件,能否先安排一些大的,比如截图中那竖着的两条先摆在右边,也算是一种预计整体布局?
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1322
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
18
发表于 2009-10-5 13:01:28 | 只看该作者
我倒是有一个好的不能再好的办法了

LZ是不是可以参考一下HTML语言呢?
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
19
发表于 2009-10-5 13:10:49 | 只看该作者
感觉固定大小其实没有什么实质作用…比如宽限定5,元件分别是[1,3]、[1,4]就排不了…能否排好关键是看最大公约数。剩下要看的就是如何尽可能拼成长方…元素之间的间隔是一个要好好利用的。其次也可以考虑把几个小的元件拼成一个大的元件,这样可能会方便些…
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

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

烫烫烫

20
 楼主| 发表于 2009-10-5 13:48:01 | 只看该作者
关于【固定大小】的意思是说,指定确定下几个长宽
[130,20]
[60,20]
[12,12]
[108,280]
[32,32]
这就是所有可能的框框的长宽,也就是说框框的长宽只能在这里面取值,这样是不是能简便一些


然后,小的拼大的在楼顶的问题中其实就有的
仔细看的话有这么一部分
"能力值变化" =>{"攻击力"=>[60,20],"防御力"=>[60,20],"精神力"=>[60,20],"敏捷性"=>[60,20]},"属性"=>[106,285]}

这四项数据是弄在一起的,那么只能有四种情况,横排四个,竖排四个,横2竖2
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-17 15:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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