use of expression.Node in project OpenNotebook by jaltekruse.
the class AssociativePropertiesWithVariables method generateExpression.
@Override
protected Node[] generateExpression(int difficulty) throws NodeException {
Node[] n = new Node[2];
if (ExUtil.randomBoolean()) {
if (difficulty == ProblemGenerator.EASY) {
double[] numPair = ExUtil.pairOfCleanAddingNumbers(100);
n[0] = ExUtil.randomlyStaggerOperation(new Operator.Addition(), new Number(numPair[0]), ExUtil.randomTerm(1, ExUtil.randomVarName(), 3, 12), new Number(numPair[1]));
} else if (difficulty == ProblemGenerator.MEDIUM) {
double[] numPair = ExUtil.pairOfCleanAddingNumbers(100);
double[] numPair2 = ExUtil.pairOfCleanAddingNumbers(200);
n[0] = ExUtil.randomlyStaggerOperation(new Operator.Addition(), new Number(numPair[0]), new Number(numPair2[1]), ExUtil.randomTerm(1, ExUtil.randomVarName(), 3, 12), new Number(numPair[1]), new Number(numPair2[0]));
} else if (difficulty == ProblemGenerator.HARD) {
double[] numPair = ExUtil.pairOfCleanAddingNumbers(400);
double[] numPair2 = ExUtil.pairOfCleanAddingNumbers(200);
Vector<String> varNames = ExUtil.randomUniqueVarNames(2);
n[0] = ExUtil.randomlyStaggerOperation(new Operator.Addition(), new Number(numPair[0]), ExUtil.randomTerm(1, varNames.get(0), 2, 12), new Number(numPair2[1]), ExUtil.randomTerm(1, varNames.get(1), 3, 12), new Number(numPair[1]), new Number(numPair2[0]));
}
} else {
// otherwise create a problem testing the associative property of multiplication
if (difficulty == ProblemGenerator.EASY) {
double[] numPair = ExUtil.pairOfCleanFactors(20);
n[0] = ExUtil.randomlyStaggerOperation(new Operator.Multiplication(), new Number(numPair[0]), ExUtil.randomTerm(1, ExUtil.randomVarName(), 3, 12), new Number(numPair[1]));
} else if (difficulty == ProblemGenerator.MEDIUM) {
double[] numPair = ExUtil.pairOfCleanFactors(30);
Vector<String> varNames = ExUtil.randomUniqueVarNames(2);
n[0] = ExUtil.randomlyStaggerOperation(new Operator.Multiplication(), new Number(numPair[0]), ExUtil.randomTerm(1, varNames.get(0), 3, 9), ExUtil.randomTerm(1, varNames.get(1), 3, 12), new Number(numPair[1]));
} else if (difficulty == ProblemGenerator.HARD) {
double[] numPair = ExUtil.pairOfCleanFactors(40);
Vector<String> varNames = ExUtil.randomUniqueVarNames(2);
n[0] = ExUtil.randomlyStaggerOperation(new Operator.Multiplication(), new Number(numPair[0]), ExUtil.randomTerm(1, varNames.get(0), 3, 9), ExUtil.randomTerm(1, varNames.get(1), 3, 12), new Number(numPair[1]));
;
}
}
n[0] = ExUtil.randomlyAddParenthesis((Expression) n[0], 0, 3);
n[1] = n[0].smartNumericSimplify().standardFormat();
return n;
}
use of expression.Node in project OpenNotebook by jaltekruse.
the class VariableValueInsertionProblem method subInVal.
public MathObject subInVal(String s, Node val, MathObject mObj) {
MathObject newObj = mObj.clone();
// TODO - use inheritance for this
if (newObj instanceof Grouping) {
Grouping newGroup = (Grouping) newObj.clone();
newGroup.removeAllObjects();
for (MathObject mathObj : ((Grouping) newObj).getObjects()) {
newGroup.addObjectFromPage(subInVal(s, val, mathObj));
}
return newGroup;
} else if (newObj instanceof ExpressionObject) {
final String exString = ((ExpressionObject) newObj).getExpression();
// TODO - review, make this work with multiple answers
final String ansString = ((ExpressionObject) newObj).getCorrectAnswers().get(0).getValue();
if (exString != null && !exString.equals("")) {
try {
Node expression = Node.parseNode(exString);
expression = expression.replace(s, val);
((ExpressionObject) newObj).setExpression(expression.toStringRepresentation());
Node ansExpression = Node.parseNode(ansString);
ansExpression = ansExpression.replace(s, val);
// TODO - make this work with multiple answers
((ExpressionObject) newObj).getCorrectAnswers().clear();
((ExpressionObject) newObj).addCorrectAnswer(ansExpression.toStringRepresentation());
} catch (Exception e) {
e.printStackTrace();
}
}
} else if (newObj instanceof GraphObject) {
for (StringAttribute exAtt : ((GraphObject) newObj).getExpressions()) {
if (exAtt.getValue() != null && !exAtt.getValue().equals("")) {
try {
Node expression = Node.parseNode(exAtt.getValue());
expression = expression.replace(s, val);
exAtt.setValue(expression.toStringRepresentation());
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (newObj instanceof TextObject) {
final String textString = replaceInString(s, ((TextObject) newObj).getText(), val);
try {
((TextObject) newObj).setText(textString);
} catch (AttributeException e) {
e.printStackTrace();
}
} else if (newObj instanceof AnswerBoxObject) {
String str;
for (StringAttribute strAtt : ((AnswerBoxObject) newObj).getCorrectAnswers().getValues()) {
str = strAtt.getValue();
str = replaceInString(s, str, val);
strAtt.setValue(str);
}
}
return newObj;
}
use of expression.Node in project OpenNotebook by jaltekruse.
the class GraphedCartFunction method draw.
@Override
public void draw(Graphics g) {
// used to temporarily store the value stored in the independent and dependent vars,
// this will allow it to be restored after graphing, so that if in the terminal a
// value was assigned to x, it will not be overriden by the action of graphing
// Number xVal = getIndependentVar().getValue();
// Number yVal = getDependentVar().getValue();
super.clearPts();
Graphics2D g2d = ((Graphics2D) g);
g.setColor(getColor());
if (hasFocus()) {
graph.LINE_SIZE = 3;
} else {
graph.LINE_SIZE = 2;
}
int tempLineSize = graph.LINE_SIZE;
double lastX = 0, lastY = 0, currX = 0, currY = 0;
Node origionalEx = null;
Node ex;
try {
lastX = graph.X_MIN;
origionalEx = Node.parseNode(getFuncEqtn());
ex = origionalEx.cloneNode();
ex = ex.replace(new Identifier(getIndependentVar()), new Number(lastX));
ex = ex.replace("\u03C0", new Number(Math.PI));
ex = ex.replace("e", new Number(Math.E));
ex = ex.numericSimplify();
if (ex instanceof Expression) {
if (((Expression) ex).getOperator() instanceof Operator.Equals) {
if (((Expression) ex).getChild(1) instanceof Number) {
lastY = ((Number) ((Expression) ex).getChild(1)).getValue();
}
}
}
if (gridxToScreen(lastX) <= graph.X_SIZE + graph.X_PIC_ORIGIN && gridxToScreen(lastX) >= +graph.X_PIC_ORIGIN && gridyToScreen(lastY) <= graph.Y_SIZE + graph.Y_PIC_ORIGIN && gridyToScreen(lastY) >= +graph.Y_PIC_ORIGIN) {
// if the current point is on the screen, add it to the list of points
addPt(gridxToScreen(lastX), gridyToScreen(lastY));
}
} catch (Exception e1) {
currX = graph.X_MIN;
lastY = graph.Y_MIN;
;
}
currX = graph.X_MIN;
boolean validExpression;
for (int i = 1; i < graph.X_SIZE; i += 1) {
validExpression = false;
try {
currX = currX + graph.X_PIXEL;
ex = origionalEx.cloneNode();
ex = ex.replace(getIndependentVar(), new Number(currX));
ex = ex.replace("\u03C0", new Number(Math.PI));
ex = ex.replace("e", new Number(Math.E));
ex = ex.numericSimplify();
} catch (Exception e) {
// TODO Auto-generated catch block
lastX = currX;
lastY = graph.Y_MIN;
continue;
}
if (ex instanceof Expression) {
if (((Expression) ex).getOperator() instanceof Operator.Equals) {
if (((Expression) ex).getChild(1) instanceof Number) {
currY = ((Number) ((Expression) ex).getChild(1)).getValue();
validExpression = true;
}
}
} else if (!validExpression) {
lastX = currX;
lastY = graph.Y_MIN;
continue;
}
if (gridxToScreen(currX) <= graph.X_SIZE + graph.X_PIC_ORIGIN && gridxToScreen(currX) >= graph.X_PIC_ORIGIN && gridyToScreen(currY) <= graph.Y_SIZE + graph.Y_PIC_ORIGIN && gridyToScreen(currY) >= graph.Y_PIC_ORIGIN) {
// if the current point is on the screen, add it to the list of points
if (lastY <= graph.Y_MIN) {
addPt(gridxToScreen(lastX), graph.Y_SIZE + graph.Y_PIC_ORIGIN);
}
if (lastY >= graph.Y_MAX) {
addPt(gridxToScreen(lastX), 0 + graph.Y_PIC_ORIGIN);
}
addPt(gridxToScreen(currX), gridyToScreen(currY));
} else if (gridxToScreen(lastX) <= graph.X_SIZE + graph.X_PIC_ORIGIN && gridxToScreen(lastX) >= graph.X_PIC_ORIGIN && gridyToScreen(lastY) <= graph.Y_SIZE + graph.Y_PIC_ORIGIN && gridyToScreen(lastY) >= graph.Y_PIC_ORIGIN) {
// if the last point is on the screen, add the correct boundary for this point to the list
addPt(gridxToScreen(lastX), gridyToScreen(lastY));
if (currY <= graph.Y_MIN) {
addPt(gridxToScreen(currX), graph.Y_SIZE + graph.Y_PIC_ORIGIN);
}
if (currY >= graph.Y_MAX) {
addPt(gridxToScreen(currX), 0 + graph.Y_PIC_ORIGIN);
}
} else if (lastY >= graph.Y_MAX && currY <= graph.Y_MIN) {
// if the last point was off the the top of the screen, and this one is off
// the bottom, add the two to the list of points
addPt(gridxToScreen(lastX), graph.Y_SIZE + graph.Y_PIC_ORIGIN);
addPt(gridxToScreen(currX), 0 + graph.Y_PIC_ORIGIN);
} else if (currY >= graph.Y_MAX && lastY <= graph.Y_MIN) {
// if the last point was off the the bottom of the screen, and this one is off
// the top, add the two to the list of points
addPt(gridxToScreen(lastX), 0 + graph.Y_PIC_ORIGIN);
addPt(gridxToScreen(currX), graph.Y_SIZE + graph.Y_PIC_ORIGIN);
}
if (isConnected()) {
drawLineSeg(lastX, lastY, currX, currY, getColor(), g);
}
lastX = currX;
lastY = currY;
}
// g2d.setStroke(new BasicStroke(graph.LINE_SIZE * graph.DOC_ZOOM_LEVEL,
// BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
// if ( this.getxVals().size() > 0){
// GeneralPath polyline =
// new GeneralPath(GeneralPath.WIND_EVEN_ODD, this.getxVals().size());
// polyline.moveTo (this.getxVals().get(0), this.getyVals().get(0));
// for (int i = 1; i < this.getxVals().size(); i++) {
// polyline.lineTo( getxVals().get(i), getyVals().get(i));
// };
// g2d.draw(polyline);
// }
graph.LINE_SIZE = 2;
g2d.setStroke(new BasicStroke(1));
}
use of expression.Node in project OpenNotebook by jaltekruse.
the class NotebookPanel method getExpressionFromUser.
public Node getExpressionFromUser(String message, String defaultInput) {
String lastEx = defaultInput;
Node newNode = null;
while (true) {
lastEx = createPopupBelowCurrObject(message, lastEx);
if (lastEx == null) {
return null;
}
try {
newNode = Node.parseNode(lastEx);
return newNode;
} catch (NodeException e) {
JOptionPane.showMessageDialog(null, "Error with expression.", WARNING, JOptionPane.WARNING_MESSAGE);
}
}
}
Aggregations