1
diib 2013-02-18 11:14:08 +08:00
楼主没说清楚?
看意思是要将若干矢量图形缩放到窗口? 这个圆形方形三角形没关系吧。计算所有图形的总的矩形边界,然后根据这个边界矩形的形状和窗口矩形做比例,这个比例就应该是你要的缩放因子。 |
2
platoo OP @diib 感谢!是2D画图。是这样的,有一个500 * 500的screen,和若干圆心不同的圆。要求所有的圆都要在窗体内完整显示出来,现在我能想通的是把圆心移动到screen的坐标原点 250 * 250,然后遍历多个圆,算出(coordinate + radius) / 500 的最大值,然后以此来计算所有圆使用的scale,也就是缩放因子。
没明白的地方是: 如果有一个圆,它的位置在screen的最边上,比如说450 * 450,那么算出来的缩放因子是不是对它不适用?他还是会被画出screen呢? |
3
diib 2013-02-18 14:23:02 +08:00
@platoo
好像明白了,意思就是有若干圆c1,c2....cn,圆心都在 rect1里边,但是半径r1,r2....rn不定,需要求出一个缩放因子s,要求:所有圆心位置保持不动,半径按照s进行缩放,使所有圆能完整的包含在rect1里边? 如果是这样的话,你的算法是不成的,不能移动圆心位置。以圆c1为例子,要根据实际,求圆心(x1,y1)到窗口的4个边距的最小值l1,然后l1/r1得到c1的缩放因子s1。 然后遍历所有圆,得到最小的s1就是你要的因子。 -------------------------- 如果不是上面那样,请参考我回复的第一条。 |
4
diib 2013-02-18 14:24:59 +08:00 1
优化什么的就不讲了,只是提供思路。
|
5
ch_linghu 2013-02-26 10:02:48 +08:00
我感觉可以通过计算所有圆占用的总的宽和高,形成一个外切矩形,然后将这个矩形等比例缩放到指定大小即可。这个比例就是所求比例。
|
6
platoo OP @diib 我实现的方法是这样的:
考虑到上、下、左、右四个方向,比较 x + r, abs(x - r), y + r, abs(y - r)的最大值,作为x、y轴的最大偏移距离。也就是说存在最大圆a,xa和ya,求出factor = xa / width(screen的半径),然后根据factor求出所有圆,缩放后的x轴,y轴,半径。 之后进行world coordinate 到 screen coordinate的转换。 从结果上看,是符合要求的。 |
7
diib 2013-02-27 09:14:50 +08:00 via Android
看了你的做法才明白你的需求就是地图缩放中的全图显示问题。。。解决了就好。
|
9
diib 2013-02-28 07:34:33 +08:00 via Android
如果是全图显示,可以参考1楼和5楼。
你的算法是外切矩形法的变形。 不用客气。^_^ |