bugfix> java > 投稿

線を使用してリングを描画する必要があります( drawLine )Javaでは、添付の図のようになります。 class DrawingPanel が提供されますそれを見つけることができますここに。

線を使用して規則的な円を作成しましたが、リング形状を取得する方法がわかりません。プログラミングは初めてで、これが私の最初の投稿なので、何か重要なものを見逃した場合はおaびします。

これはこれまでの私のコードです:

public static int panelSize = 400;
    public static void drawCircle()
    {
    double radius = 200;
    int x2 = 200;
    int y2 = 200;
    DrawingPanel dp = new DrawingPanel(panelSize, panelSize);
    dp.setBackground(Color.CYAN);
    Graphics dpGraphics = dp.getGraphics(); 
    dpGraphics.setColor(Color.RED);
    for (int circle = 0; circle <= 360; circle++)
    {
        int x = (int)(x2 + Math.sin(circle * (Math.PI / 180)) * radius);
        int y = (int)(y2 + Math.cos (circle * (Math.PI / 180)) * radius);
        dpGraphics.drawLine(x, y, x2, y2);
    }
}

これは最終結果がどのように見えるべきであるかです:

回答 1 件
  • このような図形は、開始点を数回通過して、円上のある点からさらに遠い点まで線を引くことで描画できます。

    これは私が思いついたものです:

    // Radius
    int radius = 200;
    // center of the circle
    int centerX = 300, centerY = 300;
    // The number of edges. Set to 5 for a pentagram
    int mod = 136;
    // The number of "points" to skip - set to 2 for a pentagram
    int skip = 45;
    // Precalculated multipier for sin/cos
    double multi = skip * 2.0 * Math.PI / mod; 
    // First point, calculated by hand
    int x1 = centerX; // sin(0) = 0
    int y1 = centerY + radius; // cos(0) == 1
    for (int circle = 1; circle <= mod; circle++)
    {
        // Calculate the end point of the line.
        int x2 = (int) (centerX + radius * Math.sin(circle * multi));
        int y2 = (int) (centerY + radius * Math.cos(circle * multi));
        dpGraphics.drawLine(x1, y1, x2, y2);
        // Next start point for the line is the current end point
        x1 = x2;
        y1 = y2;
    }
    
    

    結果は次のようになります。

あなたの答え