Java 如何使圆大于内部的圆弧而不偏离中心?

Java 如何使圆大于内部的圆弧而不偏离中心?,java,geometry,Java,Geometry,这是我的代码: import java.awt.Graphics; import java.awt.GridLayout; import javax.swing.JPanel; import javax.swing.JFrame; public class fourfans extends JFrame { public fourfans(){ setTitle("DrawArcs"); add(new ArcsPanel()); add(new ArcsPanel()

这是我的代码:

import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class fourfans extends JFrame {
public fourfans(){
    setTitle("DrawArcs");
    add(new ArcsPanel());
    add(new ArcsPanel());
    add(new ArcsPanel());
    add(new ArcsPanel());

}

public static void main(String[] args) {
    fourfans frame = new fourfans();
    GridLayout test = new GridLayout(2,2);
    frame.setLayout(test);
    frame.setSize(250 , 300);
    frame.setLocationRelativeTo(null); // center the frame
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);


}


}


class ArcsPanel extends JPanel{

protected void paintComponent(Graphics g){
    super.paintComponent(g);

    int xCenter = getWidth() / 2;
    int yCenter = getHeight() / 2;
    int radius = (int)(Math.min(getWidth(), getHeight()) * 0.4);

    int x = xCenter - radius;
    int y = yCenter - radius;

    g.fillArc(x, y, 2 * radius, 2 * radius, 0, 30);
    g.fillArc(x, y, 2 * radius, 2 * radius, 90, 30);
    g.fillArc(x, y, 2 * radius, 2 * radius, 180, 30);
    g.fillArc(x, y, 2 * radius, 2 * radius, 270, 30);
    g.drawOval(x, y, 2 * radius, 2 * radius);       
}
}

每次我尝试将2*半径更改为2.1*半径时,它都不会让我这样做,因为这是一个双精度。然后,当我输入一个比弧大的固定数字时,它会使圆偏离中心

之所以输入大于圆弧的数字会使圆偏离中心,是因为Java让您将左上角插入为x,y,而不是圆/圆弧的原点。因此,如果你把其中一个变大,你必须重新计算它的x和y,例如

int radius = (int)(Math.min(getWidth(), getHeight()) * 0.4);
int radiusOval = (int)(Math.min(getWidth(), getHeight()) * 0.4 * 1.05);

int x = xCenter - radius;
int y = yCenter - radius;
int xOval = xCenter - radiusOval;
int yOval = yCenter - radiusOval;

g.fillArc(x, y, 2 * radius, 2 * radius, 0, 30);
g.fillArc(x, y, 2 * radius, 2 * radius, 90, 30);
g.fillArc(x, y, 2 * radius, 2 * radius, 180, 30);
g.fillArc(x, y, 2 * radius, 2 * radius, 270, 30);
g.drawOval(xOval, yOval, (int)(2.1 * radius), (int)(2.1 * radius));   

2.1f*半径
<代码>(int)(2.1*半径)?@Patashu似乎解决了双重问题,但这并不能解决我的圆偏离中心的问题。