Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Astro1123 committed Nov 21, 2021
1 parent a53adb0 commit 3e12588
Show file tree
Hide file tree
Showing 3 changed files with 241 additions and 5 deletions.
143 changes: 139 additions & 4 deletions calc/Calculator.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class Calculator extends JFrame implements KeyListener, ActionListener, ItemList
JComboBox<String> comboc5;
JComboBox<String> combounit;
static Calculator frame;
static Calculator frame2;
JFrame frame2;
String strlistLen[] = {"m","km","cm","mm","μm","nm","pm","fm","Å","ly","au","pc","kpc","Mpc","Gpc","inch","feet","yard","mile","nautical mile","寸","尺","間","尋","町","里"};
String strlistTemp[] = {"℃","℉","K"};
String strlistMass[] = {"g","kg","t","mg","eV/c^2","keV/c^2","MeV/c^2","GeV/c^2","lb","oz","ct","momme","貫","斤"};
Expand Down Expand Up @@ -71,7 +71,7 @@ class Calculator extends JFrame implements KeyListener, ActionListener, ItemList
JComboBox<String> combo2Volume;
JComboBox<String> combo1SIp;
JComboBox<String> combo2SIp;
String combodata[] = {"Standard", "Scientific", "Area", "Script", "Solve","Programmer","Unit","Table"};
String combodata[] = {"Standard", "Scientific", "Area", "Script", "Solve","Programmer","Unit","Table","Graph"};
String combodataunit[] = {"Length","Mass","Time","Temperature","Angle","Solid Angle","Force","Ratio","Velocity","Energy","Pressure","Area","Volume","SI prefixes"};
String pcombodata[] = {"HEX","DEC","OCT","BIN"};
String combodatac5[] = {"NewtonModified", "Newton", "FalsePosition"};
Expand Down Expand Up @@ -99,6 +99,10 @@ class Calculator extends JFrame implements KeyListener, ActionListener, ItemList
JTextField textc8in3;
JTextField textc8in4;
JTextArea textc8;
JTextField textc9in1;
JTextField textc9in2;
JTextField textc9in3;
JTextField textc9in4;
JTextArea texta6;
JComboBox<String> pcombo;
JButton pbtn00;
Expand All @@ -123,13 +127,14 @@ class Calculator extends JFrame implements KeyListener, ActionListener, ItemList
ArrayList<Double> graphout = new ArrayList<Double>();

public static void main(String args[]){
frame = new Calculator("Main");
frame = new Calculator();
frame.setVisible(true);
}

