//------------------- class Empty extends Expression{ Empty(Expression parent){ this.parent = parent; initSubExp(0); w = 30; h = 10; } void draw(int x, int y){ stroke(255,0,0); rect(x,y,30,10); stroke(0); } } //------------------- class Power extends Expression{ Expression exponent; Power(Expression parent){ this.parent = parent; initSubExp(1); w = 2; h = 2; exponent = new NumericalValue( this, 5 ); } int height(){ return subExp[0].height() + exponent.height() + h; } int width(){ return subExp[0].width() + exponent.width() + w; } void draw(int x, int y){ int subW = subExp[0].width(); int subH = height(); subExp[0].draw( x, y+exponent.height()+2 ); exponent.draw( x+subExp[0].width()+2, y ); } }//------------------- class Sqrt extends Expression{ Sqrt(Expression parent){ this.parent = parent; initSubExp(1); w = 9; h = 2; } void draw(int x, int y){ int subW = subExp[0].width(); int subH = subExp[0].height(); noFill(); beginShape(); vertex(x+0,y+subH/2); vertex(x+3,y+subH+h); vertex(x+5,y); vertex(x+subW+w,y); vertex(x+subW+w,y+h); endShape(); subExp[0].draw((int)(x+w-2),y+h); } } //------------------- class Parentheses extends Expression{ Parentheses(Expression parent){ this.parent = parent; initSubExp(1); w = 8; h = 4; } void draw(int x, int y){ int subW = subExp[0].width(); int subH = subExp[0].height(); noFill(); beginShape(); vertex(x+3,y); vertex(x+2,y); vertex(x,y+2); vertex(x,y+2+subH); vertex(x+2,y+4+subH); vertex(x+3,y+4+subH); endShape(); beginShape(); vertex(x+subW+w-3,y); vertex(x+subW+w-2,y); vertex(x+subW+w,y+2); vertex(x+subW+w,y+2+subH); vertex(x+subW+w-2,y+4+subH); vertex(x+subW+w-3,y+4+subH); endShape(); subExp[0].draw(x+4,y+2); } } //------------------- class Abs extends Expression{ Abs(Expression parent){ this.parent = parent; initSubExp(1); w = 6; h = 2; } void draw(int x, int y){ int subW = subExp[0].width(); int subH = subExp[0].height(); noFill(); line(x,y,x,y+2+subH); line(x+subW+w,y,x+subW+w,y+2+subH); subExp[0].draw(x+3,y+1); } } //------------------- class Function extends Expression{ String function; Function(Expression parent, String name){ function = name; this.parent = parent; initSubExp(1); w = 8; h = 4; } int width(){ w = 2+8+(int) textWidth(function); return subExp[0].width() + w; } void draw(int x, int y){ int cosW = 2+(int) textWidth(function); int subW = subExp[0].width(); int subH = subExp[0].height(); noFill(); beginShape(); vertex(x+cosW+3,y); vertex(x+cosW+2,y); vertex(x+cosW,y+2); vertex(x+cosW,y+2+subH); vertex(x+cosW+2,y+4+subH); vertex(x+cosW+3,y+4+subH); endShape(); beginShape(); vertex(x+subW+w-3,y); vertex(x+subW+w-2,y); vertex(x+subW+w,y+2); vertex(x+subW+w,y+2+subH); vertex(x+subW+w-2,y+4+subH); vertex(x+subW+w-3,y+4+subH); endShape(); fill(0); text(function,x,y+h+subH/2+2); subExp[0].draw(x+4+cosW,y+2); } } //------------------- class Cos extends Function{ Cos(Expression parent){ super( parent, "cos" ); } } //------------------- class Sin extends Function{ Sin(Expression parent){ super( parent, "sin" ); } } //------------------- class Tan extends Function{ Tan(Expression parent){ super( parent, "tan" ); } } //------------------- class Log extends Function{ Log(Expression parent){ super( parent, "log" ); } } //------------------- class Ln extends Function{ Ln(Expression parent){ super( parent, "ln" ); } } //------------------- class NumericalValue extends Expression{ int value; NumericalValue(Expression parent){ value = (int) random(100f); this.parent = parent; initSubExp(0); w = (int) textWidth( str(value) ); h = 5; } NumericalValue(Expression parent, int maxVal){ value = (int) random(2,maxVal); this.parent = parent; initSubExp(0); w = (int) textWidth( str(value) ); h = 5; } void draw(int x, int y){ fill(0); text( str(value), x, y+h ); } } //-------------------