2012-10-25 60 views
2

我寫了一個gui,用戶在(640x480)窗口中繪製某些東西。它將繪製成一組存儲在Vector數組中的點。 現在,我該如何將這些點集轉換爲原點(窗口的左上角0,0)或將它放在指定的位置?我想要的窗口的寬度和高度也是640x480。變換+縮放一組點

解決之後,您如何將這組新點縮放到我想要的尺寸?

更新1

我解決了問題的規模,而不是定位問題。繪圖不在我說的地方。下面的代碼我到目前爲止。

float scaleX = (float)width/boundingPoints.width; 
float scaleY = (float)height/boundingPoints.height; 
for(int i = 0; i < cg_points.size()-1; i++){ 
    Point p1 = cg_points.get(i); 
    Point p2 = cg_points.get(i+1); 
    g.drawLine((int)(p1.x*scaleX) + pos.x, (int)(p1.y*scaleY) + pos.y, (int)(p2.x*scaleX) + pos.x, (int)(p2.y*scaleY) + pos.y); 
} 

我想讓繪圖從pos [x,y]開始。目前問題是什麼?它確實遵循pos.x和pos.y的規定,但是它離開了,而不是從pos [x,y]開始。

這裏是問題 Image of transformation issue

的屏幕截圖正如你可以從圖片中看到,該框是明星應該是。縮放是正確的,正如你所看到的,而不是pos。這是因爲圖中的點可能起始於(0,0)不是

有什麼建議嗎?

謝謝!

+0

那麼這是一個什麼樣的程序? Java的? JavaScript的?請解釋兩個標籤的需求。 –

+0

這兩個標籤的需求是因爲這是爲Java和JavaScript。 –

+0

對不起,但我還是不明白。你能解釋一下並給出一些細節 - 你如何將它用於Java和JavaScript? –

回答

0

所以我解決它... YAY!如果您碰到與我一樣的問題,請在下方輸入代碼。

float scaleX = (float)width/boundingPoints.width; 
    float scaleY = (float)height/boundingPoints.height; 
    int bx = boundingPoints.x; 
    int by = boundingPoints.y; 
    for(int i = 0; i < cg_points.size()-1; i++){ 
      Point p1 = cg_points.get(i); 
      Point p2 = cg_points.get(i+1); 
      int x1 = (int) ((p1.x-bx)*scaleX); 
      x1 += pos.x; 
      int y1 = (int) ((p1.y-by)*scaleY); 
      y1 += pos.y; 
      int x2 = (int) ((p2.x-bx)*scaleX); 
      x2 += pos.x; 
      int y2 = (int) ((p2.y-by)*scaleY); 
      y2 += pos.y; 

      g.drawLine(x1, y1, x2, y2); 
     } 
1

要翻譯圖紙,只需

foreach point in array 
    point.x += translate.x 
    point.y += translate.y 

如果你要居中繪圖,選擇一箇中心(如平均所有你的觀點),否定該值,然後通過翻譯你的所有點值。

要縮放繪圖:

foreach point in array 
    point.x *= scale 
    point.y *= scale