2013-03-11 110 views
0

我有一些P(x, y)其中x,y是实数。我想翻译和缩放一个从(0,0)(左上角)开始并延伸到点(1000, 1000)(右下角)的边界框(矩形)内的所有这些点。如何翻译和缩放边界框内的点?

为什么以下算法不会在该边界框中生成点?

for Point p in P: 
    max = greatest(p.x, p.y, max) 

scale = 1000/max 
for Point p in P: 
    p.x = (p.x - 500) * scale + 500 
    p.y = (p.y - 500) * scale + 500 

我担心的是,当p.xp.y是负数,这将无法正常工作。

我还想保持点的“形状”。

回答

2
  1. 查找所有yMin,yMax,xMin,xMax,xDelta = xMax-xMin和yDelta = yMax-yMin为您的一组点。
  2. 设置max =最大(xDelta,yDelta)。
  3. 的foreach点P组p.X =(p.X - XMIN)*规模和p.Y =(p.Y - YMIN)*规模
+0

谢谢!这是完美的。 – sdasdadas 2013-03-11 21:12:25