Skip to content

Commit 0932e3e

Browse files
authored
Update Main.java
1 parent 1f890fb commit 0932e3e

1 file changed

Lines changed: 37 additions & 16 deletions

File tree

src/Main.java

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)