Calculator(String str) {
Calculator() {
setBounds(100, 100, 640, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

PushList = new ArrayDeque<>();
sb = new StringBuilder();

Expand All @@ -142,6 +147,7 @@ public static void main(String args[]){
JPanel card6 = new JPanel();
JPanel card7 = new JPanel();
JPanel card8 = new JPanel();
JPanel card9 = new JPanel();

cardPanel = new JPanel();
layout = new CardLayout();
Expand All @@ -155,6 +161,7 @@ public static void main(String args[]){
cardPanel.add(card6, combodata[5]);
cardPanel.add(card7, combodata[6]);
cardPanel.add(card8, combodata[7]);
cardPanel.add(card9, combodata[8]);

JPanel p0 = new JPanel();
p0.setLayout(new FlowLayout());
Expand Down Expand Up @@ -218,6 +225,8 @@ public static void main(String args[]){
JPanel p8 = draw.dc8(this);
card8.add(p8);

JPanel p9 = draw.dc9(this);
card9.add(p9);

getContentPane().add(cardPanel, BorderLayout.CENTER);
getContentPane().add(pt, BorderLayout.NORTH);
Expand Down Expand Up @@ -250,6 +259,13 @@ public void actionPerformed(ActionEvent e) {

if (cmd.equals("Quit")) {
System.exit(0);
} else if (cmd.equals("GraphOpen")) {
frame2 = GWindow(pro.graphequal(this, textc9in1.getText(), Double.parseDouble(textc9in2.getText()), Double.parseDouble(textc9in3.getText()), Integer.parseInt(textc9in4.getText())));
frame2.setVisible(true);
return;
} else if (cmd.equals("GraphClose")) {
frame2.setVisible(false);
return;
} else if (cmd.equals("SolveCard5")) {
pro.solveequal(this, textc5in1.getText(), Double.parseDouble(textc5in2.getText()), Double.parseDouble(textc5in3.getText()),(String)comboc5.getSelectedItem());
return;
Expand Down Expand Up @@ -629,4 +645,123 @@ public void keyPressed(KeyEvent e) {
@Override
public void keyReleased(KeyEvent e) {
}

private JFrame GWindow(ArrayList<Double> data) {
JFrame frame2 = new JFrame();
frame2.setTitle("Graph");
frame2.setBounds(150, 150, 640, 500);
frame2.setResizable(false);

JPanel p = new JPanel();
p.setLayout(new BorderLayout());
frame2.add(p);

GCanvas c = new GCanvas(data);
p.add(c, BorderLayout.CENTER);
JButton btn = new JButton("Close");
btn.addActionListener(this);
btn.setActionCommand("GraphClose");
p.add(btn, BorderLayout.SOUTH);

return frame2;
}

static class GCanvas extends Canvas {
Dimension dimension;
int cnt;
ArrayList<Double> x;
ArrayList<Double> y;
double xmin,ymin,xmax,ymax;

GCanvas(ArrayList<Double> data) {
dimension = getSize();
setBackground(Color.lightGray);

x = new ArrayList<>();
y = new ArrayList<>();
ymin=data.get(2);
ymax=data.get(2);
double z;

cnt = (int)Double.parseDouble(String.valueOf(data.get(0)));
for (int i = 0; i < cnt; i++) {
x.add(data.get(2*i+1));
z = data.get(2*i+2);
y.add(z);
if (ymin > z) {
ymin = z;
}
if (ymax < z) {
ymax = z;
}
}
xmin = x.get(0);
xmax = x.get(x.size()-1);

if ((ymax - ymin) < 0.001) {
ymax = 1;
ymin = -1;
}

if ((xmax - xmin) < 0.001) {
xmax = 1;
xmin = -1;
}
//*/
}

private double yc(double y) {
return dimension.height - (y - ymin)/(ymax-ymin)*(dimension.height-20) - 10;
}

private double xc(double x) {
return (x - xmin)/(xmax-xmin)*(dimension.width-20) + 10;
}
/*
private double xc(int x) {
return dimension.width / 2.0 + x;
}//*/

public void paint(Graphics g) {
dimension = getSize();

g.setColor(Color.white);
g.fillRect(10, 10, dimension.width - 20, dimension.height - 20);

//軸の色は黒
g.setColor(Color.black);
//x軸
g.drawLine((int)xc(xmin),(int)yc(0),(int)xc(xmax),(int)yc(0));
//y軸
g.drawLine((int)xc(0),(int)yc(ymin),(int)xc(0),(int)yc(ymax));

g.drawLine((int)xc(0)-2,(int)yc(ymin/2),(int)xc(0)+2,(int)yc(ymin/2));
g.drawLine((int)xc(0)-2,(int)yc(ymax/2),(int)xc(0)+2,(int)yc(ymax/2));
g.drawLine((int)xc(0)-2,(int)yc(ymin),(int)xc(0)+2,(int)yc(ymin));
g.drawLine((int)xc(0)-2,(int)yc(ymax),(int)xc(0)+2,(int)yc(ymax));

g.drawLine((int)xc(xmin/2),(int)yc(0)-2,(int)xc(xmin/2),(int)yc(0)+2);
g.drawLine((int)xc(xmax/2),(int)yc(0)-2,(int)xc(xmax/2),(int)yc(0)+2);
g.drawLine((int)xc(xmin),(int)yc(0)-2,(int)xc(xmin),(int)yc(0)+2);
g.drawLine((int)xc(xmax),(int)yc(0)-2,(int)xc(xmax),(int)yc(0)+2);

g.setColor(Color.black);
g.drawString("O", (int)xc(0)+5, (int)yc(0)+15);

g.drawString(String.valueOf(xmin), (int)xc(xmin), (int)yc(0)+15);
g.drawString(String.valueOf(xmin/2), (int)xc(xmin/2), (int)yc(0)+15);
g.drawString(String.valueOf(xmax/2), (int)xc(xmax/2), (int)yc(0)+15);
g.drawString(String.valueOf(xmax), (int)xc(xmax)-20, (int)yc(0)+15);

g.drawString(String.valueOf(ymax), (int)xc(0)+5, (int)yc(ymax)+15);
g.drawString(String.valueOf(ymax/2), (int)xc(0)+5, (int)yc(ymax/2)+10);
g.drawString(String.valueOf(ymin/2), (int)xc(0)+5, (int)yc(ymin/2)+10);
g.drawString(String.valueOf(ymin), (int)xc(0)+5, (int)yc(ymin)-5);

g.setColor(Color.blue);
for(int i=0;i<x.size()-1;i++) {
g.drawLine( (int)(xc(x.get(i))), (int)(yc(y.get(i))), (int)(xc(x.get(i+1))), (int)(yc(y.get(i+1))) );
}
}
}
}
52 changes: 51 additions & 1 deletion calc/Draw.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

public class Draw {
// Card1
Expand Down Expand Up @@ -1160,6 +1159,57 @@ public JPanel dc8(Calculator calc) {
p5p2p3.add(scrollpanec8);
return p5;
}

// Card9
public JPanel dc9(Calculator calc) {
JPanel p5 = new JPanel();
p5.setLayout(new BorderLayout());
JPanel p5p1 = new JPanel();
p5p1.setLayout(new BorderLayout());
JPanel p5p1p1 = new JPanel();
p5p1p1.setLayout(new FlowLayout());
JPanel p5p1p2 = new JPanel();
p5p1p2.setLayout(new FlowLayout());
JPanel p5p1p3 = new JPanel();
p5p1p3.setLayout(new FlowLayout());
JPanel p5p2p1 = new JPanel();
p5p2p1.setLayout(new FlowLayout());
JPanel p5p2p2 = new JPanel();
p5p2p2.setLayout(new FlowLayout());
JPanel p5p2p3 = new JPanel();
p5p2p3.setLayout(new FlowLayout());
JPanel p5p2 = new JPanel();
p5p2.setLayout(new BorderLayout());
p5.add(p5p1, BorderLayout.NORTH);
p5.add(p5p2, BorderLayout.CENTER);
p5p1.add(p5p1p1, BorderLayout.NORTH);
p5p1.add(p5p1p2, BorderLayout.CENTER);
p5p1.add(p5p1p3, BorderLayout.SOUTH);
p5p2.add(p5p2p1, BorderLayout.NORTH);
p5p2.add(p5p2p2, BorderLayout.CENTER);
p5p2.add(p5p2p3, BorderLayout.SOUTH);
JLabel labelc5a = new JLabel("f(x) = ");
calc.textc9in1 = new JTextField("0", 30);
JLabel labelc5b = new JLabel("x0 = ");
calc.textc9in2 = new JTextField("-1", 30);
JLabel labelc5c = new JLabel("x1 = ");
calc.textc9in3 = new JTextField("1", 30);
JLabel labelc5d = new JLabel("partition = ");
calc.textc9in4 = new JTextField("620", 30);
JButton btnc5 = new JButton("Graph");
btnc5.addActionListener(calc);
btnc5.setActionCommand("GraphOpen");
p5p1p1.add(labelc5a);
p5p1p1.add(calc.textc9in1);
p5p1p2.add(labelc5b);
p5p1p2.add(calc.textc9in2);
p5p1p3.add(labelc5c);
p5p1p3.add(calc.textc9in3);
p5p2p1.add(labelc5d);
p5p2p1.add(calc.textc9in4);
p5p2p2.add(btnc5);
return p5;
}

JButton Button(String str) {
JButton btn = new JButton(str);
Expand Down
51 changes: 51 additions & 0 deletions calc/Process.java
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,57 @@ public void tableequal(Calculator calc, String input1, double input2, double inp
calc.textc8.append(x0+i*dx + "\t: " + cal.calc(listc1).toPlainString() + "\n");
}
}

public ArrayList<Double> graphequal(Calculator calc, String input1, double input2, double input3, int input4) {
Token t;
SignSymbols ss = new SignSymbols();
ToRPN trpn = new ToRPN();
Calc cal = new Calc();
Const cons = new Const();
//System.out.println(str);
Reader reader = new StringReader(input1);
Lexer l = new Lexer(reader);
calc.typelist = new ArrayList<>();
calc.list = new ArrayList<>();
ArrayList<String> listc1;
ArrayList<String> typelistc1;
ArrayList<Double> out = new ArrayList<>();
BigDecimal yd;
double x0 = input2;
double x1 = input3;
int cnt = input4+1;
String str;
out.add((double)cnt);
if (cnt < 1) cnt = 1;

try {
for (int i = 0; (t = l.read()) != Token.EOF; i++) {
if(t.getText()==Token.EOL) continue;
calc.list.add(t.getText());
calc.typelist.add(t.getType().getLabel());
//System.out.println(list.get(list.size()-1));
}
}
catch (ParseException e) {
System.exit(-1);
}
//System.out.println(list);
if (calc.list.size() == 0) {
calc.list.add("0");
calc.typelist.add("整数");
}
for (int i = 0; i < cnt; i++) {
listc1 = new ArrayList<>(calc.list);
typelistc1 = new ArrayList<>(calc.typelist);
cons.constant(listc1,typelistc1,x0+i*(x1-x0)/input4);
ss.signSymbols(listc1,typelistc1);
listc1=trpn.toRPN(listc1,typelistc1);
out.add(x0+i*(x1-x0)/input4);
str = cal.calc(listc1).toPlainString();
out.add(Double.parseDouble(str));
}
return out;
}

public void solveequal(Calculator calc, String input1, double input2, double input3, String input4) {
Token t;
Expand Down

0 comments on commit 3e12588

Please sign in to comment.