New mathematical rules
This commit is contained in:
parent
7d02f51cd5
commit
d3ab2579b3
@ -8,5 +8,6 @@ encoding//src/org/warp/picalculator/math/MathematicalSymbols.java=UTF-8
|
|||||||
encoding//src/org/warp/picalculator/math/functions/Expression.java=UTF-8
|
encoding//src/org/warp/picalculator/math/functions/Expression.java=UTF-8
|
||||||
encoding//src/org/warp/picalculator/math/functions/Root.java=UTF-8
|
encoding//src/org/warp/picalculator/math/functions/Root.java=UTF-8
|
||||||
encoding//src/org/warp/picalculator/math/functions/RootSquare.java=UTF-8
|
encoding//src/org/warp/picalculator/math/functions/RootSquare.java=UTF-8
|
||||||
|
encoding//src/org/warp/picalculator/math/functions/Sum.java=UTF-8
|
||||||
encoding//src/org/warp/picalculator/screens/EquationScreen.java=UTF-8
|
encoding//src/org/warp/picalculator/screens/EquationScreen.java=UTF-8
|
||||||
encoding/<project>=UTF-8
|
encoding/<project>=UTF-8
|
||||||
|
12
.settings/org.eclipse.jdt.core.prefs
Normal file
12
.settings/org.eclipse.jdt.core.prefs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||||
|
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||||
|
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||||
|
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||||
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.8
|
BIN
res/font_32.rft
Normal file
BIN
res/font_32.rft
Normal file
Binary file not shown.
BIN
res/font_big.rft
BIN
res/font_big.rft
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
res/palettetmp.bmp
Normal file
BIN
res/palettetmp.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
@ -512,6 +512,17 @@ public class NumeroAvanzatoVec implements Comparable<NumeroAvanzatoVec> {
|
|||||||
return (this.terms.size() <= 1);
|
return (this.terms.size() <= 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public boolean hasVariables() {
|
||||||
|
for (NumeroAvanzato s : terms) {
|
||||||
|
if ((s.getVariableX().count() | s.getVariableY().count() | s.getVariableZ().count()) != 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* True if the value is BigInteger. Equivalent to the indication whether a
|
* True if the value is BigInteger. Equivalent to the indication whether a
|
||||||
* conversion to a BigInteger can be exact.
|
* conversion to a BigInteger can be exact.
|
||||||
|
@ -48,13 +48,6 @@ public class Main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws InterruptedException {
|
public static void main(String[] args) throws InterruptedException {
|
||||||
if (test()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
new Main();
|
new Main();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean test() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ package org.warp.picalculator;
|
|||||||
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawLine;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawLine;
|
||||||
|
|
||||||
|
import com.rits.cloning.Cloner;
|
||||||
|
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -44,6 +46,8 @@ public class Utils {
|
|||||||
|
|
||||||
public static boolean debugOn;
|
public static boolean debugOn;
|
||||||
|
|
||||||
|
public static Cloner cloner = new Cloner();
|
||||||
|
|
||||||
public static final class DebugStream extends StringWriter {
|
public static final class DebugStream extends StringWriter {
|
||||||
|
|
||||||
public void println(String str) {
|
public void println(String str) {
|
||||||
@ -68,13 +72,30 @@ public class Utils {
|
|||||||
return contains;
|
return contains;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String[] regexNormalSymbols = new String[]{"\\", ".", "[", "]", "{", "}", "(", ")", "*", "+", "-", "?", "^", "$", "|"};
|
||||||
|
|
||||||
public static String ArrayToRegex(String[] array) {
|
public static String ArrayToRegex(String[] array) {
|
||||||
String regex = null;
|
String regex = null;
|
||||||
for (String symbol : array) {
|
for (String symbol : array) {
|
||||||
if (regex != null) {
|
boolean contained = false;
|
||||||
regex += "|\\" + symbol;
|
for (String smb : regexNormalSymbols) {
|
||||||
|
if (smb.equals(symbol)) {
|
||||||
|
contained = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (contained) {
|
||||||
|
if (regex != null) {
|
||||||
|
regex += "|\\" + symbol;
|
||||||
|
} else {
|
||||||
|
regex = "\\" + symbol;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
regex = "\\" + symbol;
|
if (regex != null) {
|
||||||
|
regex += "|" + symbol;
|
||||||
|
} else {
|
||||||
|
regex = symbol;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return regex;
|
return regex;
|
||||||
@ -99,7 +120,7 @@ public class Utils {
|
|||||||
|
|
||||||
public static boolean areThereOnlySettedUpFunctionsSumsEquationsAndSystems(ArrayList<Function> fl) {
|
public static boolean areThereOnlySettedUpFunctionsSumsEquationsAndSystems(ArrayList<Function> fl) {
|
||||||
for (int i = 0; i < fl.size(); i++) {
|
for (int i = 0; i < fl.size(); i++) {
|
||||||
if (!(fl.get(i) instanceof Number || fl.get(i) instanceof Sum || fl.get(i) instanceof SumSubtraction || fl.get(i) instanceof Equation || fl.get(i) instanceof EquationsSystemPart || fl.get(i) instanceof Expression)) {
|
if (!(fl.get(i) instanceof Number || fl.get(i) instanceof Sum || fl.get(i) instanceof SumSubtraction || fl.get(i) instanceof Subtraction || fl.get(i) instanceof Equation || fl.get(i) instanceof EquationsSystemPart || fl.get(i) instanceof Expression)) {
|
||||||
if (fl.get(i) instanceof AnteriorFunction) {
|
if (fl.get(i) instanceof AnteriorFunction) {
|
||||||
if (((AnteriorFunction) fl.get(i)).getVariable() == null) {
|
if (((AnteriorFunction) fl.get(i)).getVariable() == null) {
|
||||||
return false;
|
return false;
|
||||||
@ -118,7 +139,7 @@ public class Utils {
|
|||||||
|
|
||||||
public static boolean areThereOnlySettedUpFunctionsSumsMultiplicationsEquationsAndSystems(ArrayList<Function> fl) {
|
public static boolean areThereOnlySettedUpFunctionsSumsMultiplicationsEquationsAndSystems(ArrayList<Function> fl) {
|
||||||
for (int i = 0; i < fl.size(); i++) {
|
for (int i = 0; i < fl.size(); i++) {
|
||||||
if (!(fl.get(i) instanceof Number || fl.get(i) instanceof Multiplication || fl.get(i) instanceof PrioritaryMultiplication || fl.get(i) instanceof Sum || fl.get(i) instanceof SumSubtraction || fl.get(i) instanceof Equation || fl.get(i) instanceof EquationsSystemPart || fl.get(i) instanceof Expression)) {
|
if (!(fl.get(i) instanceof Number || fl.get(i) instanceof Multiplication || fl.get(i) instanceof PrioritaryMultiplication || fl.get(i) instanceof Sum || fl.get(i) instanceof SumSubtraction || fl.get(i) instanceof Subtraction || fl.get(i) instanceof Equation || fl.get(i) instanceof EquationsSystemPart || fl.get(i) instanceof Expression)) {
|
||||||
if (fl.get(i) instanceof AnteriorFunction) {
|
if (fl.get(i) instanceof AnteriorFunction) {
|
||||||
if (((AnteriorFunction) fl.get(i)).getVariable() == null) {
|
if (((AnteriorFunction) fl.get(i)).getVariable() == null) {
|
||||||
return false;
|
return false;
|
||||||
@ -220,7 +241,7 @@ public class Utils {
|
|||||||
|
|
||||||
public static boolean areThereEmptySums(ArrayList<Function> fl) {
|
public static boolean areThereEmptySums(ArrayList<Function> fl) {
|
||||||
for (int i = 0; i < fl.size(); i++) {
|
for (int i = 0; i < fl.size(); i++) {
|
||||||
if (fl.get(i) instanceof Sum || fl.get(i) instanceof SumSubtraction) {
|
if (fl.get(i) instanceof Sum || fl.get(i) instanceof SumSubtraction || fl.get(i) instanceof Subtraction) {
|
||||||
if (((FunctionTwoValues) fl.get(i)).getVariable1() == null && ((FunctionTwoValues) fl.get(i)).getVariable2() == null) {
|
if (((FunctionTwoValues) fl.get(i)).getVariable1() == null && ((FunctionTwoValues) fl.get(i)).getVariable2() == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -358,17 +379,21 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final RAWFont getFont(boolean small, boolean zoomed) {
|
public static final RAWFont getFont(boolean small, boolean zoomed) {
|
||||||
|
return PIDisplay.fonts[getFontIndex(small, zoomed)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final int getFontIndex(boolean small, boolean zoomed) {
|
||||||
if (small) {
|
if (small) {
|
||||||
if (zoomed) {
|
if (zoomed) {
|
||||||
return PIDisplay.fonts[3];
|
return 3;
|
||||||
} else {
|
} else {
|
||||||
return PIDisplay.fonts[1];
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (zoomed) {
|
if (zoomed) {
|
||||||
return PIDisplay.fonts[2];
|
return 2;
|
||||||
} else {
|
} else {
|
||||||
return PIDisplay.fonts[0];
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -454,7 +454,7 @@ public class Keyboard {
|
|||||||
refresh = true;
|
refresh = true;
|
||||||
}
|
}
|
||||||
if (refresh) {
|
if (refresh) {
|
||||||
Display.repaint(true);
|
Display.repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -478,7 +478,7 @@ public class Keyboard {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (refresh) {
|
if (refresh) {
|
||||||
Display.repaint(true);
|
Display.repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ public final class PIDisplay {
|
|||||||
|
|
||||||
private int[] skin;
|
private int[] skin;
|
||||||
private int[] skinSize;
|
private int[] skinSize;
|
||||||
public static RAWFont[] fonts = new RAWFont[4];
|
public static RAWFont[] fonts;
|
||||||
|
|
||||||
public static String error = null;
|
public static String error = null;
|
||||||
public String[] errorStackTrace = null;
|
public String[] errorStackTrace = null;
|
||||||
@ -45,7 +45,7 @@ public final class PIDisplay {
|
|||||||
public PIDisplay(Screen screen) {
|
public PIDisplay(Screen screen) {
|
||||||
setScreen(screen);
|
setScreen(screen);
|
||||||
INSTANCE = this;
|
INSTANCE = this;
|
||||||
run();
|
loop();
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* private void load_skin() {
|
* private void load_skin() {
|
||||||
@ -100,6 +100,30 @@ public final class PIDisplay {
|
|||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void replaceScreen(Screen screen) {
|
||||||
|
if (screen.initialized == false) {
|
||||||
|
if (screen.canBeInHistory) {
|
||||||
|
Calculator.sessions[Calculator.currentSession] = screen;
|
||||||
|
} else {
|
||||||
|
Calculator.currentSession = -1;
|
||||||
|
for (int i = 0; i < Calculator.sessions.length - 2; i++) {
|
||||||
|
Calculator.sessions[i] = Calculator.sessions[i + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
screen.d = this;
|
||||||
|
try {
|
||||||
|
screen.create();
|
||||||
|
PIDisplay.screen = screen;
|
||||||
|
if (screen.initialized == false) {
|
||||||
|
screen.initialize();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean canGoBack() {
|
public boolean canGoBack() {
|
||||||
if (Calculator.currentSession == -1) {
|
if (Calculator.currentSession == -1) {
|
||||||
@ -176,6 +200,7 @@ public final class PIDisplay {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void load_fonts() {
|
private void load_fonts() {
|
||||||
|
fonts = new RAWFont[7];
|
||||||
fonts[0] = new RAWFont();
|
fonts[0] = new RAWFont();
|
||||||
fonts[0].create("big");
|
fonts[0].create("big");
|
||||||
fonts[1] = new RAWFont();
|
fonts[1] = new RAWFont();
|
||||||
@ -184,7 +209,11 @@ public final class PIDisplay {
|
|||||||
fonts[2].create("big_2x");
|
fonts[2].create("big_2x");
|
||||||
fonts[3] = new RAWFont();
|
fonts[3] = new RAWFont();
|
||||||
fonts[3].create("small_2x");
|
fonts[3].create("small_2x");
|
||||||
setFont(fonts[0]);
|
fonts[4] = new RAWFont();
|
||||||
|
fonts[4].create("32");
|
||||||
|
fonts[5] = new RAWFont();
|
||||||
|
fonts[5].create("square");
|
||||||
|
glSetFont(fonts[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void draw_init() {
|
private void draw_init() {
|
||||||
@ -280,7 +309,7 @@ public final class PIDisplay {
|
|||||||
glColor3f(255, 255, 255);
|
glColor3f(255, 255, 255);
|
||||||
|
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
setFont(Utils.getFont(false, false));
|
glSetFont(Utils.getFont(false, false));
|
||||||
glColor3f(129, 28, 22);
|
glColor3f(129, 28, 22);
|
||||||
glDrawStringRight(Main.screenSize[0] - 2, Main.screenSize[1]- this.glyphsHeight[1] - 2, "ANDREA CAVALLI'S CALCULATOR");
|
glDrawStringRight(Main.screenSize[0] - 2, Main.screenSize[1]- this.glyphsHeight[1] - 2, "ANDREA CAVALLI'S CALCULATOR");
|
||||||
glColor3f(149, 32, 26);
|
glColor3f(149, 32, 26);
|
||||||
@ -291,7 +320,7 @@ public final class PIDisplay {
|
|||||||
glDrawStringLeft(2, 22 + i, stackPart);
|
glDrawStringLeft(2, 22 + i, stackPart);
|
||||||
i += 11;
|
i += 11;
|
||||||
}
|
}
|
||||||
setFont(fonts[0]);
|
glSetFont(fonts[0]);
|
||||||
glColor3f(129, 28, 22);
|
glColor3f(129, 28, 22);
|
||||||
glDrawStringCenter((Main.screenSize[0] / 2), 11, "UNEXPECTED EXCEPTION");
|
glDrawStringCenter((Main.screenSize[0] / 2), 11, "UNEXPECTED EXCEPTION");
|
||||||
} else {
|
} else {
|
||||||
@ -308,16 +337,13 @@ public final class PIDisplay {
|
|||||||
|
|
||||||
private long precTime = -1;
|
private long precTime = -1;
|
||||||
|
|
||||||
public void refresh(boolean forced) {
|
public void refresh() {
|
||||||
float dt = 0;
|
float dt = 0;
|
||||||
long newtime = System.nanoTime();
|
long newtime = System.nanoTime();
|
||||||
if (precTime == -1) {
|
if (precTime == -1) {
|
||||||
dt = 0;
|
dt = 0;
|
||||||
} else {
|
} else {
|
||||||
dt = (float) ((newtime - precTime) / 1000000000d);
|
dt = (float) ((newtime - precTime) / 1000000000d);
|
||||||
if (dt < 0.03 && !forced) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
precTime = newtime;
|
precTime = newtime;
|
||||||
/*
|
/*
|
||||||
@ -327,7 +353,7 @@ public final class PIDisplay {
|
|||||||
|
|
||||||
screen.beforeRender(dt);
|
screen.beforeRender(dt);
|
||||||
|
|
||||||
if(forced==true || screen.mustBeRefreshed()) {
|
if(dt >= 0.03 | screen.mustBeRefreshed()) {
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +366,7 @@ public final class PIDisplay {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public void run() {
|
public void loop() {
|
||||||
try {
|
try {
|
||||||
load_skin();
|
load_skin();
|
||||||
load_fonts();
|
load_fonts();
|
||||||
@ -359,10 +385,10 @@ public final class PIDisplay {
|
|||||||
|
|
||||||
double extratime = 0;
|
double extratime = 0;
|
||||||
while (Display.initialized) {
|
while (Display.initialized) {
|
||||||
long start = System.nanoTime();
|
long start = System.currentTimeMillis();
|
||||||
Display.repaint(false);
|
Display.repaint();
|
||||||
long end = System.nanoTime();
|
long end = System.currentTimeMillis();
|
||||||
double delta = (end - start) / 1000000000;
|
double delta = (end - start) / 1000d;
|
||||||
int deltaInt = (int) Math.floor(delta);
|
int deltaInt = (int) Math.floor(delta);
|
||||||
int extraTimeInt = (int) Math.floor(extratime);
|
int extraTimeInt = (int) Math.floor(extratime);
|
||||||
if (extraTimeInt + deltaInt < 50) {
|
if (extraTimeInt + deltaInt < 50) {
|
||||||
|
@ -7,15 +7,15 @@ import java.awt.image.DataBufferInt;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import org.warp.picalculator.Main;
|
import org.warp.picalculator.Main;
|
||||||
|
import org.warp.picalculator.Utils;
|
||||||
import org.warp.picalculator.device.PIDisplay;
|
import org.warp.picalculator.device.PIDisplay;
|
||||||
import org.warp.picalculator.device.PIFrame;
|
|
||||||
|
|
||||||
public class Display {
|
public class Display {
|
||||||
|
|
||||||
private static PIFrame INSTANCE = new PIFrame();
|
private static Frame INSTANCE = new Frame();
|
||||||
public static int[] size = new int[] { 1, 1 };
|
public static int[] size = new int[] { 1, 1 };
|
||||||
public static BufferedImage g = new BufferedImage(size[0], size[1], BufferedImage.TYPE_INT_ARGB);
|
public static BufferedImage g = new BufferedImage(size[0], size[1], BufferedImage.TYPE_INT_RGB);
|
||||||
private static int[] canvas2d = new int[1];
|
static int[] canvas2d = new int[1];
|
||||||
public static int color = 0xFF000000;
|
public static int color = 0xFF000000;
|
||||||
public static boolean initialized = false;
|
public static boolean initialized = false;
|
||||||
|
|
||||||
@ -38,6 +38,7 @@ public class Display {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void create() {
|
public static void create() {
|
||||||
|
Display.setResizable(Utils.debugOn);
|
||||||
Display.setDisplayMode(Main.screenSize[0], Main.screenSize[1]);
|
Display.setDisplayMode(Main.screenSize[0], Main.screenSize[1]);
|
||||||
INSTANCE.setVisible(true);
|
INSTANCE.setVisible(true);
|
||||||
initialized = true;
|
initialized = true;
|
||||||
@ -74,38 +75,14 @@ public class Display {
|
|||||||
@Deprecated()
|
@Deprecated()
|
||||||
public static void refresh() {
|
public static void refresh() {
|
||||||
if (PIDisplay.screen == null || (PIDisplay.error != null && PIDisplay.error.length() > 0) || PIDisplay.screen == null || PIDisplay.screen.mustBeRefreshed()) {
|
if (PIDisplay.screen == null || (PIDisplay.error != null && PIDisplay.error.length() > 0) || PIDisplay.screen == null || PIDisplay.screen.mustBeRefreshed()) {
|
||||||
Display.INSTANCE.c.forcerefresh = false;
|
|
||||||
Display.INSTANCE.c.repaint();
|
Display.INSTANCE.c.repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void repaint(boolean force) {
|
public static void repaint() {
|
||||||
Display.INSTANCE.c.forcerefresh = force;
|
|
||||||
Display.INSTANCE.c.repaint();
|
Display.INSTANCE.c.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
// private static ArrayList<Double> mediaValori = new ArrayList<Double>();
|
|
||||||
|
|
||||||
public static void update(Graphics g, boolean forcerefresh) {
|
|
||||||
// long time1 = System.nanoTime();
|
|
||||||
PIDisplay.INSTANCE.refresh(forcerefresh);
|
|
||||||
|
|
||||||
final int[] a = ((DataBufferInt) Display.g.getRaster().getDataBuffer()).getData();
|
|
||||||
// System.arraycopy(canvas2d, 0, a, 0, canvas2d.length);
|
|
||||||
canvas2d = a;
|
|
||||||
g.clearRect(0, 0, size[0], size[1]);
|
|
||||||
g.drawImage(Display.g, 0, 0, null);
|
|
||||||
// long time2 = System.nanoTime();
|
|
||||||
// double timeDelta = ((double)(time2-time1))/1000000000d;
|
|
||||||
// double mediaAttuale = timeDelta;
|
|
||||||
// mediaValori.add(mediaAttuale);
|
|
||||||
// double somma = 0;
|
|
||||||
// for (Double val : mediaValori) {
|
|
||||||
// somma+=val;
|
|
||||||
// }
|
|
||||||
// System.out.println(somma/((double)mediaValori.size()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static abstract class Startable {
|
public static abstract class Startable {
|
||||||
public Startable() {
|
public Startable() {
|
||||||
this.force = false;
|
this.force = false;
|
||||||
@ -286,20 +263,20 @@ public class Display {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void glDrawStringCenter(int x, int y, String text) {
|
public static void glDrawStringCenter(int x, int y, String text) {
|
||||||
glDrawStringLeft(x - (getStringWidth(text) / 2), y, text);
|
glDrawStringLeft(x - (glGetStringWidth(text) / 2), y, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void glDrawStringRight(int x, int y, String text) {
|
public static void glDrawStringRight(int x, int y, String text) {
|
||||||
glDrawStringLeft(x - getStringWidth(text), y, text);
|
glDrawStringLeft(x - glGetStringWidth(text), y, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setFont(RAWFont font) {
|
public static void glSetFont(RAWFont font) {
|
||||||
if (currentFont != font) {
|
if (currentFont != font) {
|
||||||
currentFont = font;
|
currentFont = font;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getStringWidth(String text) {
|
public static int glGetStringWidth(String text) {
|
||||||
int w =(currentFont.charW+1)*text.length();
|
int w =(currentFont.charW+1)*text.length();
|
||||||
if (text.length() > 0) {
|
if (text.length() > 0) {
|
||||||
return w-1;
|
return w-1;
|
||||||
@ -309,11 +286,21 @@ public class Display {
|
|||||||
// return text.length()*6;
|
// return text.length()*6;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getWidth(FontMetrics fm, String text) {
|
public static int glGetStringWidth(RAWFont rf, String text) {
|
||||||
|
int w =(rf.charW+1)*text.length();
|
||||||
|
if (text.length() > 0) {
|
||||||
|
return w-1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// return text.length()*6;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int glGetFontWidth(FontMetrics fm, String text) {
|
||||||
return fm.stringWidth(text);
|
return fm.stringWidth(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getFontHeight() {
|
public static int glGetCurrentFontHeight() {
|
||||||
return currentFont.charH;
|
return currentFont.charH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
package org.warp.picalculator.device;
|
package org.warp.picalculator.device.graphicengine;
|
||||||
|
|
||||||
|
import java.awt.AlphaComposite;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Frame;
|
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.event.ComponentEvent;
|
import java.awt.event.ComponentEvent;
|
||||||
@ -11,23 +12,26 @@ import java.awt.event.ComponentListener;
|
|||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.KeyListener;
|
import java.awt.event.KeyListener;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.DataBufferInt;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
import org.warp.picalculator.Main;
|
import org.warp.picalculator.Main;
|
||||||
import org.warp.picalculator.Utils;
|
import org.warp.picalculator.Utils;
|
||||||
|
import org.warp.picalculator.device.Keyboard;
|
||||||
|
import org.warp.picalculator.device.PIDisplay;
|
||||||
import org.warp.picalculator.device.Keyboard.Key;
|
import org.warp.picalculator.device.Keyboard.Key;
|
||||||
import org.warp.picalculator.device.graphicengine.Display;
|
|
||||||
|
|
||||||
public class PIFrame extends JFrame {
|
public class Frame extends JFrame {
|
||||||
private static final long serialVersionUID = 2945898937634075491L;
|
private static final long serialVersionUID = 2945898937634075491L;
|
||||||
public CustomCanvas c;
|
public CustomCanvas c;
|
||||||
public boolean wasResized = false;
|
public boolean wasResized = false;
|
||||||
|
|
||||||
public PIFrame() {
|
public Frame() {
|
||||||
c = new CustomCanvas();
|
c = new CustomCanvas();
|
||||||
c.setDoubleBuffered(true);
|
c.setDoubleBuffered(false);
|
||||||
this.add(c);
|
this.add(c);
|
||||||
// this.setExtendedState(Frame.MAXIMIZED_BOTH);
|
// this.setExtendedState(Frame.MAXIMIZED_BOTH);
|
||||||
Toolkit.getDefaultToolkit().setDynamicLayout(false);
|
Toolkit.getDefaultToolkit().setDynamicLayout(false);
|
||||||
@ -432,6 +436,8 @@ public class PIFrame extends JFrame {
|
|||||||
return c.getHeight();
|
return c.getHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// private static ArrayList<Double> mediaValori = new ArrayList<Double>();
|
||||||
|
|
||||||
public static class CustomCanvas extends JPanel {
|
public static class CustomCanvas extends JPanel {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -440,16 +446,24 @@ public class PIFrame extends JFrame {
|
|||||||
private static final long serialVersionUID = 605243927485370885L;
|
private static final long serialVersionUID = 605243927485370885L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void paintComponent(Graphics graphics) {
|
public void paintComponent(Graphics g) {
|
||||||
Display.update(graphics, forcerefresh);
|
// long time1 = System.nanoTime();
|
||||||
}
|
PIDisplay.INSTANCE.refresh();
|
||||||
|
|
||||||
@Override
|
final int[] a = ((DataBufferInt) Display.g.getRaster().getDataBuffer()).getData();
|
||||||
public void repaint() {
|
// System.arraycopy(canvas2d, 0, a, 0, canvas2d.length);
|
||||||
forcerefresh = false;
|
Display.canvas2d = a;
|
||||||
super.repaint();
|
g.clearRect(0, 0, Display.size[0], Display.size[1]);
|
||||||
|
g.drawImage(Display.g, 0, 0, null);
|
||||||
|
// long time2 = System.nanoTime();
|
||||||
|
// double timeDelta = ((double)(time2-time1))/1000000000d;
|
||||||
|
// double mediaAttuale = timeDelta;
|
||||||
|
// mediaValori.add(mediaAttuale);
|
||||||
|
// double somma = 0;
|
||||||
|
// for (Double val : mediaValori) {
|
||||||
|
// somma+=val;
|
||||||
|
// }
|
||||||
|
// System.out.println(somma/((double)mediaValori.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean forcerefresh = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -52,9 +52,6 @@ public class RAWFont {
|
|||||||
currentBit += 1;
|
currentBit += 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (charIndex == 65 && name == "big_2x") {
|
|
||||||
System.out.println("test");
|
|
||||||
}
|
|
||||||
int currentInt = 0;
|
int currentInt = 0;
|
||||||
int currentBit = 0;
|
int currentBit = 0;
|
||||||
for (int i = 0; i < charS; i++) {
|
for (int i = 0; i < charS; i++) {
|
||||||
@ -81,18 +78,18 @@ public class RAWFont {
|
|||||||
int[] file = Utils.realBytes(Utils.convertStreamToByteArray(res.openStream(), res.getFile().length()));
|
int[] file = Utils.realBytes(Utils.convertStreamToByteArray(res.openStream(), res.getFile().length()));
|
||||||
int filelength = file.length;
|
int filelength = file.length;
|
||||||
if (filelength >= 16) {
|
if (filelength >= 16) {
|
||||||
if (file[0x0] == 114 && file[0x1] == 97 && file[0x2] == 119 && file[0x3] == 0xFF && file[0x6] == 0xFF && file[0xB] == 0xFF) {
|
if (file[0x0] == 114 && file[0x1] == 97 && file[0x2] == 119 && file[0x3] == 0xFF && file[0x8] == 0xFF && file[0xD] == 0xFF) {
|
||||||
charW = file[0x4];
|
charW = file[0x4] << 8 | file[0x5];
|
||||||
charH = file[0x5];
|
charH = file[0x6] << 8 | file[0x7];
|
||||||
charS = charW*charH;
|
charS = charW*charH;
|
||||||
charIntCount = (int) Math.ceil(((double)charS)/((double)intBits));
|
charIntCount = (int) Math.ceil(((double)charS)/((double)intBits));
|
||||||
minBound = file[0x7] << 24 | file[0x8] << 16 | file[0x9] << 8 | file[0xA];
|
minBound = file[0x9] << 24 | file[0xA] << 16 | file[0xB] << 8 | file[0xC];
|
||||||
maxBound = file[0xC] << 24 | file[0xD] << 16 | file[0xE] << 8 | file[0xF];
|
maxBound = file[0xE] << 24 | file[0xF] << 16 | file[0x10] << 8 | file[0x11];
|
||||||
if (maxBound <= minBound) {
|
if (maxBound <= minBound) {
|
||||||
maxBound = 10000; //TODO remove it: temp fix
|
maxBound = 10000; //TODO remove it: temp fix
|
||||||
}
|
}
|
||||||
rawchars = new boolean[maxBound-minBound][];
|
rawchars = new boolean[maxBound-minBound][];
|
||||||
int index = 0x10;
|
int index = 0x12;
|
||||||
while (index < filelength) {
|
while (index < filelength) {
|
||||||
try {
|
try {
|
||||||
int charIndex = file[index] << 8 | file[index+1];
|
int charIndex = file[index] << 8 | file[index+1];
|
||||||
|
@ -11,6 +11,7 @@ import org.warp.picalculator.Error;
|
|||||||
import org.warp.picalculator.Errors;
|
import org.warp.picalculator.Errors;
|
||||||
import org.warp.picalculator.Utils;
|
import org.warp.picalculator.Utils;
|
||||||
import org.warp.picalculator.device.PIDisplay;
|
import org.warp.picalculator.device.PIDisplay;
|
||||||
|
import org.warp.picalculator.device.graphicengine.Display;
|
||||||
import org.warp.picalculator.device.graphicengine.Screen;
|
import org.warp.picalculator.device.graphicengine.Screen;
|
||||||
import org.warp.picalculator.math.functions.Expression;
|
import org.warp.picalculator.math.functions.Expression;
|
||||||
import org.warp.picalculator.math.functions.Function;
|
import org.warp.picalculator.math.functions.Function;
|
||||||
@ -33,7 +34,7 @@ public class Calculator {
|
|||||||
throw new Error(Errors.SYNTAX_ERROR);
|
throw new Error(Errors.SYNTAX_ERROR);
|
||||||
}
|
}
|
||||||
String[] parts = string.substring(1).split("\\{");
|
String[] parts = string.substring(1).split("\\{");
|
||||||
EquationsSystem s = new EquationsSystem();
|
EquationsSystem s = new EquationsSystem(null);
|
||||||
for (String part : parts) {
|
for (String part : parts) {
|
||||||
s.addVariableToEnd(parseEquationString(part));
|
s.addVariableToEnd(parseEquationString(part));
|
||||||
}
|
}
|
||||||
@ -41,63 +42,67 @@ public class Calculator {
|
|||||||
} else if (string.contains("=")) {
|
} else if (string.contains("=")) {
|
||||||
return parseEquationString(string);
|
return parseEquationString(string);
|
||||||
} else {
|
} else {
|
||||||
return new Expression(string);
|
return new Expression(null, string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Function parseEquationString(String string) throws Error {
|
public static Function parseEquationString(String string) throws Error {
|
||||||
String[] parts = string.split("=");
|
String[] parts = string.split("=");
|
||||||
if (parts.length == 1) {
|
if (parts.length == 1) {
|
||||||
return new Equation(new Expression(parts[0]), new Number(NumeroAvanzato.ZERO));
|
Equation e = new Equation(null, null, null);
|
||||||
|
e.setVariable1(new Expression(e, parts[0]));
|
||||||
|
e.setVariable2(new Number(e, NumeroAvanzato.ZERO));
|
||||||
|
return e;
|
||||||
} else if (parts.length == 2) {
|
} else if (parts.length == 2) {
|
||||||
return new Equation(new Expression(parts[0]), new Expression(parts[1]));
|
Equation e = new Equation(null, null, null);
|
||||||
|
e.setVariable1(new Expression(e, parts[0]));
|
||||||
|
e.setVariable2(new Expression(e, parts[1]));
|
||||||
|
return e;
|
||||||
} else {
|
} else {
|
||||||
throw new Error(Errors.SYNTAX_ERROR);
|
throw new Error(Errors.SYNTAX_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void solve() throws Error {
|
public static void solve(EquationScreen es) throws Error {
|
||||||
if (Calculator.currentSession == 0 && Calculator.sessions[0] instanceof EquationScreen) {
|
List<Function> results = new ArrayList<>();
|
||||||
EquationScreen es = (EquationScreen) Calculator.sessions[0];
|
List<Function> partialResults = new ArrayList<>();
|
||||||
List<Function> results = new ArrayList<>();
|
for (Function f : es.f) {
|
||||||
List<Function> partialResults = new ArrayList<>();
|
if (f instanceof Equation) {
|
||||||
for (Function f : es.f) {
|
PIDisplay.INSTANCE.setScreen(new SolveEquationScreen(es));
|
||||||
if (f instanceof Equation) {
|
} else {
|
||||||
PIDisplay.INSTANCE.setScreen(new SolveEquationScreen(es));
|
results.add(f);
|
||||||
} else {
|
while (Utils.allSolved(results) == false) {
|
||||||
results.add(f);
|
for (Function itm : results) {
|
||||||
while (Utils.allSolved(results) == false) {
|
if (itm.isSolved() == false) {
|
||||||
for (Function itm : results) {
|
List<Function> dt = itm.solveOneStep();
|
||||||
if (itm.isSolved() == false) {
|
partialResults.addAll(dt);
|
||||||
List<Function> dt = itm.solveOneStep();
|
} else {
|
||||||
partialResults.addAll(dt);
|
partialResults.add(itm);
|
||||||
} else {
|
|
||||||
partialResults.add(itm);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
results = new ArrayList<Function>(partialResults);
|
|
||||||
partialResults.clear();
|
|
||||||
}
|
}
|
||||||
|
results = new ArrayList<Function>(partialResults);
|
||||||
|
partialResults.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (results.size() == 0) {
|
}
|
||||||
|
if (results.size() == 0) {
|
||||||
} else {
|
es.resultsCount = 0;
|
||||||
Collections.reverse(results);
|
} else {
|
||||||
// // add elements to al, including duplicates
|
es.resultsCount = results.size();
|
||||||
// Set<Function> hs = new LinkedHashSet<>();
|
Collections.reverse(results);
|
||||||
// hs.addAll(results);
|
// add elements to al, including duplicates
|
||||||
// results.clear();
|
Set<Function> hs = new LinkedHashSet<>();
|
||||||
// results.addAll(hs);
|
hs.addAll(results);
|
||||||
es.f2 = results;
|
results.clear();
|
||||||
for (Function rf : es.f2) {
|
results.addAll(hs);
|
||||||
rf.generateGraphics();
|
es.f2 = results;
|
||||||
}
|
for (Function rf : es.f2) {
|
||||||
|
rf.generateGraphics();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void solve(char letter) throws Error {
|
public static void solve(EquationScreen equationScreen, char letter) throws Error {
|
||||||
if (Calculator.currentSession == 0 && Calculator.sessions[0] instanceof EquationScreen) {
|
if (Calculator.currentSession == 0 && Calculator.sessions[0] instanceof EquationScreen) {
|
||||||
EquationScreen es = (EquationScreen) Calculator.sessions[0];
|
EquationScreen es = (EquationScreen) Calculator.sessions[0];
|
||||||
List<Function> f = es.f;
|
List<Function> f = es.f;
|
||||||
@ -117,7 +122,7 @@ public class Calculator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void simplify() {
|
public static void simplify(EquationScreen equationScreen) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ import org.warp.picalculator.Utils;
|
|||||||
public class MathematicalSymbols {
|
public class MathematicalSymbols {
|
||||||
public static final String SUM = "+";
|
public static final String SUM = "+";
|
||||||
public static final String SUM_SUBTRACTION = "±";
|
public static final String SUM_SUBTRACTION = "±";
|
||||||
public static final String SUBTRACTION = "-";
|
public static final String SUBTRACTION = "−";
|
||||||
|
public static final String MINUS = "-";
|
||||||
public static final String MULTIPLICATION = "*";
|
public static final String MULTIPLICATION = "*";
|
||||||
public static final String PRIORITARY_MULTIPLICATION = "▪";
|
public static final String PRIORITARY_MULTIPLICATION = "▪";
|
||||||
public static final String DIVISION = "/";
|
public static final String DIVISION = "/";
|
||||||
@ -28,11 +29,11 @@ public class MathematicalSymbols {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final String[] functionsSN() {
|
public static final String[] functionsSN() {
|
||||||
return new String[] { SQUARE_ROOT };
|
return new String[] { SQUARE_ROOT, MINUS };
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String[] signums(boolean withMultiplication, boolean withPrioritaryMultiplication) {
|
public static final String[] signums(boolean withMultiplication, boolean withPrioritaryMultiplication) {
|
||||||
String[] ret = new String[] { SUM, SUM_SUBTRACTION, DIVISION };
|
String[] ret = new String[] { SUM, SUM_SUBTRACTION, SUBTRACTION, DIVISION };
|
||||||
if (withMultiplication) {
|
if (withMultiplication) {
|
||||||
ret = Utils.add(ret, MULTIPLICATION);
|
ret = Utils.add(ret, MULTIPLICATION);
|
||||||
}
|
}
|
||||||
@ -47,7 +48,7 @@ public class MathematicalSymbols {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String[] variables() {
|
public static String[] variables() {
|
||||||
return new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "♓"};
|
return new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String[] genericSyntax() {
|
public static String[] genericSyntax() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package org.warp.picalculator.math.functions;
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.getStringWidth;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glGetStringWidth;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -14,16 +14,18 @@ import org.warp.picalculator.device.graphicengine.Display;
|
|||||||
import com.rits.cloning.Cloner;
|
import com.rits.cloning.Cloner;
|
||||||
|
|
||||||
public abstract class AnteriorFunction implements Function {
|
public abstract class AnteriorFunction implements Function {
|
||||||
public AnteriorFunction(Function value) {
|
public AnteriorFunction(Function parent, Function value) {
|
||||||
|
setParent(parent);
|
||||||
setVariable(value);
|
setVariable(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Function variable = new Number(NumeroAvanzatoVec.ZERO);
|
protected Function parent;
|
||||||
|
protected Function variable = new Number(null, NumeroAvanzatoVec.ZERO);
|
||||||
protected int width;
|
protected int width;
|
||||||
protected int height;
|
protected int height;
|
||||||
protected int line;
|
protected int line;
|
||||||
protected boolean small;
|
protected boolean small;
|
||||||
|
|
||||||
public Function getVariable() {
|
public Function getVariable() {
|
||||||
return variable;
|
return variable;
|
||||||
}
|
}
|
||||||
@ -32,6 +34,15 @@ public abstract class AnteriorFunction implements Function {
|
|||||||
variable = value;
|
variable = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Function getParent() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Function setParent(Function value) {
|
||||||
|
parent = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract String getSymbol();
|
public abstract String getSymbol();
|
||||||
|
|
||||||
@ -50,7 +61,7 @@ public abstract class AnteriorFunction implements Function {
|
|||||||
variable.setSmall(small);
|
variable.setSmall(small);
|
||||||
variable.generateGraphics();
|
variable.generateGraphics();
|
||||||
|
|
||||||
width = getStringWidth(getSymbol()) + 1 + getVariable().getWidth();
|
width = glGetStringWidth(getSymbol()) + 1 + getVariable().getWidth();
|
||||||
height = variable.getHeight();
|
height = variable.getHeight();
|
||||||
line = variable.getLine();
|
line = variable.getLine();
|
||||||
}
|
}
|
||||||
@ -58,10 +69,10 @@ public abstract class AnteriorFunction implements Function {
|
|||||||
@Override
|
@Override
|
||||||
public void draw(int x, int y) {
|
public void draw(int x, int y) {
|
||||||
float h1 = getVariable().getHeight();
|
float h1 = getVariable().getHeight();
|
||||||
int wsegno = getStringWidth(getSymbol());
|
int wsegno = glGetStringWidth(getSymbol());
|
||||||
float hsegno = Utils.getFontHeight(small);
|
float hsegno = Utils.getFontHeight(small);
|
||||||
float maxh = getHeight();
|
float maxh = getHeight();
|
||||||
Display.Render.setFont(Utils.getFont(small));
|
Display.Render.glSetFont(Utils.getFont(small));
|
||||||
|
|
||||||
glDrawStringLeft(x, (int) Math.floor(y + (maxh - hsegno) / 2), getSymbol());
|
glDrawStringLeft(x, (int) Math.floor(y + (maxh - hsegno) / 2), getSymbol());
|
||||||
getVariable().draw(x + wsegno + 1, (int) Math.floor(y + (maxh - h1) / 2));
|
getVariable().draw(x + wsegno + 1, (int) Math.floor(y + (maxh - h1) / 2));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package org.warp.picalculator.math.functions;
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.getStringWidth;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glGetStringWidth;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glColor3f;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glColor3f;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glFillRect;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glFillRect;
|
||||||
@ -16,11 +16,17 @@ import org.warp.picalculator.device.PIDisplay;
|
|||||||
import org.warp.picalculator.device.graphicengine.Display;
|
import org.warp.picalculator.device.graphicengine.Display;
|
||||||
import org.warp.picalculator.device.graphicengine.Display.Render;
|
import org.warp.picalculator.device.graphicengine.Display.Render;
|
||||||
import org.warp.picalculator.math.MathematicalSymbols;
|
import org.warp.picalculator.math.MathematicalSymbols;
|
||||||
|
import org.warp.picalculator.math.rules.FractionsRule1;
|
||||||
|
import org.warp.picalculator.math.rules.FractionsRule2;
|
||||||
|
import org.warp.picalculator.math.rules.FractionsRule3;
|
||||||
|
import org.warp.picalculator.math.rules.NumberRule1;
|
||||||
|
import org.warp.picalculator.math.rules.NumberRule2;
|
||||||
|
import org.warp.picalculator.math.rules.UndefinedRule2;
|
||||||
|
|
||||||
public class Division extends FunctionTwoValues {
|
public class Division extends FunctionTwoValues {
|
||||||
|
|
||||||
public Division(Function value1, Function value2) {
|
public Division(Function parent, Function value1, Function value2) {
|
||||||
super(value1, value2);
|
super(parent, value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -31,21 +37,24 @@ public class Division extends FunctionTwoValues {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isSolvable() throws Error {
|
protected boolean isSolvable() throws Error {
|
||||||
if (variable1 instanceof Number & variable2 instanceof Number) {
|
if (FractionsRule1.compare(this)) return true;
|
||||||
if (((Number)variable2).getTerm().compareTo(NumeroAvanzatoVec.ZERO) == 0) {
|
if (FractionsRule2.compare(this)) return true;
|
||||||
throw new Error(Errors.DIVISION_BY_ZERO);
|
if (FractionsRule3.compare(this)) return true;
|
||||||
} else {
|
if (UndefinedRule2.compare(this)) return true;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Function> solveOneStep() throws Error {
|
public List<Function> solveOneStep() throws Error {
|
||||||
ArrayList<Function> result = new ArrayList<>();
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
if (variable1.isSolved() & variable2.isSolved()) {
|
if (FractionsRule1.compare(this)) {
|
||||||
result.add(((Number) variable1).divide((Number)variable2));
|
result = FractionsRule1.execute(this);
|
||||||
|
} else if (FractionsRule2.compare(this)) {
|
||||||
|
result = FractionsRule2.execute(this);
|
||||||
|
} else if (FractionsRule3.compare(this)) {
|
||||||
|
result = FractionsRule3.execute(this);
|
||||||
|
} else if (UndefinedRule2.compare(this)) {
|
||||||
|
result = UndefinedRule2.execute(this);
|
||||||
} else {
|
} else {
|
||||||
List<Function> l1 = new ArrayList<Function>();
|
List<Function> l1 = new ArrayList<Function>();
|
||||||
List<Function> l2 = new ArrayList<Function>();
|
List<Function> l2 = new ArrayList<Function>();
|
||||||
@ -63,7 +72,7 @@ public class Division extends FunctionTwoValues {
|
|||||||
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
||||||
|
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new Division((Function)f[0], (Function)f[1]));
|
result.add(new Division(this.parent, (Function)f[0], (Function)f[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -117,10 +126,10 @@ public class Division extends FunctionTwoValues {
|
|||||||
}
|
}
|
||||||
int w1 = 0;
|
int w1 = 0;
|
||||||
int h1 = 0;
|
int h1 = 0;
|
||||||
Display.Render.setFont(Utils.getFont(small));
|
Display.Render.glSetFont(Utils.getFont(small));
|
||||||
if (minus) {
|
if (minus) {
|
||||||
w1 = getStringWidth(numerator);
|
w1 = glGetStringWidth(numerator);
|
||||||
h1 = Render.getFontHeight();
|
h1 = Render.glGetCurrentFontHeight();
|
||||||
} else {
|
} else {
|
||||||
w1 = ((Function) var1).getWidth();
|
w1 = ((Function) var1).getWidth();
|
||||||
h1 = ((Function) var1).getHeight();
|
h1 = ((Function) var1).getHeight();
|
||||||
@ -133,8 +142,8 @@ public class Division extends FunctionTwoValues {
|
|||||||
maxw = 1 + w2;
|
maxw = 1 + w2;
|
||||||
}
|
}
|
||||||
if (minus && drawMinus) {
|
if (minus && drawMinus) {
|
||||||
minusw = getStringWidth("-") + 1;
|
minusw = glGetStringWidth("-") + 1;
|
||||||
minush = Render.getFontHeight();
|
minush = Render.glGetCurrentFontHeight();
|
||||||
glDrawStringLeft(x+1, y + h1 + 1 + 1 - (minush / 2), "-");
|
glDrawStringLeft(x+1, y + h1 + 1 + 1 - (minush / 2), "-");
|
||||||
glDrawStringLeft((int) (x+1 + minusw + 1 + (maxw - w1) / 2d), y, numerator);
|
glDrawStringLeft((int) (x+1 + minusw + 1 + (maxw - w1) / 2d), y, numerator);
|
||||||
} else {
|
} else {
|
||||||
@ -189,7 +198,7 @@ public class Division extends FunctionTwoValues {
|
|||||||
}
|
}
|
||||||
int w1 = 0;
|
int w1 = 0;
|
||||||
if (minus) {
|
if (minus) {
|
||||||
w1 = getStringWidth(numerator);
|
w1 = glGetStringWidth(numerator);
|
||||||
} else {
|
} else {
|
||||||
w1 = variable1.getWidth();
|
w1 = variable1.getWidth();
|
||||||
}
|
}
|
||||||
@ -201,7 +210,7 @@ public class Division extends FunctionTwoValues {
|
|||||||
maxw = w2+1;
|
maxw = w2+1;
|
||||||
}
|
}
|
||||||
if (minus && drawMinus) {
|
if (minus && drawMinus) {
|
||||||
return 1 + getStringWidth("-") + 1 + maxw;
|
return 1 + glGetStringWidth("-") + 1 + maxw;
|
||||||
} else {
|
} else {
|
||||||
return 1 + maxw;
|
return 1 + maxw;
|
||||||
}
|
}
|
||||||
|
66
src/org/warp/picalculator/math/functions/EmptyNumber.java
Normal file
66
src/org/warp/picalculator/math/functions/EmptyNumber.java
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
import org.warp.picalculator.device.graphicengine.Display;
|
||||||
|
|
||||||
|
public class EmptyNumber implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSymbol() {
|
||||||
|
return " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Function> solveOneStep() throws Error {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSolved() throws Error {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void generateGraphics() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(int x, int y) {
|
||||||
|
Display.Render.glDrawStringLeft(x, y, " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return Display.Render.glGetStringWidth(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
return Display.Render.glGetCurrentFontHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLine() {
|
||||||
|
return Display.Render.glGetCurrentFontHeight()/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Function setParent(Function parent) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Function getParent() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSmall(boolean small) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -20,31 +20,35 @@ import org.warp.picalculator.math.MathematicalSymbols;
|
|||||||
import org.warp.picalculator.math.Variable;
|
import org.warp.picalculator.math.Variable;
|
||||||
import org.warp.picalculator.math.Variables;
|
import org.warp.picalculator.math.Variables;
|
||||||
|
|
||||||
|
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
||||||
|
|
||||||
public class Expression extends FunctionMultipleValues {
|
public class Expression extends FunctionMultipleValues {
|
||||||
|
|
||||||
public Expression() {
|
public Expression(Function parent) {
|
||||||
super();
|
super(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expression(Function[] values) {
|
public Expression(Function parent, Function[] values) {
|
||||||
super(values);
|
super(parent, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean initialParenthesis = false;
|
private boolean initialParenthesis = false;
|
||||||
|
private Function parent = null;
|
||||||
|
|
||||||
public Expression(String string) throws Error {
|
public Expression(Function parent, String string) throws Error {
|
||||||
this(string, "", true);
|
this(parent, string, "", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expression(String string, String debugSpaces, boolean initialParenthesis) throws Error {
|
public Expression(Function parent, String string, String debugSpaces, boolean initialParenthesis) throws Error {
|
||||||
super();
|
super(parent);
|
||||||
|
this.parent = parent;
|
||||||
this.initialParenthesis = initialParenthesis;
|
this.initialParenthesis = initialParenthesis;
|
||||||
boolean isNumber = false;
|
boolean isNumber = false;
|
||||||
|
|
||||||
// Determine if the expression is already a number:
|
// Determine if the expression is already a number:
|
||||||
// Determina se l'espressione è già un numero:
|
// Determina se l'espressione è già un numero:
|
||||||
try {
|
try {
|
||||||
new Number(string);
|
new Number(this, string);
|
||||||
isNumber = true;
|
isNumber = true;
|
||||||
} catch (NumberFormatException ex) {
|
} catch (NumberFormatException ex) {
|
||||||
isNumber = false;
|
isNumber = false;
|
||||||
@ -53,10 +57,12 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
String processExpression = string;
|
String processExpression = string;
|
||||||
Utils.debug.println(debugSpaces + "•Analyzing expression:" + processExpression);
|
Utils.debug.println(debugSpaces + "•Analyzing expression:" + processExpression);
|
||||||
|
|
||||||
|
isNumber = false; //TODO: rimuovere isNumber, alcune semplificazione come la divisione per zero altrimenti verrebbero saltate.
|
||||||
|
|
||||||
if (isNumber){
|
if (isNumber){
|
||||||
// If the expression is already a number:
|
// If the expression is already a number:
|
||||||
// Se l'espressione è già un numero:
|
// Se l'espressione è già un numero:
|
||||||
Number t = new Number(string);
|
Number t = new Number(this, string);
|
||||||
setVariables(new Function[] { t });
|
setVariables(new Function[] { t });
|
||||||
Utils.debug.println(debugSpaces + "•Result:" + t.toString());
|
Utils.debug.println(debugSpaces + "•Result:" + t.toString());
|
||||||
} else {
|
} else {
|
||||||
@ -95,7 +101,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
symbolsChanged = true;
|
symbolsChanged = true;
|
||||||
String correzione = "+";
|
String correzione = "+";
|
||||||
processExpression = processExpression.substring(0, matcher.start(0) + 1) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length());
|
processExpression = processExpression.substring(0, matcher.start(0)) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length());
|
||||||
matcher = pattern.matcher(processExpression);
|
matcher = pattern.matcher(processExpression);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,11 +122,12 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
processExpression = processExpression.replace("(+", "(");
|
processExpression = processExpression.replace("(+", "(");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cambia i segni appena prima le parentesi
|
// // Cambia i segni appena prima le parentesi
|
||||||
if (processExpression.contains("-(")) {
|
// if (processExpression.contains("-(")) {
|
||||||
symbolsChanged = true;
|
// symbolsChanged = true;
|
||||||
processExpression = processExpression.replace("-(", "-1*(");
|
// processExpression = processExpression.replace("-(", "-1*(");
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Rimuovi i segni appena dopo l'inizio
|
// Rimuovi i segni appena dopo l'inizio
|
||||||
if (processExpression.startsWith("+")) {
|
if (processExpression.startsWith("+")) {
|
||||||
symbolsChanged = true;
|
symbolsChanged = true;
|
||||||
@ -137,25 +144,46 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
processExpression = processExpression.substring(0, matcher.start(0) + 1) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length());
|
processExpression = processExpression.substring(0, matcher.start(0) + 1) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length());
|
||||||
matcher = pattern.matcher(processExpression);
|
matcher = pattern.matcher(processExpression);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Correggi i segni - in −
|
||||||
|
processExpression = processExpression.replace("-", MathematicalSymbols.SUBTRACTION);
|
||||||
|
|
||||||
// Correggi i segni - in +-
|
// Correggi i segni − dopo di espressioni o funzioni SN in -
|
||||||
pattern = Pattern.compile("[^" + Utils.ArrayToRegex(concat(concat(MathematicalSymbols.functions(), new String[] { MathematicalSymbols.PARENTHESIS_OPEN }), MathematicalSymbols.signums(true, true))) + "]-");
|
pattern = Pattern.compile("[" + Utils.ArrayToRegex(concat(concat(concat(MathematicalSymbols.functions(), MathematicalSymbols.variables()), new String[] { MathematicalSymbols.PARENTHESIS_OPEN }), MathematicalSymbols.signums(true, true))) + "]" + MathematicalSymbols.SUBTRACTION);
|
||||||
matcher = pattern.matcher(processExpression);
|
matcher = pattern.matcher(processExpression);
|
||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
symbolsChanged = true;
|
symbolsChanged = true;
|
||||||
String correzione = "+-";
|
String correzione = MathematicalSymbols.MINUS;
|
||||||
processExpression = processExpression.substring(0, matcher.start(0) + 1) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length());
|
processExpression = processExpression.substring(0, matcher.start(0) + 1) + correzione + processExpression.substring(matcher.start(0) + 2, processExpression.length());
|
||||||
matcher = pattern.matcher(processExpression);
|
matcher = pattern.matcher(processExpression);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cambia il segno iniziale − in -
|
||||||
|
if (processExpression.startsWith("−")) {
|
||||||
|
symbolsChanged = true;
|
||||||
|
processExpression = "-" + processExpression.substring(1, processExpression.length());
|
||||||
|
}
|
||||||
|
|
||||||
if (symbolsChanged) {
|
if (symbolsChanged) {
|
||||||
Utils.debug.println(debugSpaces + "•Resolved signs:" + processExpression);
|
Utils.debug.println(debugSpaces + "•Resolved signs:" + processExpression);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Aggiungi le parentesi implicite per le potenze con una incognita
|
||||||
|
pattern = Pattern.compile("(?<!(?:\\(|^))(["+Utils.ArrayToRegex(MathematicalSymbols.variables())+"]+"+MathematicalSymbols.POWER+"[^" + Utils.ArrayToRegex(Utils.add(concat(MathematicalSymbols.functionsNSN(), concat(MathematicalSymbols.signums(true, true), MathematicalSymbols.genericSyntax())), ")")) + "])(?!\\))");
|
||||||
|
matcher = pattern.matcher(processExpression);
|
||||||
|
symbolsChanged = false;
|
||||||
|
while (matcher.find()) {
|
||||||
|
symbolsChanged = true;
|
||||||
|
String correzione = "("+matcher.group().replace(MathematicalSymbols.POWER, "⑴")+")";
|
||||||
|
processExpression = processExpression.substring(0, matcher.start(0)) + correzione + processExpression.substring(matcher.start(0) + matcher.group(0).length(), processExpression.length());
|
||||||
|
matcher = pattern.matcher(processExpression);
|
||||||
|
}
|
||||||
|
|
||||||
|
processExpression = processExpression.replace("⑴", MathematicalSymbols.POWER);
|
||||||
|
|
||||||
// Aggiungi i segni * accanto alle parentesi
|
// Aggiungi i segni * accanto alle parentesi
|
||||||
pattern = Pattern.compile("\\([^\\(]+?\\)");
|
pattern = Pattern.compile("\\([^\\(]+?\\)");
|
||||||
matcher = pattern.matcher(processExpression);
|
matcher = pattern.matcher(processExpression);
|
||||||
symbolsChanged = false;
|
|
||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
symbolsChanged = true;
|
symbolsChanged = true;
|
||||||
// sistema i segni * impliciti prima e dopo l'espressione.
|
// sistema i segni * impliciti prima e dopo l'espressione.
|
||||||
@ -185,7 +213,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
debugSpaces += " ";
|
debugSpaces += " ";
|
||||||
|
|
||||||
// Convert the expression to a list of objects
|
// Convert the expression to a list of objects
|
||||||
Expression imputRawParenthesis = new Expression();
|
Expression imputRawParenthesis = new Expression(this);
|
||||||
imputRawParenthesis.setVariables(new Function[] {});
|
imputRawParenthesis.setVariables(new Function[] {});
|
||||||
String tmp = "";
|
String tmp = "";
|
||||||
final String[] functions = concat(concat(concat(concat(MathematicalSymbols.functions(), MathematicalSymbols.parentheses()), MathematicalSymbols.signums(true, true)), MathematicalSymbols.variables()), MathematicalSymbols.genericSyntax());
|
final String[] functions = concat(concat(concat(concat(MathematicalSymbols.functions(), MathematicalSymbols.parentheses()), MathematicalSymbols.signums(true, true)), MathematicalSymbols.variables()), MathematicalSymbols.genericSyntax());
|
||||||
@ -199,28 +227,34 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
Function f = null;
|
Function f = null;
|
||||||
switch (charI) {
|
switch (charI) {
|
||||||
case MathematicalSymbols.SUM:
|
case MathematicalSymbols.SUM:
|
||||||
f = new Sum(null, null);
|
f = new Sum(this, null, null);
|
||||||
break;
|
break;
|
||||||
case MathematicalSymbols.SUM_SUBTRACTION:
|
case MathematicalSymbols.SUM_SUBTRACTION:
|
||||||
f = new SumSubtraction(null, null);
|
f = new SumSubtraction(this, null, null);
|
||||||
|
break;
|
||||||
|
case MathematicalSymbols.SUBTRACTION:
|
||||||
|
f = new Subtraction(this, null, null);
|
||||||
|
break;
|
||||||
|
case MathematicalSymbols.MINUS:
|
||||||
|
f = new Negative(this, null);
|
||||||
break;
|
break;
|
||||||
case MathematicalSymbols.MULTIPLICATION:
|
case MathematicalSymbols.MULTIPLICATION:
|
||||||
f = new Multiplication(null, null);
|
f = new Multiplication(this, null, null);
|
||||||
break;
|
break;
|
||||||
case MathematicalSymbols.PRIORITARY_MULTIPLICATION:
|
case MathematicalSymbols.PRIORITARY_MULTIPLICATION:
|
||||||
f = new PrioritaryMultiplication(null, null);
|
f = new PrioritaryMultiplication(this, null, null);
|
||||||
break;
|
break;
|
||||||
case MathematicalSymbols.DIVISION:
|
case MathematicalSymbols.DIVISION:
|
||||||
f = new Division(null, null);
|
f = new Division(this, null, null);
|
||||||
break;
|
break;
|
||||||
case MathematicalSymbols.NTH_ROOT:
|
case MathematicalSymbols.NTH_ROOT:
|
||||||
f = new Root(null, null);
|
f = new Root(this, null, null);
|
||||||
break;
|
break;
|
||||||
case MathematicalSymbols.SQUARE_ROOT:
|
case MathematicalSymbols.SQUARE_ROOT:
|
||||||
f = new RootSquare(null);
|
f = new RootSquare(this, null);
|
||||||
break;
|
break;
|
||||||
case MathematicalSymbols.POWER:
|
case MathematicalSymbols.POWER:
|
||||||
f = new Power(null, null);
|
f = new Power(this, null, null);
|
||||||
break;
|
break;
|
||||||
case MathematicalSymbols.PARENTHESIS_OPEN:
|
case MathematicalSymbols.PARENTHESIS_OPEN:
|
||||||
// Find the last closed parenthesis
|
// Find the last closed parenthesis
|
||||||
@ -253,7 +287,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
tmpExpr += processExpression.charAt(i);
|
tmpExpr += processExpression.charAt(i);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
f = new Expression(tmpExpr, debugSpaces, false);
|
f = new Expression(this, tmpExpr, debugSpaces, false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (Utils.isInArray(charI, MathematicalSymbols.variables())) {
|
if (Utils.isInArray(charI, MathematicalSymbols.variables())) {
|
||||||
@ -265,7 +299,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
newVariableList.add(var1);
|
newVariableList.add(var1);
|
||||||
iy = new Variables(newVariableList.toArray(new Variable[newVariableList.size()]));
|
iy = new Variables(newVariableList.toArray(new Variable[newVariableList.size()]));
|
||||||
na = na.setVariableY(iy);
|
na = na.setVariableY(iy);
|
||||||
f = new Number(na);
|
f = new Number(this, na);
|
||||||
} else {
|
} else {
|
||||||
throw new java.lang.RuntimeException("Il carattere " + charI + " non è tra le funzioni designate!\nAggiungerlo ad esse o rimuovere il carattere dall'espressione!");
|
throw new java.lang.RuntimeException("Il carattere " + charI + " non è tra le funzioni designate!\nAggiungerlo ad esse o rimuovere il carattere dall'espressione!");
|
||||||
}
|
}
|
||||||
@ -275,31 +309,37 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
} else if (f instanceof Number) {
|
} else if (f instanceof Number) {
|
||||||
if (imputRawParenthesis.getVariablesLength() == 0) {
|
if (imputRawParenthesis.getVariablesLength() == 0) {
|
||||||
if (tmp.length() > 0) {
|
if (tmp.length() > 0) {
|
||||||
imputRawParenthesis.addVariableToEnd(new Number(tmp));
|
imputRawParenthesis.addVariableToEnd(new Number(this, tmp));
|
||||||
Utils.debug.println(debugSpaces + "•Added value to expression:" + tmp);
|
Utils.debug.println(debugSpaces + "•Added value to expression:" + tmp);
|
||||||
imputRawParenthesis.addVariableToEnd(new PrioritaryMultiplication(null, null));
|
imputRawParenthesis.addVariableToEnd(new PrioritaryMultiplication(this, null, null));
|
||||||
Utils.debug.println(debugSpaces + "•Added variable to expression:" + new PrioritaryMultiplication(null, null).getSymbol());
|
Utils.debug.println(debugSpaces + "•Added variable to expression:" + new PrioritaryMultiplication(this, null, null).getSymbol());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (tmp.length() > 0) {
|
if (tmp.length() > 0) {
|
||||||
if (imputRawParenthesis.getVariable(imputRawParenthesis.getVariablesLength() - 1) instanceof Number) {
|
if (imputRawParenthesis.getVariable(imputRawParenthesis.getVariablesLength() - 1) instanceof Number) {
|
||||||
imputRawParenthesis.addVariableToEnd(new PrioritaryMultiplication(null, null));
|
imputRawParenthesis.addVariableToEnd(new PrioritaryMultiplication(this, null, null));
|
||||||
Utils.debug.println(debugSpaces + "•Added variable to expression:" + new PrioritaryMultiplication(null, null).getSymbol());
|
Utils.debug.println(debugSpaces + "•Added variable to expression:" + new PrioritaryMultiplication(this, null, null).getSymbol());
|
||||||
}
|
}
|
||||||
if (tmp.equals("-")) {
|
if (tmp.equals("-")) {
|
||||||
tmp = "-1";
|
imputRawParenthesis.addVariableToEnd(new Subtraction(this, null, null));
|
||||||
|
} else {
|
||||||
|
imputRawParenthesis.addVariableToEnd(new Number(this, tmp));
|
||||||
|
Utils.debug.println(debugSpaces + "•Added value to expression:" + tmp);
|
||||||
}
|
}
|
||||||
imputRawParenthesis.addVariableToEnd(new Number(tmp));
|
|
||||||
Utils.debug.println(debugSpaces + "•Added value to expression:" + tmp);
|
|
||||||
}
|
}
|
||||||
if (tmp.length() > 0 || imputRawParenthesis.getVariable(imputRawParenthesis.getVariablesLength() - 1) instanceof Number) {
|
if (tmp.length() > 0 || imputRawParenthesis.getVariable(imputRawParenthesis.getVariablesLength() - 1) instanceof Number) {
|
||||||
imputRawParenthesis.addVariableToEnd(new PrioritaryMultiplication(null, null));
|
imputRawParenthesis.addVariableToEnd(new PrioritaryMultiplication(this, null, null));
|
||||||
Utils.debug.println(debugSpaces + "•Added variable to expression:" + new PrioritaryMultiplication(null, null).getSymbol());
|
Utils.debug.println(debugSpaces + "•Added variable to expression:" + new PrioritaryMultiplication(this, null, null).getSymbol());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (tmp.length() != 0) {
|
if (tmp.length() != 0) {
|
||||||
imputRawParenthesis.addVariableToEnd(new Number(tmp));
|
if (tmp.equals("-")) {
|
||||||
|
if (tmp.equals("-")) {
|
||||||
|
tmp = "-1";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
imputRawParenthesis.addVariableToEnd(new Number(this, tmp));
|
||||||
Utils.debug.println(debugSpaces + "•Added variable to expression:" + tmp);
|
Utils.debug.println(debugSpaces + "•Added variable to expression:" + tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -322,7 +362,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
if (tmp.length() > 0) {
|
if (tmp.length() > 0) {
|
||||||
Utils.debug.println(debugSpaces + "•Added variable to expression:" + tmp);
|
Utils.debug.println(debugSpaces + "•Added variable to expression:" + tmp);
|
||||||
try {
|
try {
|
||||||
imputRawParenthesis.addVariableToEnd(new Number(tmp));
|
imputRawParenthesis.addVariableToEnd(new Number(this, tmp));
|
||||||
} catch (NumberFormatException ex) {
|
} catch (NumberFormatException ex) {
|
||||||
throw new Error(Errors.SYNTAX_ERROR);
|
throw new Error(Errors.SYNTAX_ERROR);
|
||||||
}
|
}
|
||||||
@ -366,7 +406,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
oldFunctionsArray[i-1] = null;
|
oldFunctionsArray[i-1] = null;
|
||||||
oldFunctionsList.remove(oldFunctionsList.size()-1);
|
oldFunctionsList.remove(oldFunctionsList.size()-1);
|
||||||
i -= 1;
|
i -= 1;
|
||||||
funzione = new RootSquare(null);
|
funzione = new RootSquare(this, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Aggiunta della funzione alla lista grezza
|
//Aggiunta della funzione alla lista grezza
|
||||||
@ -399,7 +439,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
System.out.println("WARN: ---> POSSIBILE ERRORE????? <---");// BOH
|
System.out.println("WARN: ---> POSSIBILE ERRORE????? <---");// BOH
|
||||||
// throw new Errore(Errori.SYNTAX_ERROR);
|
// throw new Errore(Errori.SYNTAX_ERROR);
|
||||||
while (oldFunctionsList.size() > 1) {
|
while (oldFunctionsList.size() > 1) {
|
||||||
oldFunctionsList.set(0, new Multiplication(oldFunctionsList.get(0), oldFunctionsList.remove(1)));
|
oldFunctionsList.set(0, new Multiplication(this, oldFunctionsList.get(0), oldFunctionsList.remove(1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Utils.debug.println(debugSpaces + " •Phase: "+step);
|
Utils.debug.println(debugSpaces + " •Phase: "+step);
|
||||||
@ -408,7 +448,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
if (funzioneTMP instanceof FunctionTwoValues) {
|
if (funzioneTMP instanceof FunctionTwoValues) {
|
||||||
if (step != "SN Functions") {
|
if (step != "SN Functions") {
|
||||||
if (
|
if (
|
||||||
(step == "sums" && (funzioneTMP instanceof Sum || funzioneTMP instanceof SumSubtraction) == true && ((funzioneTMP instanceof AnteriorFunction && ((AnteriorFunction) funzioneTMP).variable == null) || (funzioneTMP instanceof FunctionTwoValues && ((FunctionTwoValues) funzioneTMP).variable1 == null && ((FunctionTwoValues) funzioneTMP).variable2 == null) || (!(funzioneTMP instanceof AnteriorFunction) && !(funzioneTMP instanceof FunctionTwoValues))))
|
(step == "sums" && (funzioneTMP instanceof Sum || funzioneTMP instanceof SumSubtraction || funzioneTMP instanceof Subtraction) == true && ((funzioneTMP instanceof AnteriorFunction && ((AnteriorFunction) funzioneTMP).variable == null) || (funzioneTMP instanceof FunctionTwoValues && ((FunctionTwoValues) funzioneTMP).variable1 == null && ((FunctionTwoValues) funzioneTMP).variable2 == null) || (!(funzioneTMP instanceof AnteriorFunction) && !(funzioneTMP instanceof FunctionTwoValues))))
|
||||||
||
|
||
|
||||||
(
|
(
|
||||||
step.equals("prioritary multiplications")
|
step.equals("prioritary multiplications")
|
||||||
@ -441,6 +481,8 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
&&
|
&&
|
||||||
(funzioneTMP instanceof SumSubtraction) == false
|
(funzioneTMP instanceof SumSubtraction) == false
|
||||||
&&
|
&&
|
||||||
|
(funzioneTMP instanceof Subtraction) == false
|
||||||
|
&&
|
||||||
(funzioneTMP instanceof Multiplication) == false
|
(funzioneTMP instanceof Multiplication) == false
|
||||||
&&
|
&&
|
||||||
(funzioneTMP instanceof PrioritaryMultiplication) == false
|
(funzioneTMP instanceof PrioritaryMultiplication) == false
|
||||||
@ -580,7 +622,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
if (f instanceof Number) {
|
if (f instanceof Number) {
|
||||||
ret.add(f);
|
ret.add(f);
|
||||||
} else {
|
} else {
|
||||||
ret.add(new Expression(new Function[]{(Function) f}));
|
ret.add(new Expression(this, new Function[]{(Function) f}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -590,7 +632,7 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
if (f.isSolved() == false) {
|
if (f.isSolved() == false) {
|
||||||
List<Function> partial = f.solveOneStep();
|
List<Function> partial = f.solveOneStep();
|
||||||
for (Function fnc : partial) {
|
for (Function fnc : partial) {
|
||||||
ret.add(new Expression(new Function[]{(Function) fnc}));
|
ret.add(new Expression(this, new Function[]{(Function) fnc}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -612,12 +654,18 @@ public class Expression extends FunctionMultipleValues {
|
|||||||
|
|
||||||
public boolean parenthesesNeeded() {
|
public boolean parenthesesNeeded() {
|
||||||
boolean parenthesesneeded = true;
|
boolean parenthesesneeded = true;
|
||||||
if (initialParenthesis) {
|
if (initialParenthesis | parent instanceof Division) {
|
||||||
parenthesesneeded = false;
|
parenthesesneeded = false;
|
||||||
} else {
|
} else {
|
||||||
if (variables.length == 1) {
|
if (variables.length == 1) {
|
||||||
if (variables[0] instanceof Division) {
|
if (variables[0] instanceof Division) {
|
||||||
parenthesesneeded = false;
|
parenthesesneeded = false;
|
||||||
|
} else if (variables[0] instanceof Power) {
|
||||||
|
if (((Power)variables[0]).getVariable1() instanceof Number && ((Number)((Power)variables[0]).getVariable1()).soloIncognitaSemplice()) {
|
||||||
|
parenthesesneeded = false;
|
||||||
|
} else {
|
||||||
|
parenthesesneeded = true;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
parenthesesneeded = true;
|
parenthesesneeded = true;
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,10 @@ public interface Function {
|
|||||||
|
|
||||||
public int getLine();
|
public int getLine();
|
||||||
|
|
||||||
|
public Function setParent(Function parent);
|
||||||
|
|
||||||
|
public Function getParent();
|
||||||
|
|
||||||
public void setSmall(boolean small);
|
public void setSmall(boolean small);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -8,14 +8,17 @@ import org.warp.picalculator.Error;
|
|||||||
import com.rits.cloning.Cloner;
|
import com.rits.cloning.Cloner;
|
||||||
|
|
||||||
public abstract class FunctionMultipleValues implements Function {
|
public abstract class FunctionMultipleValues implements Function {
|
||||||
public FunctionMultipleValues() {
|
public FunctionMultipleValues(Function parent) {
|
||||||
|
setParent(parent);
|
||||||
setVariables(new Function[] {});
|
setVariables(new Function[] {});
|
||||||
}
|
}
|
||||||
|
|
||||||
public FunctionMultipleValues(Function[] values) {
|
public FunctionMultipleValues(Function parent, Function[] values) {
|
||||||
|
setParent(parent);
|
||||||
setVariables(values);
|
setVariables(values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Function parent;
|
||||||
protected Function[] variables;
|
protected Function[] variables;
|
||||||
protected int width;
|
protected int width;
|
||||||
protected int height;
|
protected int height;
|
||||||
@ -27,6 +30,9 @@ public abstract class FunctionMultipleValues implements Function {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setVariables(Function[] value) {
|
public void setVariables(Function[] value) {
|
||||||
|
for (Function f : value) {
|
||||||
|
f.setParent(this);
|
||||||
|
}
|
||||||
variables = value;
|
variables = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,6 +41,7 @@ public abstract class FunctionMultipleValues implements Function {
|
|||||||
Function[] tmp = new Function[vsize];
|
Function[] tmp = new Function[vsize];
|
||||||
for (int i = 0; i < vsize; i++) {
|
for (int i = 0; i < vsize; i++) {
|
||||||
tmp[i] = value.get(i);
|
tmp[i] = value.get(i);
|
||||||
|
tmp[i].setParent(this);
|
||||||
}
|
}
|
||||||
variables = tmp;
|
variables = tmp;
|
||||||
}
|
}
|
||||||
@ -44,10 +51,12 @@ public abstract class FunctionMultipleValues implements Function {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setVariable(int index, Function value) {
|
public void setVariable(int index, Function value) {
|
||||||
|
value.setParent(this);
|
||||||
variables[index] = value;
|
variables[index] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addVariableToEnd(Function value) {
|
public void addVariableToEnd(Function value) {
|
||||||
|
value.setParent(this);
|
||||||
int index = variables.length;
|
int index = variables.length;
|
||||||
setVariablesLength(index + 1);
|
setVariablesLength(index + 1);
|
||||||
variables[index] = value;
|
variables[index] = value;
|
||||||
@ -76,6 +85,16 @@ public abstract class FunctionMultipleValues implements Function {
|
|||||||
|
|
||||||
protected abstract boolean isSolvable() throws Error;
|
protected abstract boolean isSolvable() throws Error;
|
||||||
|
|
||||||
|
|
||||||
|
public Function setParent(Function value) {
|
||||||
|
parent = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Function getParent() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract void generateGraphics();
|
public abstract void generateGraphics();
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package org.warp.picalculator.math.functions;
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.getStringWidth;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glGetStringWidth;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -14,12 +14,16 @@ import org.warp.picalculator.device.graphicengine.Display;
|
|||||||
import com.rits.cloning.Cloner;
|
import com.rits.cloning.Cloner;
|
||||||
|
|
||||||
public abstract class FunctionTwoValues implements Function {
|
public abstract class FunctionTwoValues implements Function {
|
||||||
public FunctionTwoValues(Function value1, Function value2) {
|
public FunctionTwoValues(Function parent, Function value1, Function value2) {
|
||||||
setVariable1(value1);
|
this.parent = parent;
|
||||||
setVariable2(value2);
|
variable1 = value1;
|
||||||
|
variable2 = value2;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Function variable1 = (Function) new Number(Rational.ZERO);
|
protected Function parent;
|
||||||
|
|
||||||
|
protected Function variable1 = (Function) new Number(null, Rational.ZERO);
|
||||||
|
protected Function variable2 = (Function) new Number(null, Rational.ZERO);
|
||||||
protected int width;
|
protected int width;
|
||||||
protected int height;
|
protected int height;
|
||||||
protected int line;
|
protected int line;
|
||||||
@ -30,16 +34,25 @@ public abstract class FunctionTwoValues implements Function {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setVariable1(Function value) {
|
public void setVariable1(Function value) {
|
||||||
|
value.setParent(this);
|
||||||
variable1 = value;
|
variable1 = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Function variable2 = (Function) new Number(Rational.ZERO);
|
public Function getParent() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Function setParent(Function value) {
|
||||||
|
parent = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public Function getVariable2() {
|
public Function getVariable2() {
|
||||||
return variable2;
|
return variable2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVariable2(Function value) {
|
public void setVariable2(Function value) {
|
||||||
|
value.setParent(this);
|
||||||
variable2 = value;
|
variable2 = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,9 +89,9 @@ public abstract class FunctionTwoValues implements Function {
|
|||||||
variable1.draw(dx + x, ln - variable1.getLine() + y);
|
variable1.draw(dx + x, ln - variable1.getLine() + y);
|
||||||
dx += 1+variable1.getWidth();
|
dx += 1+variable1.getWidth();
|
||||||
if (drawSignum()) {
|
if (drawSignum()) {
|
||||||
Display.Render.setFont(Utils.getFont(small));
|
Display.Render.glSetFont(Utils.getFont(small));
|
||||||
glDrawStringLeft(dx + x, ln - Utils.getFontHeight(small) / 2 + y, getSymbol());
|
glDrawStringLeft(dx + x, ln - Utils.getFontHeight(small) / 2 + y, getSymbol());
|
||||||
dx += getStringWidth(getSymbol());
|
dx += glGetStringWidth(getSymbol());
|
||||||
}
|
}
|
||||||
variable2.draw(dx + x, ln - variable2.getLine() + y);
|
variable2.draw(dx + x, ln - variable2.getLine() + y);
|
||||||
}
|
}
|
||||||
@ -124,7 +137,7 @@ public abstract class FunctionTwoValues implements Function {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected int calcWidth() {
|
protected int calcWidth() {
|
||||||
return variable1.getWidth() + 1 + (drawSignum() ? getStringWidth(getSymbol()) : 0) + variable2.getWidth();
|
return variable1.getWidth() + 1 + (drawSignum() ? glGetStringWidth(getSymbol()) : 0) + variable2.getWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int calcHeight() {
|
protected int calcHeight() {
|
||||||
|
93
src/org/warp/picalculator/math/functions/Joke.java
Normal file
93
src/org/warp/picalculator/math/functions/Joke.java
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
import org.warp.picalculator.Utils;
|
||||||
|
import org.warp.picalculator.device.PIDisplay;
|
||||||
|
import org.warp.picalculator.device.graphicengine.Display;
|
||||||
|
import org.warp.picalculator.device.graphicengine.RAWFont;
|
||||||
|
|
||||||
|
public class Joke implements Function {
|
||||||
|
|
||||||
|
public static final byte FISH = 0;
|
||||||
|
public static final byte TORNADO = 1;
|
||||||
|
public static final byte SHARKNADO = 2;
|
||||||
|
private static final String[] jokes = new String[]{"♓", "TORNADO", "SHARKNADO"};
|
||||||
|
private static final int[] jokesFont = new int[]{4, -1, -1};
|
||||||
|
private final byte joke;
|
||||||
|
|
||||||
|
public Joke(byte joke) {
|
||||||
|
this.joke = joke;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSymbol() {
|
||||||
|
return "joke";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Function> solveOneStep() throws Error {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSolved() throws Error {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void generateGraphics() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(int x, int y) {
|
||||||
|
RAWFont rf = Display.Render.currentFont;
|
||||||
|
if (jokesFont[joke] >= 0) {
|
||||||
|
Display.Render.glSetFont(PIDisplay.fonts[jokesFont[joke]]);
|
||||||
|
}
|
||||||
|
Display.Render.glDrawStringLeft(x, y, jokes[joke]);
|
||||||
|
if (jokesFont[joke] >= 0) {
|
||||||
|
Display.Render.glSetFont(rf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
if (jokesFont[joke] >= 0) {
|
||||||
|
return Display.Render.glGetStringWidth(PIDisplay.fonts[jokesFont[joke]], jokes[joke]);
|
||||||
|
} else {
|
||||||
|
return Display.Render.glGetStringWidth(jokes[joke]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
if (jokesFont[joke] >= 0) {
|
||||||
|
return PIDisplay.fonts[jokesFont[joke]].charH;
|
||||||
|
} else {
|
||||||
|
return Display.Render.glGetCurrentFontHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLine() {
|
||||||
|
return getHeight()/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Function setParent(Function value) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Function getParent() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSmall(boolean small) {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -9,11 +9,13 @@ import org.warp.picalculator.Errors;
|
|||||||
import org.warp.picalculator.Utils;
|
import org.warp.picalculator.Utils;
|
||||||
import org.warp.picalculator.math.MathematicalSymbols;
|
import org.warp.picalculator.math.MathematicalSymbols;
|
||||||
import org.warp.picalculator.math.Variable;
|
import org.warp.picalculator.math.Variable;
|
||||||
|
import org.warp.picalculator.math.rules.NumberRule1;
|
||||||
|
import org.warp.picalculator.math.rules.NumberRule2;
|
||||||
|
|
||||||
public class Multiplication extends FunctionTwoValues {
|
public class Multiplication extends FunctionTwoValues {
|
||||||
|
|
||||||
public Multiplication(Function value1, Function value2) {
|
public Multiplication(Function parent, Function value1, Function value2) {
|
||||||
super(value1, value2);
|
super(parent, value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -26,13 +28,19 @@ public class Multiplication extends FunctionTwoValues {
|
|||||||
if (variable1 instanceof Number & variable2 instanceof Number) {
|
if (variable1 instanceof Number & variable2 instanceof Number) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (NumberRule1.compare(this)) return true;
|
||||||
|
if (NumberRule2.compare(this)) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Function> solveOneStep() throws Error {
|
public List<Function> solveOneStep() throws Error {
|
||||||
ArrayList<Function> result = new ArrayList<>();
|
List<Function> result = new ArrayList<>();
|
||||||
if (variable1.isSolved() & variable2.isSolved()) {
|
if (NumberRule1.compare(this)) {
|
||||||
|
result = NumberRule1.execute(this);
|
||||||
|
} else if (NumberRule2.compare(this)) {
|
||||||
|
result = NumberRule2.execute(this);
|
||||||
|
} else if (variable1.isSolved() & variable2.isSolved()) {
|
||||||
result.add(((Number)variable1).multiply((Number)variable2));
|
result.add(((Number)variable1).multiply((Number)variable2));
|
||||||
} else {
|
} else {
|
||||||
List<Function> l1 = new ArrayList<Function>();
|
List<Function> l1 = new ArrayList<Function>();
|
||||||
@ -51,7 +59,7 @@ public class Multiplication extends FunctionTwoValues {
|
|||||||
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
||||||
|
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new Multiplication(f[0], f[1]));
|
result.add(new Multiplication(this.parent, f[0], f[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -93,9 +101,19 @@ public class Multiplication extends FunctionTwoValues {
|
|||||||
} else if (tmpVar[val] instanceof Power) {
|
} else if (tmpVar[val] instanceof Power) {
|
||||||
tmpVar[val] = ((Power) tmpVar[val]).variable1;
|
tmpVar[val] = ((Power) tmpVar[val]).variable1;
|
||||||
} else if (tmpVar[val] instanceof Root) {
|
} else if (tmpVar[val] instanceof Root) {
|
||||||
|
if (val == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
ok[val] = true;
|
ok[val] = true;
|
||||||
} else if (tmpVar[val] instanceof RootSquare) {
|
} else if (tmpVar[val] instanceof RootSquare) {
|
||||||
|
if (val == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
ok[val] = true;
|
ok[val] = true;
|
||||||
|
} else if (tmpVar[val] instanceof Undefined) {
|
||||||
|
break;
|
||||||
|
} else if (tmpVar[val] instanceof Joke) {
|
||||||
|
break;
|
||||||
} else if (tmpVar[val] instanceof Expression) {
|
} else if (tmpVar[val] instanceof Expression) {
|
||||||
ok[0] = true;
|
ok[0] = true;
|
||||||
ok[1] = true;
|
ok[1] = true;
|
||||||
|
96
src/org/warp/picalculator/math/functions/Negative.java
Normal file
96
src/org/warp/picalculator/math/functions/Negative.java
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.nevec.rjm.NumeroAvanzatoVec;
|
||||||
|
import org.nevec.rjm.Rational;
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
import org.warp.picalculator.Errors;
|
||||||
|
import org.warp.picalculator.Utils;
|
||||||
|
import org.warp.picalculator.device.graphicengine.Display;
|
||||||
|
import org.warp.picalculator.math.MathematicalSymbols;
|
||||||
|
import org.warp.picalculator.math.rules.NumberRule1;
|
||||||
|
import org.warp.picalculator.math.rules.ExpandRule1;
|
||||||
|
import org.warp.picalculator.math.rules.ExpandRule5;
|
||||||
|
|
||||||
|
public class Negative extends AnteriorFunction {
|
||||||
|
|
||||||
|
public Negative(Function parent, Function value) {
|
||||||
|
super(parent, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSymbol() {
|
||||||
|
return MathematicalSymbols.MINUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void generateGraphics() {
|
||||||
|
variable.setSmall(small);
|
||||||
|
variable.generateGraphics();
|
||||||
|
|
||||||
|
height = getVariable().getHeight();
|
||||||
|
width = Display.Render.glGetStringWidth("-") + getVariable().getWidth();
|
||||||
|
line = getVariable().getLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isSolvable() throws Error {
|
||||||
|
if (variable instanceof Number) return true;
|
||||||
|
if (ExpandRule1.compare(this)) return true;
|
||||||
|
if (ExpandRule5.compare(this)) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Function> solveOneStep() throws Error {
|
||||||
|
if (variable == null) {
|
||||||
|
throw new Error(Errors.SYNTAX_ERROR);
|
||||||
|
}
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
if (ExpandRule1.compare(this)) {
|
||||||
|
result = ExpandRule1.execute(this);
|
||||||
|
} else if (ExpandRule5.compare(this)) {
|
||||||
|
result = ExpandRule5.execute(this);
|
||||||
|
} else if (variable.isSolved()) {
|
||||||
|
try {
|
||||||
|
Number var = (Number) getVariable();
|
||||||
|
result.add(var.multiply(new Number(null, "-1")));
|
||||||
|
} catch(NullPointerException ex) {
|
||||||
|
throw new Error(Errors.ERROR);
|
||||||
|
} catch(NumberFormatException ex) {
|
||||||
|
throw new Error(Errors.SYNTAX_ERROR);
|
||||||
|
} catch(ArithmeticException ex) {
|
||||||
|
throw new Error(Errors.NUMBER_TOO_SMALL);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
List<Function> l1 = new ArrayList<Function>();
|
||||||
|
if (variable.isSolved()) {
|
||||||
|
l1.add(variable);
|
||||||
|
} else {
|
||||||
|
l1.addAll(variable.solveOneStep());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Function f : l1) {
|
||||||
|
result.add(new Negative(this.parent, (Function)f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLine() {
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package org.warp.picalculator.math.functions;
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.getStringWidth;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glGetStringWidth;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glColor3f;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glColor3f;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glFillRect;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glFillRect;
|
||||||
@ -25,33 +25,40 @@ import com.rits.cloning.Cloner;
|
|||||||
|
|
||||||
public class Number implements Function {
|
public class Number implements Function {
|
||||||
|
|
||||||
|
private Function parent;
|
||||||
protected NumeroAvanzatoVec term = NumeroAvanzatoVec.ZERO;
|
protected NumeroAvanzatoVec term = NumeroAvanzatoVec.ZERO;
|
||||||
protected int width;
|
protected int width;
|
||||||
protected int height;
|
protected int height;
|
||||||
protected int line;
|
protected int line;
|
||||||
protected boolean small;
|
protected boolean small;
|
||||||
|
|
||||||
public Number(NumeroAvanzatoVec val) {
|
public Number(Function parent, NumeroAvanzatoVec val) {
|
||||||
|
this.parent = parent;
|
||||||
term = val;
|
term = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Number(String s) throws Error {
|
public Number(Function parent, String s) throws Error {
|
||||||
|
this.parent = parent;
|
||||||
term = new NumeroAvanzatoVec(new NumeroAvanzato(Utils.getRational(s), Rational.ONE));
|
term = new NumeroAvanzatoVec(new NumeroAvanzato(Utils.getRational(s), Rational.ONE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Number(Rational r) {
|
public Number(Function parent, Rational r) {
|
||||||
|
this.parent = parent;
|
||||||
term = new NumeroAvanzatoVec(new NumeroAvanzato(r, Rational.ONE));
|
term = new NumeroAvanzatoVec(new NumeroAvanzato(r, Rational.ONE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Number(BigInteger r) {
|
public Number(Function parent, BigInteger r) {
|
||||||
|
this.parent = parent;
|
||||||
term = new NumeroAvanzatoVec(new NumeroAvanzato(new Rational(r, BigInteger.ONE), Rational.ONE));
|
term = new NumeroAvanzatoVec(new NumeroAvanzato(new Rational(r, BigInteger.ONE), Rational.ONE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Number(BigDecimal r) {
|
public Number(Function parent, BigDecimal r) {
|
||||||
|
this.parent = parent;
|
||||||
term = new NumeroAvanzatoVec(new NumeroAvanzato(Utils.getRational(r), Rational.ONE));
|
term = new NumeroAvanzatoVec(new NumeroAvanzato(Utils.getRational(r), Rational.ONE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Number(NumeroAvanzato numeroAvanzato) {
|
public Number(Function parent, NumeroAvanzato numeroAvanzato) {
|
||||||
|
this.parent = parent;
|
||||||
term = new NumeroAvanzatoVec(numeroAvanzato);
|
term = new NumeroAvanzatoVec(numeroAvanzato);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,25 +83,25 @@ public class Number implements Function {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Number add(Number f) throws Error {
|
public Number add(Number f) throws Error {
|
||||||
Number ret = new Number(getTerm().add(f.getTerm()));
|
Number ret = new Number(this.parent, getTerm().add(f.getTerm()));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Number multiply(Number f) throws Error {
|
public Number multiply(Number f) throws Error {
|
||||||
Number ret = new Number(getTerm().multiply(f.getTerm()));
|
Number ret = new Number(this.parent, getTerm().multiply(f.getTerm()));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Number divide(Number f) throws Error {
|
public Number divide(Number f) throws Error {
|
||||||
Number ret = new Number(getTerm().divide(f.getTerm()));
|
Number ret = new Number(this.parent, getTerm().divide(f.getTerm()));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Number pow(Number f) throws Error {
|
public Number pow(Number f) throws Error {
|
||||||
Number ret = new Number(NumeroAvanzatoVec.ONE);
|
Number ret = new Number(this.parent, NumeroAvanzatoVec.ONE);
|
||||||
if (f.getTerm().isBigInteger(true)) {
|
if (f.getTerm().isBigInteger(true)) {
|
||||||
for (BigInteger i = BigInteger.ZERO; i.compareTo(f.getTerm().toBigInteger(true)) < 0; i = i.add(BigInteger.ONE)) {
|
for (BigInteger i = BigInteger.ZERO; i.compareTo(f.getTerm().toBigInteger(true)) < 0; i = i.add(BigInteger.ONE)) {
|
||||||
ret = ret.multiply(new Number(getTerm()));
|
ret = ret.multiply(new Number(this.parent, getTerm()));
|
||||||
}
|
}
|
||||||
} else if (getTerm().isRational(true) && f.getTerm().isRational(false) && f.getTerm().toRational(false).compareTo(Rational.HALF) == 0) {
|
} else if (getTerm().isRational(true) && f.getTerm().isRational(false) && f.getTerm().toRational(false).compareTo(Rational.HALF) == 0) {
|
||||||
// Rational originalExponent = f.getTerm().toRational();
|
// Rational originalExponent = f.getTerm().toRational();
|
||||||
@ -105,9 +112,9 @@ public class Number implements Function {
|
|||||||
na = na.setVariableX(getTerm().toNumeroAvanzato().getVariableY().multiply(getTerm().toNumeroAvanzato().getVariableZ()));
|
na = na.setVariableX(getTerm().toNumeroAvanzato().getVariableY().multiply(getTerm().toNumeroAvanzato().getVariableZ()));
|
||||||
na = na.setVariableY(new Variables());
|
na = na.setVariableY(new Variables());
|
||||||
na = na.setVariableZ(getTerm().toNumeroAvanzato().getVariableZ());
|
na = na.setVariableZ(getTerm().toNumeroAvanzato().getVariableZ());
|
||||||
ret = new Number(na);
|
ret = new Number(this.parent, na);
|
||||||
} else {
|
} else {
|
||||||
ret = new Number(BigDecimalMath.pow(getTerm().BigDecimalValue(new MathContext(Utils.scale, Utils.scaleMode2)), f.getTerm().BigDecimalValue(new MathContext(Utils.scale, Utils.scaleMode2))));
|
ret = new Number(this.parent, BigDecimalMath.pow(getTerm().BigDecimalValue(new MathContext(Utils.scale, Utils.scaleMode2)), f.getTerm().BigDecimalValue(new MathContext(Utils.scale, Utils.scaleMode2))));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -130,7 +137,7 @@ public class Number implements Function {
|
|||||||
public void draw(int x, int y) {
|
public void draw(int x, int y) {
|
||||||
|
|
||||||
if (getTerm().isBigInteger(false)) {
|
if (getTerm().isBigInteger(false)) {
|
||||||
Display.Render.setFont(Utils.getFont(small));
|
Display.Render.glSetFont(Utils.getFont(small));
|
||||||
String t = toString();
|
String t = toString();
|
||||||
|
|
||||||
if (t.startsWith("-")) {
|
if (t.startsWith("-")) {
|
||||||
@ -143,7 +150,7 @@ public class Number implements Function {
|
|||||||
glDrawStringLeft(x+1, y, t);
|
glDrawStringLeft(x+1, y, t);
|
||||||
} else if (getTerm().isRational(false)) {
|
} else if (getTerm().isRational(false)) {
|
||||||
small = true;
|
small = true;
|
||||||
Display.Render.setFont(Utils.getFont(true));
|
Display.Render.glSetFont(Utils.getFont(true));
|
||||||
Rational r = getTerm().toRational(false);
|
Rational r = getTerm().toRational(false);
|
||||||
boolean minus = false;
|
boolean minus = false;
|
||||||
int minusw = 0;
|
int minusw = 0;
|
||||||
@ -153,9 +160,9 @@ public class Number implements Function {
|
|||||||
minus = true;
|
minus = true;
|
||||||
numerator = numerator.substring(1);
|
numerator = numerator.substring(1);
|
||||||
}
|
}
|
||||||
int w1 = getStringWidth(numerator);
|
int w1 = glGetStringWidth(numerator);
|
||||||
int h1 = Utils.getFontHeight(small);
|
int h1 = Utils.getFontHeight(small);
|
||||||
int w2 = getStringWidth(r.denom().toString());
|
int w2 = glGetStringWidth(r.denom().toString());
|
||||||
int maxw;
|
int maxw;
|
||||||
if (w1 > w2) {
|
if (w1 > w2) {
|
||||||
maxw = 1 + w1 + 1;
|
maxw = 1 + w1 + 1;
|
||||||
@ -164,7 +171,7 @@ public class Number implements Function {
|
|||||||
}
|
}
|
||||||
if (minus) {
|
if (minus) {
|
||||||
if (drawMinus) {
|
if (drawMinus) {
|
||||||
minusw = getStringWidth("-");
|
minusw = glGetStringWidth("-");
|
||||||
minush = Utils.getFontHeight(small);
|
minush = Utils.getFontHeight(small);
|
||||||
maxw += minusw;
|
maxw += minusw;
|
||||||
glDrawStringLeft(x, y + h1 + 1 + 1 - (minush / 2), "-");
|
glDrawStringLeft(x, y + h1 + 1 + 1 - (minush / 2), "-");
|
||||||
@ -176,7 +183,7 @@ public class Number implements Function {
|
|||||||
glFillRect(x + minusw + 1, y + h1 + 1, maxw, 1);
|
glFillRect(x + minusw + 1, y + h1 + 1, maxw, 1);
|
||||||
} else if (getTerm().toFancyString().contains("/")) {
|
} else if (getTerm().toFancyString().contains("/")) {
|
||||||
small = true;
|
small = true;
|
||||||
Display.Render.setFont(Utils.getFont(true));
|
Display.Render.glSetFont(Utils.getFont(true));
|
||||||
String r = getTerm().toFancyString();
|
String r = getTerm().toFancyString();
|
||||||
String numer = r.substring(0, r.lastIndexOf("/"));
|
String numer = r.substring(0, r.lastIndexOf("/"));
|
||||||
String denom = r.substring(numer.length() + 1, r.length());
|
String denom = r.substring(numer.length() + 1, r.length());
|
||||||
@ -188,9 +195,9 @@ public class Number implements Function {
|
|||||||
minus = true;
|
minus = true;
|
||||||
numer = numer.substring(1);
|
numer = numer.substring(1);
|
||||||
}
|
}
|
||||||
int w1 = getStringWidth(numer.toString());
|
int w1 = glGetStringWidth(numer.toString());
|
||||||
int h1 = Utils.getFontHeight(small);
|
int h1 = Utils.getFontHeight(small);
|
||||||
int w2 = getStringWidth(denom.toString());
|
int w2 = glGetStringWidth(denom.toString());
|
||||||
int maxw;
|
int maxw;
|
||||||
if (w1 > w2) {
|
if (w1 > w2) {
|
||||||
maxw = w1 + 2;
|
maxw = w1 + 2;
|
||||||
@ -201,7 +208,7 @@ public class Number implements Function {
|
|||||||
int minush = 0;
|
int minush = 0;
|
||||||
if (minus) {
|
if (minus) {
|
||||||
if (drawMinus) {
|
if (drawMinus) {
|
||||||
minusw = getStringWidth("-") + 1;
|
minusw = glGetStringWidth("-") + 1;
|
||||||
minush = Utils.getFontHeight(small);
|
minush = Utils.getFontHeight(small);
|
||||||
maxw += minusw;
|
maxw += minusw;
|
||||||
glDrawStringLeft(x, y + h1 + 1 + 1 - (minush / 2), "-");
|
glDrawStringLeft(x, y + h1 + 1 + 1 - (minush / 2), "-");
|
||||||
@ -212,7 +219,7 @@ public class Number implements Function {
|
|||||||
glColor3f(0, 0, 0);
|
glColor3f(0, 0, 0);
|
||||||
glFillRect(x + minusw + 1, y + h1 + 1, maxw, 1);
|
glFillRect(x + minusw + 1, y + h1 + 1, maxw, 1);
|
||||||
} else {
|
} else {
|
||||||
Display.Render.setFont(Utils.getFont(small));
|
Display.Render.glSetFont(Utils.getFont(small));
|
||||||
String r = getTerm().toFancyString();
|
String r = getTerm().toFancyString();
|
||||||
|
|
||||||
if (r.startsWith("-")) {
|
if (r.startsWith("-")) {
|
||||||
@ -274,7 +281,7 @@ public class Number implements Function {
|
|||||||
t = t.substring(1);
|
t = t.substring(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return getStringWidth(t)+1;
|
return glGetStringWidth(t)+1;
|
||||||
} else if (getTerm().isRational(false)) {
|
} else if (getTerm().isRational(false)) {
|
||||||
Rational r = getTerm().toRational(false);
|
Rational r = getTerm().toRational(false);
|
||||||
boolean minus = false;
|
boolean minus = false;
|
||||||
@ -283,8 +290,8 @@ public class Number implements Function {
|
|||||||
minus = true;
|
minus = true;
|
||||||
numerator = numerator.substring(1);
|
numerator = numerator.substring(1);
|
||||||
}
|
}
|
||||||
int w1 = getStringWidth(numerator);
|
int w1 = glGetStringWidth(numerator);
|
||||||
int w2 = getStringWidth(r.denom().toString());
|
int w2 = glGetStringWidth(r.denom().toString());
|
||||||
int maxw;
|
int maxw;
|
||||||
if (w1 > w2) {
|
if (w1 > w2) {
|
||||||
maxw = 1 + w1 + 1;
|
maxw = 1 + w1 + 1;
|
||||||
@ -293,7 +300,7 @@ public class Number implements Function {
|
|||||||
}
|
}
|
||||||
if (minus) {
|
if (minus) {
|
||||||
if (drawMinus) {
|
if (drawMinus) {
|
||||||
maxw += getStringWidth("-");
|
maxw += glGetStringWidth("-");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return maxw + 1;
|
return maxw + 1;
|
||||||
@ -309,8 +316,8 @@ public class Number implements Function {
|
|||||||
minus = true;
|
minus = true;
|
||||||
numer = numer.substring(1);
|
numer = numer.substring(1);
|
||||||
}
|
}
|
||||||
int w1 = getStringWidth(numer.toString());
|
int w1 = glGetStringWidth(numer.toString());
|
||||||
int w2 = getStringWidth(denom.toString());
|
int w2 = glGetStringWidth(denom.toString());
|
||||||
int maxw;
|
int maxw;
|
||||||
if (w1 > w2) {
|
if (w1 > w2) {
|
||||||
maxw = w1 + 1;
|
maxw = w1 + 1;
|
||||||
@ -319,7 +326,7 @@ public class Number implements Function {
|
|||||||
}
|
}
|
||||||
if (minus) {
|
if (minus) {
|
||||||
if (drawMinus) {
|
if (drawMinus) {
|
||||||
maxw += getStringWidth("-");
|
maxw += glGetStringWidth("-");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return maxw + 2;
|
return maxw + 2;
|
||||||
@ -332,7 +339,7 @@ public class Number implements Function {
|
|||||||
r = r.substring(1);
|
r = r.substring(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return getStringWidth(r.toString())+1;
|
return glGetStringWidth(r.toString())+1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,7 +351,7 @@ public class Number implements Function {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLine() {
|
public int getLine() {
|
||||||
return line;
|
return line;
|
||||||
@ -397,7 +404,34 @@ public class Number implements Function {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
return o != null && o.hashCode() == this.hashCode();
|
if (o != null & term != null) {
|
||||||
|
if (o instanceof Number) {
|
||||||
|
NumeroAvanzatoVec nav = ((Number) o).getTerm();
|
||||||
|
if (term.isBigInteger(true) & nav.isBigInteger(true)) {
|
||||||
|
boolean na1 = term.toBigInteger(true).compareTo(BigInteger.ZERO) == 0;
|
||||||
|
boolean na2 = nav.toBigInteger(true).compareTo(BigInteger.ZERO) == 0;
|
||||||
|
if (na1 == na2) {
|
||||||
|
if (na1 == true) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nav.compareTo(term) == 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Function setParent(Function value) {
|
||||||
|
parent = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Function getParent() {
|
||||||
|
return parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -7,11 +7,13 @@ import org.warp.picalculator.Error;
|
|||||||
import org.warp.picalculator.Errors;
|
import org.warp.picalculator.Errors;
|
||||||
import org.warp.picalculator.Utils;
|
import org.warp.picalculator.Utils;
|
||||||
import org.warp.picalculator.math.MathematicalSymbols;
|
import org.warp.picalculator.math.MathematicalSymbols;
|
||||||
|
import org.warp.picalculator.math.rules.FractionsRule4;
|
||||||
|
import org.warp.picalculator.math.rules.FractionsRule5;
|
||||||
|
|
||||||
public class Power extends FunctionTwoValues {
|
public class Power extends FunctionTwoValues {
|
||||||
|
|
||||||
public Power(Function value1, Function value2) {
|
public Power(Function parent, Function value1, Function value2) {
|
||||||
super(value1, value2);
|
super(parent, value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -22,8 +24,13 @@ public class Power extends FunctionTwoValues {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean isSolvable() throws Error {
|
protected boolean isSolvable() throws Error {
|
||||||
if (variable1 instanceof Number & variable2 instanceof Number) {
|
if (variable1 instanceof Number & variable2 instanceof Number) {
|
||||||
|
if (((Number)variable2).getTerm().hasVariables()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (FractionsRule4.compare(this)) return true;
|
||||||
|
if (FractionsRule5.compare(this)) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,8 +50,12 @@ public class Power extends FunctionTwoValues {
|
|||||||
@Override
|
@Override
|
||||||
public List<Function> solveOneStep() throws Error {
|
public List<Function> solveOneStep() throws Error {
|
||||||
ArrayList<Function> result = new ArrayList<>();
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
if (variable1.isSolved() & variable2.isSolved()) {
|
if (variable1 instanceof Number & variable2 instanceof Number) {
|
||||||
result.add((Function) ((Number)variable1).pow((Number)variable2));
|
result.add((Function) ((Number)variable1).pow((Number)variable2));
|
||||||
|
} else if (FractionsRule4.compare(this)) {
|
||||||
|
result.addAll(FractionsRule4.execute(this));
|
||||||
|
} else if (FractionsRule5.compare(this)) {
|
||||||
|
result.addAll(FractionsRule5.execute(this));
|
||||||
} else {
|
} else {
|
||||||
List<Function> l1 = new ArrayList<Function>();
|
List<Function> l1 = new ArrayList<Function>();
|
||||||
List<Function> l2 = new ArrayList<Function>();
|
List<Function> l2 = new ArrayList<Function>();
|
||||||
@ -62,7 +73,7 @@ public class Power extends FunctionTwoValues {
|
|||||||
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
||||||
|
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new Power((Function)f[0], (Function)f[1]));
|
result.add(new Power(this.parent, (Function)f[0], (Function)f[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -10,8 +10,8 @@ import org.warp.picalculator.math.MathematicalSymbols;
|
|||||||
|
|
||||||
public class PrioritaryMultiplication extends FunctionTwoValues {
|
public class PrioritaryMultiplication extends FunctionTwoValues {
|
||||||
|
|
||||||
public PrioritaryMultiplication(Function value1, Function value2) {
|
public PrioritaryMultiplication(Function parent, Function value1, Function value2) {
|
||||||
super(value1, value2);
|
super(parent, value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -52,7 +52,7 @@ public class PrioritaryMultiplication extends FunctionTwoValues {
|
|||||||
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
||||||
|
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new PrioritaryMultiplication((Function)f[0], (Function)f[1]));
|
result.add(new PrioritaryMultiplication(this.parent, (Function)f[0], (Function)f[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -13,8 +13,8 @@ import org.warp.picalculator.math.MathematicalSymbols;
|
|||||||
|
|
||||||
public class Root extends FunctionTwoValues {
|
public class Root extends FunctionTwoValues {
|
||||||
|
|
||||||
public Root(Function value1, Function value2) {
|
public Root(Function parent, Function value1, Function value2) {
|
||||||
super(value1, value2);
|
super(parent, value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -38,7 +38,7 @@ public class Root extends FunctionTwoValues {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean isSolvable() throws Error {
|
protected boolean isSolvable() throws Error {
|
||||||
if (variable1 instanceof Number & variable2 instanceof Number) {
|
if (variable1 instanceof Number & variable2 instanceof Number) {
|
||||||
if ((((Number)variable2).pow(new Number(NumeroAvanzatoVec.ONE).divide((Number) variable1)).getTerm().isBigInteger(true))) {
|
if ((((Number)variable2).pow(new Number(this.parent, NumeroAvanzatoVec.ONE).divide((Number) variable1)).getTerm().isBigInteger(true))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -49,7 +49,7 @@ public class Root extends FunctionTwoValues {
|
|||||||
public List<Function> solveOneStep() throws Error {
|
public List<Function> solveOneStep() throws Error {
|
||||||
ArrayList<Function> result = new ArrayList<>();
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
if (variable1.isSolved() & variable2.isSolved()) {
|
if (variable1.isSolved() & variable2.isSolved()) {
|
||||||
Number exponent = new Number(NumeroAvanzatoVec.ONE);
|
Number exponent = new Number(this.parent, NumeroAvanzatoVec.ONE);
|
||||||
exponent = exponent.divide((Number) variable1);
|
exponent = exponent.divide((Number) variable1);
|
||||||
result.add(((Number)variable2).pow(exponent));
|
result.add(((Number)variable2).pow(exponent));
|
||||||
} else {
|
} else {
|
||||||
@ -69,7 +69,11 @@ public class Root extends FunctionTwoValues {
|
|||||||
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
||||||
|
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new Root((Function)f[0], (Function)f[1]));
|
if (f[0] instanceof Number && ((Number)f[0]).equals(new Number(null, "2"))) {
|
||||||
|
result.add(new RootSquare(this.parent, (Function)f[1]));
|
||||||
|
} else {
|
||||||
|
result.add(new Root(this.parent, (Function)f[0], (Function)f[1]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -12,8 +12,8 @@ import org.warp.picalculator.math.MathematicalSymbols;
|
|||||||
|
|
||||||
public class RootSquare extends AnteriorFunction {
|
public class RootSquare extends AnteriorFunction {
|
||||||
|
|
||||||
public RootSquare(Function value) {
|
public RootSquare(Function parent, Function value) {
|
||||||
super(value);
|
super(parent, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -34,7 +34,7 @@ public class RootSquare extends AnteriorFunction {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean isSolvable() throws Error {
|
protected boolean isSolvable() throws Error {
|
||||||
if (variable instanceof Number) {
|
if (variable instanceof Number) {
|
||||||
if ((((Number)variable).pow(new Number(new Rational(1, 2))).getTerm().isBigInteger(true))) {
|
if ((((Number)variable).pow(new Number(this.parent, new Rational(1, 2))).getTerm().isBigInteger(true))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -50,7 +50,7 @@ public class RootSquare extends AnteriorFunction {
|
|||||||
if (variable.isSolved()) {
|
if (variable.isSolved()) {
|
||||||
try {
|
try {
|
||||||
Number var = (Number) getVariable();
|
Number var = (Number) getVariable();
|
||||||
result.add(var.pow(new Number(new Rational(1, 2))));
|
result.add(var.pow(new Number(this.parent, new Rational(1, 2))));
|
||||||
} catch(NullPointerException ex) {
|
} catch(NullPointerException ex) {
|
||||||
throw new Error(Errors.ERROR);
|
throw new Error(Errors.ERROR);
|
||||||
} catch(NumberFormatException ex) {
|
} catch(NumberFormatException ex) {
|
||||||
@ -67,7 +67,7 @@ public class RootSquare extends AnteriorFunction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (Function f : l1) {
|
for (Function f : l1) {
|
||||||
result.add(new RootSquare((Function)f));
|
result.add(new RootSquare(this.parent, (Function)f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -14,8 +14,8 @@ import org.warp.picalculator.math.Variables;
|
|||||||
|
|
||||||
public class Subtraction extends FunctionTwoValues {
|
public class Subtraction extends FunctionTwoValues {
|
||||||
|
|
||||||
public Subtraction(Function value1, Function value2) {
|
public Subtraction(Function parent, Function value1, Function value2) {
|
||||||
super(value1, value2);
|
super(parent, value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -38,19 +38,7 @@ public class Subtraction extends FunctionTwoValues {
|
|||||||
}
|
}
|
||||||
ArrayList<Function> result = new ArrayList<>();
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
if (variable1.isSolved() & variable2.isSolved()) {
|
if (variable1.isSolved() & variable2.isSolved()) {
|
||||||
if (((Number)variable1).term.isBigInteger(false) & ((Number)variable2).term.isBigInteger(false)) {
|
result.add(((Number)variable1).add(((Number)variable2).multiply(new Number(this.parent, "-1"))));
|
||||||
if (((Number)variable1).term.toBigInteger(false).compareTo(new BigInteger("2")) == 0 && ((Number)variable2).term.toBigInteger(false).compareTo(new BigInteger("2")) == 0) {
|
|
||||||
NumeroAvanzato na = NumeroAvanzato.ONE;
|
|
||||||
Variables iy = na.getVariableY();
|
|
||||||
List<Variable> newVariableList = iy.getVariablesList();
|
|
||||||
newVariableList.add(new Variable('♓', 1, 1));
|
|
||||||
iy = new Variables(newVariableList.toArray(new Variable[newVariableList.size()]));
|
|
||||||
na = na.setVariableY(iy);
|
|
||||||
result.add(new Number(na));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result.add(((Number)variable1).add((Number)variable2).multiply(new Number("-1")));
|
|
||||||
} else {
|
} else {
|
||||||
List<Function> l1 = new ArrayList<Function>();
|
List<Function> l1 = new ArrayList<Function>();
|
||||||
List<Function> l2 = new ArrayList<Function>();
|
List<Function> l2 = new ArrayList<Function>();
|
||||||
@ -68,7 +56,7 @@ public class Subtraction extends FunctionTwoValues {
|
|||||||
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
||||||
|
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new Sum((Function)f[0], (Function)f[1]));
|
result.add(new Subtraction(this.parent, (Function)f[0], (Function)f[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package org.warp.picalculator.math.functions;
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.getStringWidth;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glGetStringWidth;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
||||||
|
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
@ -19,8 +19,8 @@ import org.warp.picalculator.math.Variables;
|
|||||||
|
|
||||||
public class Sum extends FunctionTwoValues {
|
public class Sum extends FunctionTwoValues {
|
||||||
|
|
||||||
public Sum(Function value1, Function value2) {
|
public Sum(Function parent, Function value1, Function value2) {
|
||||||
super(value1, value2);
|
super(parent, value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -43,15 +43,15 @@ public class Sum extends FunctionTwoValues {
|
|||||||
}
|
}
|
||||||
ArrayList<Function> result = new ArrayList<>();
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
if (variable1.isSolved() & variable2.isSolved()) {
|
if (variable1.isSolved() & variable2.isSolved()) {
|
||||||
if (((Number)variable1).term.isBigInteger(false) & ((Number)variable2).term.isBigInteger(false)) {
|
if ((parent == null || parent.getParent() == null) && ((Number)variable1).term.isBigInteger(false) & ((Number)variable2).term.isBigInteger(false)) {
|
||||||
if (((Number)variable1).term.toBigInteger(false).compareTo(new BigInteger("2")) == 0 && ((Number)variable2).term.toBigInteger(false).compareTo(new BigInteger("2")) == 0) {
|
if (((Number)variable1).term.toBigInteger(false).compareTo(new BigInteger("2")) == 0 && ((Number)variable2).term.toBigInteger(false).compareTo(new BigInteger("2")) == 0) {
|
||||||
NumeroAvanzato na = NumeroAvanzato.ONE;
|
result.add(new Joke(Joke.FISH));
|
||||||
Variables iy = na.getVariableY();
|
return result;
|
||||||
List<Variable> newVariableList = iy.getVariablesList();
|
} else if (((Number)variable1).term.toBigInteger(false).compareTo(new BigInteger("20")) == 0 && ((Number)variable2).term.toBigInteger(false).compareTo(new BigInteger("20")) == 0) {
|
||||||
newVariableList.add(new Variable('♓', 1, 1));
|
result.add(new Joke(Joke.TORNADO));
|
||||||
iy = new Variables(newVariableList.toArray(new Variable[newVariableList.size()]));
|
return result;
|
||||||
na = na.setVariableY(iy);
|
} else if (((Number)variable1).term.toBigInteger(false).compareTo(new BigInteger("29")) == 0 && ((Number)variable2).term.toBigInteger(false).compareTo(new BigInteger("29")) == 0) {
|
||||||
result.add(new Number(na));
|
result.add(new Joke(Joke.SHARKNADO));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ public class Sum extends FunctionTwoValues {
|
|||||||
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
||||||
|
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new Sum((Function)f[0], (Function)f[1]));
|
result.add(new Sum(this.parent, (Function)f[0], (Function)f[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -102,10 +102,10 @@ public class Sum extends FunctionTwoValues {
|
|||||||
int dx = 0;
|
int dx = 0;
|
||||||
variable1.draw(dx + x, ln - variable1.getLine() + y);
|
variable1.draw(dx + x, ln - variable1.getLine() + y);
|
||||||
dx += variable1.getWidth();
|
dx += variable1.getWidth();
|
||||||
Display.Render.setFont(Utils.getFont(small));
|
Display.Render.glSetFont(Utils.getFont(small));
|
||||||
dx += 1;
|
dx += 1;
|
||||||
glDrawStringLeft(dx + x, ln - Utils.getFontHeight(small) / 2 + y, getSymbol());
|
glDrawStringLeft(dx + x, ln - Utils.getFontHeight(small) / 2 + y, getSymbol());
|
||||||
dx += getStringWidth(getSymbol());
|
dx += glGetStringWidth(getSymbol());
|
||||||
variable2.draw(dx + x, ln - variable2.getLine() + y);
|
variable2.draw(dx + x, ln - variable2.getLine() + y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ public class Sum extends FunctionTwoValues {
|
|||||||
int dx = 0;
|
int dx = 0;
|
||||||
dx += variable1.getWidth();
|
dx += variable1.getWidth();
|
||||||
dx += 1;
|
dx += 1;
|
||||||
dx += getStringWidth(getSymbol());
|
dx += glGetStringWidth(getSymbol());
|
||||||
return dx += variable2.getWidth();
|
return dx += variable2.getWidth();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package org.warp.picalculator.math.functions;
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.getStringWidth;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glGetStringWidth;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -15,8 +15,8 @@ import org.warp.picalculator.math.MathematicalSymbols;
|
|||||||
|
|
||||||
public class SumSubtraction extends FunctionTwoValues {
|
public class SumSubtraction extends FunctionTwoValues {
|
||||||
|
|
||||||
public SumSubtraction(Function value1, Function value2) {
|
public SumSubtraction(Function parent, Function value1, Function value2) {
|
||||||
super(value1, value2);
|
super(parent, value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -40,7 +40,7 @@ public class SumSubtraction extends FunctionTwoValues {
|
|||||||
ArrayList<Function> result = new ArrayList<>();
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
if (variable1.isSolved() & variable2.isSolved()) {
|
if (variable1.isSolved() & variable2.isSolved()) {
|
||||||
result.add(((Number)variable1).add((Number)variable2));
|
result.add(((Number)variable1).add((Number)variable2));
|
||||||
result.add(((Number)variable1).add(((Number)variable2).multiply(new Number("-1"))));
|
result.add(((Number)variable1).add(((Number)variable2).multiply(new Number(this.parent, "-1"))));
|
||||||
} else {
|
} else {
|
||||||
List<Function> l1 = new ArrayList<Function>();
|
List<Function> l1 = new ArrayList<Function>();
|
||||||
List<Function> l2 = new ArrayList<Function>();
|
List<Function> l2 = new ArrayList<Function>();
|
||||||
@ -58,7 +58,7 @@ public class SumSubtraction extends FunctionTwoValues {
|
|||||||
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
Function[][] results = Utils.joinFunctionsResults(l1, l2);
|
||||||
|
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new SumSubtraction(f[0], f[1]));
|
result.add(new SumSubtraction(this.parent, f[0], f[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -87,10 +87,10 @@ public class SumSubtraction extends FunctionTwoValues {
|
|||||||
int dx = 0;
|
int dx = 0;
|
||||||
variable1.draw(dx + x, ln - variable1.getLine() + y);
|
variable1.draw(dx + x, ln - variable1.getLine() + y);
|
||||||
dx += variable1.getWidth();
|
dx += variable1.getWidth();
|
||||||
Display.Render.setFont(Utils.getFont(small));
|
Display.Render.glSetFont(Utils.getFont(small));
|
||||||
dx += 1;
|
dx += 1;
|
||||||
glDrawStringLeft(dx + x, ln - Utils.getFontHeight(small) / 2 + y, getSymbol());
|
glDrawStringLeft(dx + x, ln - Utils.getFontHeight(small) / 2 + y, getSymbol());
|
||||||
dx += getStringWidth(getSymbol());
|
dx += glGetStringWidth(getSymbol());
|
||||||
variable2.draw(dx + x, ln - variable2.getLine() + y);
|
variable2.draw(dx + x, ln - variable2.getLine() + y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ public class SumSubtraction extends FunctionTwoValues {
|
|||||||
int dx = 0;
|
int dx = 0;
|
||||||
dx += variable1.getWidth();
|
dx += variable1.getWidth();
|
||||||
dx += 1;
|
dx += 1;
|
||||||
dx += getStringWidth(getSymbol());
|
dx += glGetStringWidth(getSymbol());
|
||||||
return dx += variable2.getWidth();
|
return dx += variable2.getWidth();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
78
src/org/warp/picalculator/math/functions/Undefined.java
Normal file
78
src/org/warp/picalculator/math/functions/Undefined.java
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package org.warp.picalculator.math.functions;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
import org.warp.picalculator.Utils;
|
||||||
|
import org.warp.picalculator.device.graphicengine.Display;
|
||||||
|
|
||||||
|
public class Undefined implements Function {
|
||||||
|
|
||||||
|
public Undefined(Function parent) {
|
||||||
|
setParent(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSymbol() {
|
||||||
|
return "undefined";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Function> solveOneStep() throws Error {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSolved() throws Error {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int width, height, line;
|
||||||
|
private Function parent;
|
||||||
|
private boolean small;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void generateGraphics() {
|
||||||
|
width = Display.Render.glGetStringWidth("UNDEFINED");
|
||||||
|
height = Utils.getFontHeight(small);
|
||||||
|
line = height/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(int x, int y) {
|
||||||
|
Display.Render.glSetFont(Utils.getFont(small));
|
||||||
|
Display.Render.glDrawStringLeft(x, y, "UNDEFINED");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLine() {
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Function setParent(Function parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Function getParent() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSmall(boolean small) {
|
||||||
|
this.small = small;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -19,8 +19,8 @@ import com.rits.cloning.Cloner;
|
|||||||
|
|
||||||
public class Equation extends FunctionTwoValues {
|
public class Equation extends FunctionTwoValues {
|
||||||
|
|
||||||
public Equation(Function value1, Function value2) {
|
public Equation(Function parent, Function value1, Function value2) {
|
||||||
super(value1,value2);
|
super(parent, value1,value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -46,7 +46,10 @@ public class Equation extends FunctionTwoValues {
|
|||||||
if (((Number)variable2).getTerm().isBigInteger(false) && ((Number)variable2).getTerm().toBigInteger(false).compareTo(new BigInteger("0")) == 0) {
|
if (((Number)variable2).getTerm().isBigInteger(false) && ((Number)variable2).getTerm().toBigInteger(false).compareTo(new BigInteger("0")) == 0) {
|
||||||
result.add(this);
|
result.add(this);
|
||||||
} else {
|
} else {
|
||||||
result.add(new Equation(new Subtraction(variable1, variable2), new Number("0")));
|
Equation e = new Equation(this.parent, null, null);
|
||||||
|
e.setVariable1(new Subtraction(e, variable1, variable2));
|
||||||
|
e.setVariable2(new Number(e, "0"));
|
||||||
|
result.add(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
List<Function> l1 = new ArrayList<Function>();
|
List<Function> l1 = new ArrayList<Function>();
|
||||||
@ -79,7 +82,7 @@ public class Equation extends FunctionTwoValues {
|
|||||||
if (cur2 >= size1) cur2 = 0;
|
if (cur2 >= size1) cur2 = 0;
|
||||||
}
|
}
|
||||||
for (Function[] f : results) {
|
for (Function[] f : results) {
|
||||||
result.add(new Equation(f[0], f[1]));
|
result.add(new Equation(this.parent, f[0], f[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -6,7 +6,7 @@ import org.warp.picalculator.math.functions.Number;
|
|||||||
|
|
||||||
public class EquationResult {
|
public class EquationResult {
|
||||||
public boolean isAnEquation = false;
|
public boolean isAnEquation = false;
|
||||||
public Number LR = new Number(new BigInteger("0"));
|
public Number LR = new Number(null, new BigInteger("0"));
|
||||||
|
|
||||||
public EquationResult(Number LR, boolean isAnEquation) {
|
public EquationResult(Number LR, boolean isAnEquation) {
|
||||||
this.LR = LR;
|
this.LR = LR;
|
||||||
|
@ -14,16 +14,16 @@ import org.warp.picalculator.math.functions.Number;
|
|||||||
public class EquationsSystem extends FunctionMultipleValues {
|
public class EquationsSystem extends FunctionMultipleValues {
|
||||||
static final int spacing = 2;
|
static final int spacing = 2;
|
||||||
|
|
||||||
public EquationsSystem() {
|
public EquationsSystem(Function parent) {
|
||||||
super();
|
super(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public EquationsSystem(Function value) {
|
public EquationsSystem(Function parent, Function value) {
|
||||||
super(new Function[]{value});
|
super(parent, new Function[]{value});
|
||||||
}
|
}
|
||||||
|
|
||||||
public EquationsSystem(Function[] value) {
|
public EquationsSystem(Function parent, Function[] value) {
|
||||||
super(value);
|
super(parent, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -52,7 +52,7 @@ public class EquationsSystem extends FunctionMultipleValues {
|
|||||||
if (f instanceof Number) {
|
if (f instanceof Number) {
|
||||||
ret.add(f);
|
ret.add(f);
|
||||||
} else {
|
} else {
|
||||||
ret.add(new Expression(new Function[]{(Function) f}));
|
ret.add(new Expression(this.parent, new Function[]{(Function) f}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -62,7 +62,7 @@ public class EquationsSystem extends FunctionMultipleValues {
|
|||||||
if (f.isSolved() == false) {
|
if (f.isSolved() == false) {
|
||||||
List<Function> partial = f.solveOneStep();
|
List<Function> partial = f.solveOneStep();
|
||||||
for (Function fnc : partial) {
|
for (Function fnc : partial) {
|
||||||
ret.add(new Expression(new Function[]{(Function) fnc}));
|
ret.add(new Expression(this.parent, new Function[]{(Function) fnc}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,8 @@ import org.warp.picalculator.math.functions.Function;
|
|||||||
|
|
||||||
public class EquationsSystemPart extends AnteriorFunction {
|
public class EquationsSystemPart extends AnteriorFunction {
|
||||||
|
|
||||||
public EquationsSystemPart(Equation equazione) {
|
public EquationsSystemPart(Function parent, Equation equazione) {
|
||||||
super(equazione);
|
super(parent, equazione);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
127
src/org/warp/picalculator/math/rules/ExpandRule1.java
Normal file
127
src/org/warp/picalculator/math/rules/ExpandRule1.java
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
import org.warp.picalculator.math.functions.Expression;
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.FunctionTwoValues;
|
||||||
|
import org.warp.picalculator.math.functions.Negative;
|
||||||
|
import org.warp.picalculator.math.functions.Subtraction;
|
||||||
|
import org.warp.picalculator.math.functions.Sum;
|
||||||
|
import org.warp.picalculator.math.functions.SumSubtraction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expand rule<br>
|
||||||
|
* <b>-(+a+b) = -a-b</b><br>
|
||||||
|
* <b>-(+a-b) = -a+b</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ExpandRule1 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) {
|
||||||
|
if (f instanceof Negative) {
|
||||||
|
Negative fnc = (Negative) f;
|
||||||
|
if (fnc.getVariable() instanceof Expression) {
|
||||||
|
Expression expr = (Expression) fnc.getVariable();
|
||||||
|
if (expr.getVariablesLength() == 1) {
|
||||||
|
if (expr.getVariable(0) instanceof Sum) {
|
||||||
|
return true;
|
||||||
|
} else if (expr.getVariable(0) instanceof Subtraction) {
|
||||||
|
return true;
|
||||||
|
} else if (expr.getVariable(0) instanceof SumSubtraction) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (f instanceof Subtraction || f instanceof SumSubtraction) {
|
||||||
|
FunctionTwoValues fnc = (FunctionTwoValues) f;
|
||||||
|
if (fnc.getVariable2() instanceof Expression) {
|
||||||
|
Expression expr = (Expression) fnc.getVariable2();
|
||||||
|
if (expr.getVariablesLength() == 1) {
|
||||||
|
if (expr.getVariable(0) instanceof Sum) {
|
||||||
|
return true;
|
||||||
|
} else if (expr.getVariable(0) instanceof Subtraction) {
|
||||||
|
return true;
|
||||||
|
} else if (expr.getVariable(0) instanceof SumSubtraction) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
|
||||||
|
Expression expr = null;
|
||||||
|
int fromSubtraction = 0;
|
||||||
|
FunctionTwoValues subtraction = null;
|
||||||
|
if (f instanceof Negative) {
|
||||||
|
expr = ((Expression)((Negative) f).getVariable());
|
||||||
|
} else if (f instanceof Subtraction || f instanceof SumSubtraction) {
|
||||||
|
expr = ((Expression)((FunctionTwoValues) f).getVariable2());
|
||||||
|
if (f instanceof Subtraction) {
|
||||||
|
fromSubtraction = 1;
|
||||||
|
} else {
|
||||||
|
fromSubtraction = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (f instanceof SumSubtraction) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Function fnc = expr.getVariable(0);
|
||||||
|
if (fnc instanceof Sum) {
|
||||||
|
Function a = ((Sum) fnc).getVariable1();
|
||||||
|
Function b = ((Sum) fnc).getVariable2();
|
||||||
|
Subtraction fnc2 = new Subtraction(((Negative) f).getParent(), null, b);
|
||||||
|
fnc2.setVariable1(new Negative(fnc2, a));
|
||||||
|
if (fromSubtraction > 0) {
|
||||||
|
subtraction = new Subtraction(f.getParent(), null, null);
|
||||||
|
subtraction.setVariable1(((FunctionTwoValues)f).getVariable1());
|
||||||
|
subtraction.setVariable2(fnc2);
|
||||||
|
result.add(subtraction);
|
||||||
|
} else {
|
||||||
|
result.add(fnc2);
|
||||||
|
}
|
||||||
|
} else if (fnc instanceof Subtraction) {
|
||||||
|
Function a = ((Subtraction) fnc).getVariable1();
|
||||||
|
Function b = ((Subtraction) fnc).getVariable2();
|
||||||
|
Sum fnc2 = new Sum(((Negative) f).getParent(), null, b);
|
||||||
|
fnc2.setVariable1(new Negative(fnc2, a));
|
||||||
|
if (fromSubtraction > 0) {
|
||||||
|
subtraction = new Subtraction(f.getParent(), null, null);
|
||||||
|
subtraction.setVariable1(((FunctionTwoValues)f).getVariable1());
|
||||||
|
subtraction.setVariable2(fnc2);
|
||||||
|
result.add(subtraction);
|
||||||
|
} else {
|
||||||
|
result.add(fnc2);
|
||||||
|
}
|
||||||
|
} else if (fnc instanceof SumSubtraction) {
|
||||||
|
Function a = ((Subtraction) fnc).getVariable1();
|
||||||
|
Function b = ((Subtraction) fnc).getVariable2();
|
||||||
|
Sum fnc2 = new Sum(((Negative) f).getParent(), null, b);
|
||||||
|
fnc2.setVariable1(new Negative(fnc2, a));
|
||||||
|
Subtraction fnc3 = new Subtraction(((Negative) f).getParent(), null, b);
|
||||||
|
fnc3.setVariable1(new Negative(fnc2, a));
|
||||||
|
if (fromSubtraction > 0) {
|
||||||
|
subtraction = new SumSubtraction(f.getParent(), null, null);
|
||||||
|
subtraction.setVariable1(((FunctionTwoValues)f).getVariable1());
|
||||||
|
subtraction.setVariable2(fnc2);
|
||||||
|
result.add(subtraction);
|
||||||
|
subtraction = new SumSubtraction(f.getParent(), null, null);
|
||||||
|
subtraction.setVariable1(((FunctionTwoValues)f).getVariable1());
|
||||||
|
subtraction.setVariable2(fnc3);
|
||||||
|
result.add(subtraction);
|
||||||
|
} else {
|
||||||
|
result.add(fnc2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
47
src/org/warp/picalculator/math/rules/ExpandRule5.java
Normal file
47
src/org/warp/picalculator/math/rules/ExpandRule5.java
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Negative;
|
||||||
|
import org.warp.picalculator.math.functions.Subtraction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expand rule<br>
|
||||||
|
* <b>-(-a) = a</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ExpandRule5 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) {
|
||||||
|
if (f instanceof Negative) {
|
||||||
|
Negative fnc = (Negative) f;
|
||||||
|
if (fnc.getVariable() instanceof Negative) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else if (f instanceof Subtraction) {
|
||||||
|
Subtraction fnc = (Subtraction) f;
|
||||||
|
if (fnc.getVariable2() instanceof Negative) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
Function a = null;
|
||||||
|
|
||||||
|
if (f instanceof Negative) {
|
||||||
|
Negative fnc = (Negative) f;
|
||||||
|
result.add(((Negative)fnc.getVariable()).getVariable().setParent(f.getParent()));
|
||||||
|
} else if (f instanceof Subtraction) {
|
||||||
|
Subtraction fnc = (Subtraction) f;
|
||||||
|
result.add(((Negative)fnc.getVariable2()).getVariable().setParent(f.getParent()));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
50
src/org/warp/picalculator/math/rules/FractionsRule1.java
Normal file
50
src/org/warp/picalculator/math/rules/FractionsRule1.java
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import org.warp.picalculator.math.functions.Division;
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Multiplication;
|
||||||
|
import org.warp.picalculator.math.functions.Number;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fractions rule<br>
|
||||||
|
* <b>0 / a = 0</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FractionsRule1 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) {
|
||||||
|
try {
|
||||||
|
if (f instanceof Division) {
|
||||||
|
Division fnc = (Division) f;
|
||||||
|
if (fnc.getVariable1() instanceof Number) {
|
||||||
|
Number numb1 = (Number) fnc.getVariable1();
|
||||||
|
if (numb1.equals(new Number(null, "0"))) {
|
||||||
|
if (fnc.getVariable2() instanceof Number) {
|
||||||
|
Number numb2 = (Number) fnc.getVariable2();
|
||||||
|
if (numb2.equals(new Number(null, "0"))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Error e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
result.add(new Number(f.getParent(), "0"));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
45
src/org/warp/picalculator/math/rules/FractionsRule2.java
Normal file
45
src/org/warp/picalculator/math/rules/FractionsRule2.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import org.warp.picalculator.math.functions.Division;
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Multiplication;
|
||||||
|
import org.warp.picalculator.math.functions.Number;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fractions rule<br>
|
||||||
|
* <b>a / 1 = a</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FractionsRule2 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) {
|
||||||
|
try {
|
||||||
|
if (f instanceof Division) {
|
||||||
|
Division fnc = (Division) f;
|
||||||
|
if (fnc.getVariable2() instanceof Number) {
|
||||||
|
Number numb = (Number) fnc.getVariable2();
|
||||||
|
if (numb.equals(new Number(null, "1"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Error e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
Division fnc = (Division) f;
|
||||||
|
result.add(fnc.getVariable1().setParent(f.getParent()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
src/org/warp/picalculator/math/rules/FractionsRule3.java
Normal file
38
src/org/warp/picalculator/math/rules/FractionsRule3.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import org.warp.picalculator.math.functions.Division;
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Multiplication;
|
||||||
|
import org.warp.picalculator.math.functions.Number;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fractions rule<br>
|
||||||
|
* <b>a / 1 = a</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FractionsRule3 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) {
|
||||||
|
if (f instanceof Division) {
|
||||||
|
Division fnc = (Division) f;
|
||||||
|
if (fnc.getVariable1().equals(fnc.getVariable2())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
Division fnc = (Division) f;
|
||||||
|
result.add(fnc.getVariable1().setParent(f.getParent()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
45
src/org/warp/picalculator/math/rules/FractionsRule4.java
Normal file
45
src/org/warp/picalculator/math/rules/FractionsRule4.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import org.warp.picalculator.math.functions.Division;
|
||||||
|
import org.warp.picalculator.math.functions.Number;
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Power;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.nevec.rjm.NumeroAvanzato;
|
||||||
|
import org.nevec.rjm.NumeroAvanzatoVec;
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fractions rule<br>
|
||||||
|
* <b>(a / b) ^ -1 = b / a</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FractionsRule4 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) throws Error {
|
||||||
|
if (f instanceof Power) {
|
||||||
|
Power fnc = (Power) f;
|
||||||
|
if (fnc.getVariable1() instanceof Division && fnc.getVariable2() instanceof Number) {
|
||||||
|
Number n2 = (Number) fnc.getVariable2();
|
||||||
|
if (n2.equals(new Number(null, "-1"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
Power fnc = (Power) f;
|
||||||
|
Function a = ((Division)fnc.getVariable1()).getVariable1();
|
||||||
|
Function b = ((Division)fnc.getVariable1()).getVariable2();
|
||||||
|
Division res = new Division(f.getParent(), b, a);
|
||||||
|
result.add(res);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
49
src/org/warp/picalculator/math/rules/FractionsRule5.java
Normal file
49
src/org/warp/picalculator/math/rules/FractionsRule5.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import org.warp.picalculator.math.functions.Division;
|
||||||
|
import org.warp.picalculator.math.functions.Number;
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Power;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.nevec.rjm.NumeroAvanzato;
|
||||||
|
import org.nevec.rjm.NumeroAvanzatoVec;
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fractions rule<br>
|
||||||
|
* <b>(a / b) ^ -c = (b / a) ^ c</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FractionsRule5 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) throws Error {
|
||||||
|
if (f instanceof Power) {
|
||||||
|
Power fnc = (Power) f;
|
||||||
|
if (fnc.getVariable1() instanceof Division && fnc.getVariable2() instanceof Number) {
|
||||||
|
Number n2 = (Number) fnc.getVariable2();
|
||||||
|
if (n2.getTerm().compareTo(new NumeroAvanzatoVec(NumeroAvanzato.ZERO)) < 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
Power fnc = (Power) f;
|
||||||
|
Function a = ((Division)fnc.getVariable1()).getVariable1();
|
||||||
|
Function b = ((Division)fnc.getVariable1()).getVariable2();
|
||||||
|
Function c = ((Number)fnc.getVariable2()).multiply(new Number(null, "-1"));
|
||||||
|
Division dv = new Division(null, b, a);
|
||||||
|
Power pow = new Power(f.getParent(), dv, c);
|
||||||
|
dv.setParent(pow);
|
||||||
|
result.add(pow);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
49
src/org/warp/picalculator/math/rules/NumberRule1.java
Normal file
49
src/org/warp/picalculator/math/rules/NumberRule1.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Multiplication;
|
||||||
|
import org.warp.picalculator.math.functions.Number;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number rule<br>
|
||||||
|
* <b>a * 0 = 0</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class NumberRule1 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) {
|
||||||
|
try {
|
||||||
|
if (f instanceof Multiplication) {
|
||||||
|
Multiplication mult = (Multiplication) f;
|
||||||
|
if (mult.getVariable1() instanceof Number) {
|
||||||
|
Number numb = (Number) mult.getVariable1();
|
||||||
|
if (numb.equals(new Number(null, "0"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mult.getVariable2() instanceof Number) {
|
||||||
|
Number numb = (Number) mult.getVariable2();
|
||||||
|
if (numb.equals(new Number(null, "0"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Error e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
result.add(new Number(f.getParent(), "0"));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
67
src/org/warp/picalculator/math/rules/NumberRule2.java
Normal file
67
src/org/warp/picalculator/math/rules/NumberRule2.java
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Multiplication;
|
||||||
|
import org.warp.picalculator.math.functions.Number;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number rule<br>
|
||||||
|
* <b>a * 1 = a</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class NumberRule2 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) {
|
||||||
|
try {
|
||||||
|
if (f instanceof Multiplication) {
|
||||||
|
Multiplication mult = (Multiplication) f;
|
||||||
|
if (mult.getVariable1() instanceof Number) {
|
||||||
|
Number numb = (Number) mult.getVariable1();
|
||||||
|
if (numb.equals(new Number(null, "1"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mult.getVariable2() instanceof Number) {
|
||||||
|
Number numb = (Number) mult.getVariable2();
|
||||||
|
if (numb.equals(new Number(null, "1"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Error e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
Function a = null;
|
||||||
|
boolean aFound = false;
|
||||||
|
Multiplication mult = (Multiplication) f;
|
||||||
|
if (aFound == false & mult.getVariable1() instanceof Number) {
|
||||||
|
Number numb = (Number) mult.getVariable1();
|
||||||
|
if (numb.equals(new Number(null, "1"))) {
|
||||||
|
a = mult.getVariable2();
|
||||||
|
aFound = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (aFound == false && mult.getVariable2() instanceof Number) {
|
||||||
|
Number numb = (Number) mult.getVariable2();
|
||||||
|
if (numb.equals(new Number(null, "1"))) {
|
||||||
|
a = mult.getVariable1();
|
||||||
|
aFound = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.add(a.setParent(f.getParent()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
43
src/org/warp/picalculator/math/rules/UndefinedRule2.java
Normal file
43
src/org/warp/picalculator/math/rules/UndefinedRule2.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package org.warp.picalculator.math.rules;
|
||||||
|
|
||||||
|
import org.warp.picalculator.math.functions.Division;
|
||||||
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
import org.warp.picalculator.math.functions.Number;
|
||||||
|
import org.warp.picalculator.math.functions.Undefined;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.warp.picalculator.Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undefined rule<br>
|
||||||
|
* <b>a / 0 = undefined</b>
|
||||||
|
* @author Andrea Cavalli
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class UndefinedRule2 {
|
||||||
|
|
||||||
|
public static boolean compare(Function f) {
|
||||||
|
try {
|
||||||
|
if (f instanceof Division) {
|
||||||
|
Division fnc = (Division) f;
|
||||||
|
if (fnc.getVariable2() instanceof Number) {
|
||||||
|
Number numb = (Number) fnc.getVariable2();
|
||||||
|
if (numb.equals(new Number(null, "0"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Error e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArrayList<Function> execute(Function f) throws Error {
|
||||||
|
ArrayList<Function> result = new ArrayList<>();
|
||||||
|
result.add(new Undefined(f.getParent()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -18,6 +18,9 @@ import org.warp.picalculator.device.graphicengine.Screen;
|
|||||||
import org.warp.picalculator.math.Calculator;
|
import org.warp.picalculator.math.Calculator;
|
||||||
import org.warp.picalculator.math.functions.Function;
|
import org.warp.picalculator.math.functions.Function;
|
||||||
|
|
||||||
|
import com.rits.cloning.Cloner;
|
||||||
|
import com.rits.cloning.FastClonerArrayList;
|
||||||
|
|
||||||
public class EquationScreen extends Screen {
|
public class EquationScreen extends Screen {
|
||||||
|
|
||||||
public float endLoading;
|
public float endLoading;
|
||||||
@ -28,6 +31,7 @@ public class EquationScreen extends Screen {
|
|||||||
public volatile float showCaretDelta = 0f;
|
public volatile float showCaretDelta = 0f;
|
||||||
public List<Function> f;
|
public List<Function> f;
|
||||||
public List<Function> f2;
|
public List<Function> f2;
|
||||||
|
public int resultsCount;
|
||||||
public int ew1;
|
public int ew1;
|
||||||
public int ew2;
|
public int ew2;
|
||||||
public int eh2;
|
public int eh2;
|
||||||
@ -84,8 +88,11 @@ public class EquationScreen extends Screen {
|
|||||||
// Funzione f = new Parentesi("5Y+XY=2", "")
|
// Funzione f = new Parentesi("5Y+XY=2", "")
|
||||||
|
|
||||||
// calcola("((5^2+3√(100/0.1))+Ⓐ(7)+9/15*2√(26/2))/21");
|
// calcola("((5^2+3√(100/0.1))+Ⓐ(7)+9/15*2√(26/2))/21");
|
||||||
f = new ArrayList<Function>();
|
if (f == null & f2 == null) {
|
||||||
f2 = new ArrayList<Function>();
|
f = new ArrayList<Function>();
|
||||||
|
f2 = new ArrayList<Function>();
|
||||||
|
resultsCount = 0;
|
||||||
|
}
|
||||||
// interpreta("{(5X*(15X/3X))+(25X/(5X*(15X/3X)))=15{X=5"); //TODO RIMUOVERE
|
// interpreta("{(5X*(15X/3X))+(25X/(5X*(15X/3X)))=15{X=5"); //TODO RIMUOVERE
|
||||||
|
|
||||||
// long start = System.nanoTime();
|
// long start = System.nanoTime();
|
||||||
@ -122,7 +129,7 @@ public class EquationScreen extends Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void solve() throws Error {
|
public void solve() throws Error {
|
||||||
Calculator.solve();
|
Calculator.solve(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -137,14 +144,14 @@ public class EquationScreen extends Screen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render() {
|
public void render() {
|
||||||
Display.Render.setFont(Utils.getFont(false));
|
Display.Render.glSetFont(Utils.getFont(false));
|
||||||
glClearColor(0xFFCCE7D4);
|
glClearColor(0xFFCCE7D4);
|
||||||
glColor3f(0, 0, 0);
|
glColor3f(0, 0, 0);
|
||||||
glDrawStringLeft(2, 22, nuovaEquazione.substring(0, caretPos)+(showCaret?"|":"")+nuovaEquazione.substring(((showCaret==false||nuovaEquazione.length()<=caretPos)?caretPos:caretPos+1), nuovaEquazione.length()));
|
glDrawStringLeft(2, 22, nuovaEquazione.substring(0, caretPos)+(showCaret?"|":"")+nuovaEquazione.substring(((showCaret==false||nuovaEquazione.length()<=caretPos)?caretPos:caretPos+1), nuovaEquazione.length()));
|
||||||
if (f != null) {
|
if (f != null) {
|
||||||
int topSpacing = 0;
|
int topSpacing = 0;
|
||||||
for (Function f : f) {
|
for (Function f : f) {
|
||||||
f.draw(2, 22+1+getFontHeight()+1+topSpacing);
|
f.draw(2, 22+1+glGetCurrentFontHeight()+1+topSpacing);
|
||||||
topSpacing += f.getHeight() + 2;
|
topSpacing += f.getHeight() + 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,6 +161,13 @@ public class EquationScreen extends Screen {
|
|||||||
bottomSpacing += f.getHeight()+2;
|
bottomSpacing += f.getHeight()+2;
|
||||||
f.draw(Display.getWidth() - 2 - f.getWidth(), Display.getHeight() - bottomSpacing);
|
f.draw(Display.getWidth() - 2 - f.getWidth(), Display.getHeight() - bottomSpacing);
|
||||||
}
|
}
|
||||||
|
if (resultsCount > 1 && resultsCount != f2.size()) {
|
||||||
|
String resultsCountText = resultsCount+" total results".toUpperCase();
|
||||||
|
glColor(0xFF9AAEA0);
|
||||||
|
glSetFont(Utils.getFont(true));
|
||||||
|
bottomSpacing += glGetCurrentFontHeight()+2;
|
||||||
|
glDrawStringRight(Display.getWidth() - 2, Display.getHeight() - bottomSpacing, resultsCountText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +186,7 @@ public class EquationScreen extends Screen {
|
|||||||
switch (k) {
|
switch (k) {
|
||||||
case SIMPLIFY:
|
case SIMPLIFY:
|
||||||
if (nuovaEquazione.length() > 0) {
|
if (nuovaEquazione.length() > 0) {
|
||||||
Calculator.simplify();
|
Calculator.simplify(this);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case SOLVE:
|
case SOLVE:
|
||||||
@ -184,6 +198,7 @@ public class EquationScreen extends Screen {
|
|||||||
if (nuovaEquazione != equazioneCorrente && nuovaEquazione.length() > 0) {
|
if (nuovaEquazione != equazioneCorrente && nuovaEquazione.length() > 0) {
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
|
changeEquationScreen();
|
||||||
interpreta(nuovaEquazione);
|
interpreta(nuovaEquazione);
|
||||||
solve();
|
solve();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@ -322,12 +337,24 @@ public class EquationScreen extends Screen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void changeEquationScreen() {
|
||||||
|
if (equazioneCorrente != null && equazioneCorrente.length() > 0) {
|
||||||
|
EquationScreen cloned = clone();
|
||||||
|
cloned.caretPos = cloned.equazioneCorrente.length();
|
||||||
|
cloned.nuovaEquazione = cloned.equazioneCorrente;
|
||||||
|
PIDisplay.INSTANCE.replaceScreen(cloned);
|
||||||
|
this.initialized = false;
|
||||||
|
PIDisplay.INSTANCE.setScreen(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void typeChar(String chr) {
|
public void typeChar(String chr) {
|
||||||
nuovaEquazione=nuovaEquazione.substring(0, caretPos)+chr+nuovaEquazione.substring(caretPos, nuovaEquazione.length());
|
nuovaEquazione=nuovaEquazione.substring(0, caretPos)+chr+nuovaEquazione.substring(caretPos, nuovaEquazione.length());
|
||||||
caretPos+=1;
|
caretPos+=1;
|
||||||
showCaret = true;
|
showCaret = true;
|
||||||
showCaretDelta = 0L;
|
showCaretDelta = 0L;
|
||||||
f.clear();
|
// f.clear(); //TODO: I removed this line to prevent input blanking when pressing EQUALS button and cloning this screen, but I must see why I created this part of code.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -335,5 +362,34 @@ public class EquationScreen extends Screen {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EquationScreen clone() {
|
||||||
|
EquationScreen es = this;
|
||||||
|
EquationScreen es2 = new EquationScreen();
|
||||||
|
es2.endLoading = es.endLoading;
|
||||||
|
es2.nuovaEquazione = es.nuovaEquazione;
|
||||||
|
es2.equazioneCorrente = es.equazioneCorrente;
|
||||||
|
es2.showCaret = es.showCaret;
|
||||||
|
es2.showCaretDelta = es.showCaretDelta;
|
||||||
|
es2.caretPos = es.caretPos;
|
||||||
|
es2.f = Utils.cloner.deepClone(es.f);
|
||||||
|
es2.f2 = Utils.cloner.deepClone(es.f2);
|
||||||
|
es2.resultsCount = es.resultsCount;
|
||||||
|
es2.ew1 = es.ew1;
|
||||||
|
es2.ew2 = es.ew2;
|
||||||
|
es2.eh2 = es.eh2;
|
||||||
|
es2.x1 = es.x1;
|
||||||
|
es2.x2 = es.x2;
|
||||||
|
es2.requiresleep1 = es.requiresleep1;
|
||||||
|
es2.requiresleep2 = es.requiresleep2;
|
||||||
|
es2.autoscroll = es.autoscroll;
|
||||||
|
es2.errorLevel = es.errorLevel;
|
||||||
|
es2.err1 = es.err1;
|
||||||
|
es2.err2 = es.err2;
|
||||||
|
es2.mustRefresh = es.mustRefresh;
|
||||||
|
es2.aftersleep = es.aftersleep;
|
||||||
|
return es2;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ public class LoadingScreen extends Screen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render() {
|
public void render() {
|
||||||
setFont(fonts[2]);
|
glSetFont(fonts[2]);
|
||||||
colore(1.0f, 1.0f, 1.0f, 1.0f);
|
colore(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
glDrawStringCenter((Main.screenSize[0] / 2) - 1,(int) ((Main.screenSize[1]/ 2) - 25 + loadingTextTranslation), "ANDREA CAVALLI'S CALCULATOR");
|
glDrawStringCenter((Main.screenSize[0] / 2) - 1,(int) ((Main.screenSize[1]/ 2) - 25 + loadingTextTranslation), "ANDREA CAVALLI'S CALCULATOR");
|
||||||
colore(1.0f, 1.0f, 1.0f, 1.0f);
|
colore(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
@ -81,9 +81,9 @@ public class LoadingScreen extends Screen {
|
|||||||
colore(1.0f, 0.5f, 0.0f, 1.0f);
|
colore(1.0f, 0.5f, 0.0f, 1.0f);
|
||||||
glDrawStringCenter((Main.screenSize[0] / 2), (int) ((Main.screenSize[1]/ 2) - 25 + loadingTextTranslation), "ANDREA CAVALLI'S CALCULATOR");
|
glDrawStringCenter((Main.screenSize[0] / 2), (int) ((Main.screenSize[1]/ 2) - 25 + loadingTextTranslation), "ANDREA CAVALLI'S CALCULATOR");
|
||||||
colore(0.0f, 0.0f, 0.0f, 0.75f);
|
colore(0.0f, 0.0f, 0.0f, 0.75f);
|
||||||
setFont(fonts[0]);
|
glSetFont(fonts[0]);
|
||||||
glDrawStringCenter((Main.screenSize[0] / 2), (Main.screenSize[1]/ 2) + 11, "LOADING");
|
glDrawStringCenter((Main.screenSize[0] / 2), (Main.screenSize[1]/ 2) + 11, "LOADING");
|
||||||
setFont(fonts[1]);
|
glSetFont(fonts[1]);
|
||||||
colore(0.0f, 0.0f, 0.0f, 0.5f);
|
colore(0.0f, 0.0f, 0.0f, 0.5f);
|
||||||
glDrawStringCenter((Main.screenSize[0] / 2), (Main.screenSize[1]/ 2) + 22, "PLEASE WAIT...");
|
glDrawStringCenter((Main.screenSize[0] / 2), (Main.screenSize[1]/ 2) + 22, "PLEASE WAIT...");
|
||||||
|
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
package org.warp.picalculator.screens;
|
package org.warp.picalculator.screens;
|
||||||
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.getMatrixOfImage;
|
import static org.warp.picalculator.device.graphicengine.Display.Render.*;
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glClearColor;
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawSkin;
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.glDrawStringLeft;
|
|
||||||
import static org.warp.picalculator.device.graphicengine.Display.Render.setFont;
|
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -142,7 +138,7 @@ public class MarioScreen extends Screen {
|
|||||||
if (errored) {
|
if (errored) {
|
||||||
glDrawStringLeft(0, 20, "ERROR");
|
glDrawStringLeft(0, 20, "ERROR");
|
||||||
} else {
|
} else {
|
||||||
setFont(PIDisplay.fonts[0]);
|
glSetFont(PIDisplay.fonts[0]);
|
||||||
glClearColor(0xff9290ff);
|
glClearColor(0xff9290ff);
|
||||||
glDrawSkin(groundSize[0], ground, 0, 25+25, 0, 0, 16, 16, false);
|
glDrawSkin(groundSize[0], ground, 0, 25+25, 0, 0, 16, 16, false);
|
||||||
glDrawSkin(groundSize[0], ground, 16, 25+25, 0, 0, 16, 16, false);
|
glDrawSkin(groundSize[0], ground, 16, 25+25, 0, 0, 16, 16, false);
|
||||||
@ -163,6 +159,23 @@ public class MarioScreen extends Screen {
|
|||||||
glDrawSkin(groundSize[0], ground, 16*7, 25+25+16, 0, 0, 16, 16, false);
|
glDrawSkin(groundSize[0], ground, 16*7, 25+25+16, 0, 0, 16, 16, false);
|
||||||
glDrawSkin(groundSize[0], ground, 16*8, 25+25+16, 0, 0, 16, 16, false);
|
glDrawSkin(groundSize[0], ground, 16*8, 25+25+16, 0, 0, 16, 16, false);
|
||||||
|
|
||||||
|
// EASTER EGG
|
||||||
|
// glSetFont(PIDisplay.fonts[4]);
|
||||||
|
// glColor(0xFF000000);
|
||||||
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "A");
|
||||||
|
// glColor(0xFF800000);
|
||||||
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "B");
|
||||||
|
// glColor(0xFFeea28e);
|
||||||
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "C");
|
||||||
|
// glColor(0xFFee7255);
|
||||||
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "D");
|
||||||
|
// glColor(0xFFeac0b0);
|
||||||
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "E");
|
||||||
|
// glColor(0xFFf3d8ce);
|
||||||
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "F");
|
||||||
|
// glColor(0xffede7);
|
||||||
|
// glDrawStringRight(0, Main.screenSize[1]-glGetCurrentFontHeight(), "G");
|
||||||
|
|
||||||
//DRAW MARIO
|
//DRAW MARIO
|
||||||
glDrawSkin(skinSize[0], skin, getPosX()-18, 25+getPosY(), 35*(marioSkinPos[0]+(flipped?2:1)), 27*marioSkinPos[1], 35*(marioSkinPos[0]+(flipped?1:2)), 27*(marioSkinPos[1]+1), true);
|
glDrawSkin(skinSize[0], skin, getPosX()-18, 25+getPosY(), 35*(marioSkinPos[0]+(flipped?2:1)), 27*marioSkinPos[1], 35*(marioSkinPos[0]+(flipped?1:2)), 27*(marioSkinPos[1]+1), true);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user