@@ -74,6 +74,7 @@ class Panel extends JPanel {
7474 BufferedImage tempImage = null ;
7575 boolean zoomChanged = true ;
7676 boolean panChanged = true ;
77+ boolean keyChanged = false ;
7778 double mandelbrotDetail ;
7879 boolean userPressed = false ;
7980 Panel ()
@@ -172,6 +173,13 @@ public void mouseDragged(MouseEvent m)//when mouse dragged
172173 lastPoint = m .getPoint ();
173174 }
174175 });
176+ menu .P .addKeyListener (new KeyAdapter () {
177+ @ Override
178+ public void keyTyped (KeyEvent e ) {
179+ super .keyTyped (e );
180+ keyChanged = true ;
181+ }
182+ });
175183 }
176184 public void updateArrows ()
177185 {
@@ -187,6 +195,7 @@ public Point2D.Double getVector(double coordX, double coordY)
187195 Complex R ;
188196 Complex S ;
189197 //here's where you put the function the vector field is representing
198+ try {
190199 Expression pExpression = new ExpressionBuilder (menu .P .getText ())
191200 .variables ("x" , "y" , "t" )
192201 .build ()
@@ -201,6 +210,11 @@ public Point2D.Double getVector(double coordX, double coordY)
201210 .setVariable ("t" , time );
202211 P = pExpression .evaluate ();
203212 Q = qExpression .evaluate ();
213+ }
214+ catch (IllegalArgumentException e )
215+ {
216+ return new Point2D .Double (0 ,0 );
217+ }
204218 //double P = coordY/(Math.pow(coordX, 2) + Math.pow(coordY, 2)) + Math.cos(time);
205219 //double Q = -coordX/(Math.pow(coordX, 2) + Math.pow(coordY, 2)) + Math.sin(time);
206220 double magnitude = Math .sqrt (Math .pow (P , 2 ) + Math .pow (Q , 2 ));
@@ -258,7 +272,7 @@ else if(menu.colorWithDiv.isSelected())
258272 public Color hslToRGB (float h , float s , float l )
259273 {//h is [0,360) (degrees), s is [0, 1] l is [0, 1]
260274 //System.out.println(h + " " + s + " " + l);
261- // l = 0.8f *l + 0.2f ;
275+ l = 0.92f *l + 0.08f ;
262276 if (s >= 1 ){s = 0.9999f ;}
263277 if (l >= 1 ){l = 0.9999f ;}
264278 s = 0.7f *s + 0.29999f ;
@@ -377,7 +391,7 @@ public void run() {
377391 }
378392 else
379393 {
380- if (!zoomChanged && !panChanged && tempImage != null ) {
394+ if (!zoomChanged && !panChanged && ! keyChanged && tempImage != null ) {
381395 g .drawImage (tempImage , 0 , 0 , null );
382396 }
383397 else
@@ -389,27 +403,33 @@ public void run() {
389403 double modulus ;
390404 Complex R ;
391405 Color tempColor ;
406+ parser .removeVariable ("x" );
407+ parser .removeVariable ("y" );
392408 for (int i = 0 ; i < numIStep ; i ++) {
393409 for (int j = 0 ; j < numJStep ; j ++) {
394410 m = new Complex (screenToCoordsX (i * iStep ), screenToCoordsY (j * jStep ));
395411 parser .addComplexVariable ("z" , m .re (), m .im ());
396412 parser .parseExpression (menu .P .getText ());
397413 R = parser .getComplexValue ();
398414 //System.out.println(R);
399- argument = Math .toDegrees (Math .atan2 (R .im (), R .re ()));
400- if (argument < 0f ) {
401- argument = argument + 360f ;
402- }
403- modulus = Math .sqrt (Math .pow (R .re (), 2 ) + Math .pow (R .im (), 2 ));
404- modulus = (float ) Math .pow ((1f - Math .exp (-0.02f * modulus )), 0.3 );
405- tempColor = hslToRGB ((float ) argument , (float ) modulus , (float ) modulus );
406- int rgbval = tempColor .getRGB ();
407- for (int k = i *iStep ; k < (i +1 )*iStep ; k ++)
408- {
409- for (int l = j *jStep ; l < (j +1 )*jStep ; l ++)
410- {
411- colors [k ][l ] = rgbval ;
415+ if (!parser .hasError ()) {
416+ menu .P .setForeground (Color .white );
417+ argument = Math .toDegrees (Math .atan2 (R .im (), R .re ()));
418+ if (argument < 0f ) {
419+ argument = argument + 360f ;
412420 }
421+ modulus = Math .sqrt (Math .pow (R .re (), 2 ) + Math .pow (R .im (), 2 ));
422+ modulus = (float ) Math .pow ((1f - Math .exp (-0.02f * modulus )), 0.3 );
423+ tempColor = hslToRGB ((float ) argument , (float ) modulus , (float ) modulus );
424+ int rgbval = tempColor .getRGB ();
425+ for (int k = i * iStep ; k < (i + 1 ) * iStep ; k ++) {
426+ for (int l = j * jStep ; l < (j + 1 ) * jStep ; l ++) {
427+ colors [k ][l ] = rgbval ;
428+ }
429+ }
430+ }
431+ else {
432+ menu .P .setForeground (Color .red );
413433 }
414434 /*for(int k = i*iStep; k < (i + 1)*iStep; k++)
415435 {
@@ -466,7 +486,7 @@ public void run() {
466486 };
467487 range = Range .create (16 );
468488 }
469- if (!zoomChanged && !panChanged && tempImage != null ) {
489+ if (!zoomChanged && !panChanged && ! keyChanged && tempImage != null ) {
470490 g .drawImage (tempImage , 0 , 0 , null );
471491 }
472492 /*else if(panChanged && tempImage != null)
@@ -979,6 +999,7 @@ protected void paintComponent(Graphics gInit) {
979999 time += 0.049 ;
9801000 zoomChanged = false ;
9811001 panChanged = false ;
1002+ keyChanged = false ;
9821003 }
9831004 public void refreshScreen () {
9841005 timer = new Timer (0 , new ActionListener () {
0 commit comments