2012-10-25 25 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