3

我有一些几何形状,它们位于不同的坐标中,我想将它们带到面板的中心。我编写了一个名为“Set Scale”的函数,将其置于中心位置,但形状颠倒了。

我的代码:

private void SetScale1(Graphics2D gr, int gr_width , int gr_height, double left_x , double right_x , double top_y , double bottom_y ){


    Rectangle2D drawing_rect = new Rectangle2D.Double(left_x, top_y, right_x - left_x, bottom_y - top_y);
 double drawing_cx=( left_x+ right_x) / 2;
 double drawing_cy =(top_y + bottom_y) / 2;

AffineTransform at = AffineTransform.getTranslateInstance(-1 * drawing_cx, -1 * drawing_cy);
//gr.translate(-1 * drawing_cx, -1 * drawing_cy);
//gr.TranslateTransform(0, 0)
double scale_x=gr_width / drawing_rect.getWidth();
double scale_y=gr_height / Math.abs(drawing_rect.getHeight());

scale_x = Math.min(scale_x, scale_y);
scale_y = scale_x;
scale_x = Math.abs(scale_x);
// at = AffineTransform.getScaleInstance(scale_x, -1 * scale_y);
//gr.transform(tt);
gr.transform(at);

//' Translate to center over the drawing area.
double graphics_cx =gr_width / 2;
double graphics_cy = gr_height / 2;
gr.translate(graphics_cx, graphics_cy);
}
4

2 回答 2

0

根据给出的描述,我建议您看一下您的转换矩阵:

AffineTransform at = AffineTransform.getTranslateInstance(-1 * drawing_cx, -1 * drawing_cy);

你确定你的 tx 和 ty 参数是正确的吗?这是getTranslationInstance返回的矩阵:

[   1    0    tx  ]
[   0    1    ty  ]
[   0    0    1   ]

The -1 values you have set in the parameters for getTranslationInstance seem suspect to me... unless I've missed something, I don't see any reason why they should be negative. Negative values should mirror the result, so that may very well be why you're seeing the reversal. Try changing those (they will change the tx and ty fields in the matrix above, respectively) and let us know if it helps.

于 2013-03-06T04:35:50.283 回答
0

i Tried this... it Works:-)

Thanks for the help:-)

Rectangle2D drawing_rect = new Rectangle2D.Double(left_x, top_y, right_x - left_x, bottom_y - top_y); drawing_cx=(left_x+ right_x) / 2; drawing_cy =(top_y + bottom_y) / 2;

 at= AffineTransform.getTranslateInstance( -1* drawing_cx,  -1*drawing_cy);
//gr.translate(-1 * drawing_cx, -1 * drawing_cy);
//gr.TranslateTransform(0, 0)
double scale_x=gr_width / drawing_rect.getWidth();
double scale_y=gr_height / Math.abs(drawing_rect.getHeight());

scale_x = Math.min(scale_x, scale_y);
scale_y = scale_x;
scale_x = Math.abs(scale_x);
// at = AffineTransform.getScaleInstance(scale_x, -1 * scale_y);

gr.scale(Math.round(scale_x), Math.round( scale_y));
//gr.scale(1.2, 1.2);
//gr.transform(tt);
gr.transform(at);

//' Translate to center over the drawing area.
 graphics_cx =gr_width / 2;
 graphics_cy = gr_height / 2;
gr.translate(graphics_cx, graphics_cy);
于 2013-03-14T05:53:18.027 回答