Что я должен изменить в своем коде, чтобы программа нарисовала изображение, показанное на рисунке 1? - PullRequest
0 голосов
/ 29 октября 2018

Это ожидаемый результат: image

И вот что выдает мой код: image

Это код. Что я должен изменить в нем, чтобы оно получило правильное изображение?

package blatt03;

import java.awt.*;
import javax.swing.JFrame;

public class LoesungKegel extends JFrame {
private static final long serialVersionUID = 1L;

public LoesungKegel() {
    super();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(610, 417);
    this.setTitle("Lösung in der Klasse " + this.getClass().getName());
    this.setVisible(true);
}

public static void main(String[] args) {
    new LoesungKegel();
}

public void paint(Graphics g) {
    int x25 = this.getWidth() / 4;
    int x75 = this.getWidth() * 3 / 4;
    int y25 = this.getHeight() / 4;
    int y75 = this.getHeight() * 3 / 4;

    double stepX = getWidth() / 40;
    double step1 = getHeight()  / 40;

    g.drawLine(x75, y25, x25, y25);

    g.drawLine(x75, y25, x25, y75);

    g.drawLine(x25, y75, x75, y75);

    g.drawLine(x25, y25, x75, y75);

    for (int i = 0; i < 40; i++) {

         g.drawLine(x25, y25, x25/2 + (int) (stepX * i), y25/2 - (int) (step1 * i));

        g.drawLine(x25/2 + (int) (stepX * i), y25/2 - (int) (step1 * i), x75, y75);

    }

}
}

А не картинка 2, это то, что в данный момент показано с моим кодом.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Изображение, которое вы пытаетесь сгенерировать, намного проще, чем код, который вы пытаетесь использовать для его генерации. Это только один конец линии, идущий вперед по горизонтали, в то время как другой конец идет назад на ту же величину. Вот как бы вы достигли чего-то подобного (при условии, что вы пытаетесь нарисовать 40 линий).

@Override
public void paint(Graphics g) {
    // fill background
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, getWidth(), getHeight());

    int x25 = this.getWidth() / 4;
    int x75 = this.getWidth() * 3 / 4;
    int y25 = this.getHeight() / 4;
    int y75 = this.getHeight() * 3 / 4;

    // draw inner lines
    g.setColor(Color.LIGHT_GRAY);
    int width = x75 - x25;
    double step = width / 40.0;
    for (double i = 0; i < width; i += step) {
        g.drawLine((int)(x25 + i), y25, (int)(x75 - i), y75);
    }

    // draw outer lines
    g.setColor(Color.BLACK);
    g.drawLine(x25, y25, x75, y25);
    g.drawLine(x25, y75, x75, y75);
    g.drawLine(x25, y25, x75, y75);
    g.drawLine(x75, y25, x25, y75);
}
0 голосов
/ 29 октября 2018

Это близко, сохраняя суть вашего подхода.

public void paint(Graphics g) {
    int x25 = this.getWidth() / 4;
    int x75 = this.getWidth() * 3 / 4;
    int y25 = this.getHeight() / 4;
    int y75 = this.getHeight() * 3 / 4;
    int x50 = this.getWidth() / 2;
    int y50 = this.getHeight() / 2;

    int stepX = (x75 - x25) / 40;

    g.drawLine(x75, y25, x25, y25);

    g.drawLine(x75, y25, x25, y75);

    g.drawLine(x25, y75, x75, y75);

    g.drawLine(x25, y25, x75, y75);

    for (int i = 1; x25 + (i * stepX) < x75; i++) {

        g.drawLine(x50, y50, x25 + (stepX * i), y25);

        g.drawLine(x50, y50, x25 + (stepX * i), y75);

    }

}
...