漂去漂来
发表于 2007-3-24 22:54
cn1h
发表于 2007-3-25 10:09
我说说我的想法,没有实践,只是构思了一下,所以不知道是否可行。
先说条件固定宽度W,我觉得这个问题不难解决,因为要求中只说了保证长宽比不变,所以只要将图片拼接成矩形,再对所有图片进行缩放就可以满足任意要求的宽度了。
现在问题就变成了如何将图片拼接成矩形。我觉得这个问题其实是多解的,任意多张图片通过缩放都可以拼成一个矩形。现在问题是为了让图片美观我们要做一下分类,根据长宽比把瘦高类图片分为一组(本例中的那颗树),把矮胖类图片分为一组(本例中的其他5张图片),然后尽量将瘦高类的图片横排,矮胖类的图片竖排,将他们同组的排列成矩形,这样分组的目的是让同一类图片尽力合理的占用空间。
剩下的问题是如何进行两组之间的组合,我觉得虽然题目中没有要求,但是这里出于美观考虑,应该设定一个规定参数,比如每行两张图片。如果没有规定可能会出现1张瘦高在上5张矮胖在下的情况,显然不够美观。瘦高类图片由于是横排,所以每张都占一个位置,矮胖类图片不管有多少,由于是竖排,所以在宽度上面只占一个位置。本例中瘦高类只有一颗树,所以正好满足每行两个的要求,也就出现了瘦高类和矮胖类横排的结果,如果瘦高类图片很多,比如有10张,可以根据规定参数(比如每行2个),进行切分,多出来的再自行分组对齐(矮胖瘦高的分组缩放规则不变),换行显示。同样在高度方面也应该有一个固定的参数,比如规定每列最多竖排3个图片,如果没有规定那本例来说,可能会出现5张图片横排在左,右边一颗大树。有了规定,多余的图片将自行分组对齐(矮胖瘦高规则不变),如本例3个一组排在大树左边,多于的应该和多于的竖高类图片再进行左右组合,但由于没有竖高类图片了,所以竖排在下,但是由于每行2个图片的规定,这次破例再对他们进行横排对齐。
总的来说将图片缩放成固定宽度以及将图片排列成矩形并不困难,问题是如何尽力美观的将他们排列起来,何所谓美观?就是尽量让图片间的占空间比例相等,而分组和固定参数是解决这个问题的方法。这里举两个极端的例子,假如图片是4个正方形,2x2排列无论如何缩放,在宽度和高度上都是相等的所以它是最完美的。另一个例子,一个横条和一个竖条排列,无论如何排列,占空间比例都不可能做到很好的均匀分配,所以最后必定是一个图片放大的都失真了,另外一个却缩小的看不见人了。
至于两个固定参数的选择我觉得和图片的比例分配有关系,应该也可以通过算法让计算机自己推断,这个现在还没想好,但是感觉如果不出现特别极端的情况,一般人工设定两个数值,比如本例的2和3,应该就可以解决日常问题了。
再有说一句题外话,假如既规定了最后的宽度又规定了高度,问题可就难解决多了,以前好像看到过类似的问题。
漂去漂来
发表于 2007-3-25 15:47
cn1h
发表于 2007-3-25 17:38
:D $支持$
还是楼上分析的专业,不知道算法里是否有个专门的领域研究排版的,估计报社什么的应该常用这些东西。另外小声问一句,楼主是学那门课遇到这个问题的?我在德国还没开始上专业课呢,不过也快了,不知道以后学习中是否也会碰到这些问题,德国大学好像专门有个算法课吧,是master的还是bachelor的?
漂去漂来
发表于 2007-3-25 18:54
漂去漂来
发表于 2007-3-25 19:56
jeanie
发表于 2007-3-25 23:17
楼主题目正确么??
你的答案是两张图片只能横排,
举个例子,比如k=2
w=10
两张图片都是长宽比都是7:2的话(length=7,width=2),
那么横排也排不开两张呀??????!
因为w=10
而7+7=14>10
怎么可能横排呀????
俺还是没明白!$郁闷$
漂去漂来
发表于 2007-3-26 00:10
漂去漂来
发表于 2007-3-26 01:32
jeanie
发表于 2007-3-26 07:37
原帖由 漂去漂来 于 2007-3-26 01:10 发表 http://www.dolc.de/forum/images/common/back.gif
W单位是pixel
另外,我写的也不是答案,只是我思考的一些结果。我也不知道答案是什么。
如果你设置w=500
4个横排的,
3个竖排的,
4个横排的你先选前4个图片,
3个竖排的你先选前3个图片,
然后你看结果.
如果
4个横排列的你选从第二个开始选4个,
3个竖排列的你选从第二个开始选3个,
你在看结果.
就这样一直到最后,
你看看什么乱七八糟的排列都能出来.
;) ;)
[ 本帖最后由 jeanie 于 2007-3-26 08:56 编辑 ]