如何用不同的宽度在彼此内画圆圈?

时间:2018-02-21 13:53:29

标签: java

我试图在彼此内部绘制具有相同中心的圆圈。 但是每个圆的宽度应该是不同的 - 它应该在while循环内完成。

结果应该与我上传的图片类似:  circles

我的代码如下所示:

package modelwhile;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class exercise4_figure3 extends Application {
public static void main(String[] args) {
    Application.launch(args);
}

@Override
public void start(Stage stage) {
    GridPane root = initContent();
    Scene scene = new Scene(root);

    stage.setTitle("Loops");
    stage.setScene(scene);
    stage.show();
}

private GridPane initContent() {
    GridPane pane = new GridPane();
    Canvas canvas = new Canvas(200, 200);
    pane.add(canvas, 0, 0);
    drawShapes(canvas.getGraphicsContext2D());
    return pane;
}

// ------------------------------------------------------------------------

// circle figure begins here
private void drawShapes(GraphicsContext gc) {

    int x = 80;
    int y = 80;
    int r1 = 20;
    int r2 = 60;

    while (r1 <= 80) {
        gc.strokeOval(x - r2, y - r2, r1, r2);
        r1 = r1 + 10;

    }
}
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题在于,您不能在x轴上移动以考虑每个新椭圆的增加宽度。你需要将一半的​​距离移动到椭圆上,以便将它们保持在相同的相对位置。

以下是您更新的drawShapes()方法,以包含此移动。您注意到我删除了您的xyr2变量,因为他们并不需要变量,因为没有对它们进行任何操作。< / p>

private void drawShapes(GraphicsContext gc) {
    int r = 20;
    while (r <= 80) {
        gc.strokeOval(80-(r/2), 80, r, 60);
        r = r + 10;
    }
}