3

我有幾個幾何形狀,這些幾何形狀位於不同的座標中,我想將其置於面板的中心。我寫了一個名爲「Set Scale」的函數,它將它放入中心,但形狀相反。由AffineTransform修改的形狀與預期相反呈現

我的代碼:

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); 
} 

回答

0

我想這...它:-)工作

感謝您的幫助:-)

矩形drawing_rect =新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); 
0

從給出的描述,我建議你在你的變換矩陣來看看:

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

您確定您的tx和ty參數是否正確?這裏是矩陣返回由getTranslationInstance

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

你在getTranslationInstance的參數的設定值-1犯罪嫌疑人似乎對我......除非我錯過了什麼,我看不出有任何理由,他們應該是負面的。負值應該是mirror the result,所以很可能是你看到逆轉的原因。嘗試改變它們(它們將分別改變矩陣中的tx和ty字段),並讓我們知道它是否有幫助。

+0

我剛纔試着手動添加+400到Ypoints。有效 – user2138389 2013-03-07 08:07:48