График линейных уравнений Java Draw внутри JFrame
У меня есть школьное задание для 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);
}
}
Любая помощь приветствуется.
редактировать
Примеры выполнения моего кода:
Все они имеют проблемы, так как мне нужно, чтобы они были все центрированы на оси и в правильном формате, таком как:
Я прошу прощения, если это все еще неясно, но я новичок в 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;