Hvordan tegner man en cirkel med givne X- og Y-koordinater som midterste plet i cirklen?
fillOval
passer til en oval inde i et rektangel, with width=r, height = r
du får en cirkel. Hvis du vil have fillOval(x,y,r,r)
for at tegne en cirkel med centrum ved (x,y) skal du forskyde rektanglet med halvdelen af dets bredde og halvdelen af dets højde.
public void drawCenteredCircle(Graphics2D g, int x, int y, int r) {
x = x-(r/2);
y = y-(r/2);
g.fillOval(x,y,r,r);
}
Dette vil tegne en cirkel med centrum ved x,y
Så vi laver alle det samme hjemmearbejde?
Mærkeligt, hvordan det mest opstemte svar er forkert. Husk, draw/fillOval tager højde og bredde som parametre, ikke radius. Så for at tegne og centrere en cirkel korrekt med x-, y- og radiusværdier, der er angivet af brugeren, ville du gøre noget som dette:
public static void drawCircle(Graphics g, int x, int y, int radius) {
int diameter = radius * 2;
//shift x and y by the radius of the circle in order to correctly center it
g.fillOval(x - radius, y - radius, diameter, diameter);
}
Udskift din tegnelinje med
g.drawOval(X - r, Y - r, r, r)
Dette skulle gøre den øverste venstre del af din cirkel til det rigtige sted at få midten til at være (X,Y)
,i det mindste så længe som punktet (X - r,Y - r)
har begge komponenter inden for rækkevidde.