Как нарисовать форму кольца в Java с помощью триггера круга - PullRequest
0 голосов
/ 30 июня 2018

Мне нужно нарисовать кольцо, используя линии (drawLine) в Java, которые должны выглядеть как на картинке. Нам предоставляется класс DrawingPanel, который можно найти здесь .

Я сделал обычный круг, используя линии, но я не уверен, как получить форму кольца. Я новичок в программировании, и это мой первый пост, поэтому прошу прощения, если я пропустил что-то важное.

Это мой код:

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

Вот так должен выглядеть окончательный результат:

https://i.stack.imgur.com/FXInb.png

1 Ответ

0 голосов
/ 30 июня 2018

Такую фигуру можно нарисовать, нарисовав линию из одной точки в точку, находящуюся дальше по кругу, несколько раз пройдя начальную точку.

Вот что я придумал:

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

Результат выглядит так:

Example code, overloaded java.swing.Frame.paint(java.awt.Graphics g)

...