2013-03-11 38 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