График линейных уравнений Java Draw внутри JFrame - PullRequest
0 голосов
/ 17 октября 2018

У меня есть школьное задание для CompSci, где нам нужно создать график для линейных уравнений.Этот график должен иметь нарисованные оси, и он должен иметь две линии, которые нарисованы из двух уравнений.У меня сам график работает правильно, но я не могу понять, как правильно установить координаты линий.В настоящее время я использую следующий код для создания и отправки координат на свой график:

    m.print("Slope as decimal: ");
    //gets slope of line. This will be changed so it will accept fractions like Rise/Run but not until the rest of the functionality works.
    double lslope = m.readDouble();
    //gets y intercept as B
    m.print("B as decimal: ");
    double lb = m.readDouble();

    //corresponds to the first coordinate
    double x11=0;
    double y11 = lslope*x11-lb*50;

    //corresponds to the second coordinate
    double x21=1000;
    double y21 = lslope*x21-lb*50;

    //outputs the coordinates of the two points just for the user's conveinience
    m.println(""+x11+"\n"+y11+"\n"+x21+"\n"+y21);

    //wingraph is a JFrame
    wingraph graph = new wingraph("Graph");
    graph.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    graph.setSize(1000,1000);
    graph.setResizable(false);

    //the second set of 4 numbers will be a second line, but to get the graph working I'm just focusing on using one set. The setCoords method just sets the value of 8 coordinates inside a JFrame class which paints the X and Y axis in black, and then paints two lines with the specified coordinates in red.
    graph.setCoords(x11, y11, x21, y21, 1000,1000,1000,1000);

    //displays the graph
    graph.setVisible(true);

Инвертируя наклон, введенный пользователем, я могу заставить линию работать правильно, но только если lslopeравно 1. Как я могу правильно манипулировать целыми числами, чтобы мой график хорошо отображался независимо от того, имеет ли наклон десятичные числа, является ли любое действительное число положительным или отрицательным?

Если это помогает, код для JFrameЯ использую это:

    public class wingraph extends JFrame{

        public wingraph(String title){
            super(title);
            setLayout(new FlowLayout());
        }
        double xCoord1 = 0, yCoord1 = 0, xCoord2 = 0, yCoord2 = 0, xCoord12 = 0, yCoord12 = 0, xCoord22 = 0, yCoord22 = 0;
        public void setCoords(double x1, double y1, double x2, double y2, double x12, double y12, double x22, double y22){
            xCoord1 = x1;
            yCoord1 = y1;
            xCoord2 = x2;
            yCoord2 = y2;
            xCoord12 = x12;
            yCoord12 = y12;
            xCoord22 = x22;
            yCoord22 = y22;
        }        
        public void paint(Graphics g){
            g.setColor(Color.WHITE);
            g.fillRect(0, 0, this.getWidth(), this.getHeight());
            g.setColor(Color.BLACK);
            g.drawLine(this.getWidth()/2, 0, this.getWidth()/2, this.getHeight());
            g.drawLine(0, this.getHeight()/2, this.getWidth(), this.getHeight()/2);
            g.drawString("0",this.getWidth()/2-10,this.getHeight()/2-5);
            g.setColor(Color.red);
            g.drawLine((int) xCoord1,(int) yCoord1,(int) xCoord2,(int) yCoord2);
            g.drawLine((int) xCoord12,(int) yCoord12,(int) xCoord22,(int) yCoord22);
        }
}

Любая помощь приветствуется.

Редактировать

Примеры выполнения моего кода:

https://ibb.co/mVGFff

https://ibb.co/iMwbmL

https://ibb.co/mD080f

https://ibb.co/ezNct0

Все это имеет проблемы, так как мне нужно, чтобы все они былипо центру оси и в правильном формате, например:

https://ibb.co/cWstY0

https://ibb.co/goi0D0

Я прошу прощения, если это все еще неясно, но я новичок в Java иЯ не все знакомы с тем, как объяснить, что именно я хочу, кроме графика 2 линий с помощью уравнения y = mx + b на картеплоскость.

Редактировать 2

Если пользователь вводит 1 для lslope и 0 для b, я хочу, чтобы переменные x и y были:

    x11 = 0;
    y11 = 1000;
    x21 = 1000;
    y21 = 0;

Если lslope = 2 и b = 5 Я хочу, чтобы переменные x и y были:

    x11 = 0
    y11 = 745;
    x21 = 1000;
    y21 = 245;

Если lslope = -1 и b = 10, я хочу x и yпеременные должны быть:

    x11 = 0
    y11 = 240;
    x21 = 1000;
    y21 = 740;
...