//Mod4State.java
/*
 * State routine - calculate/update numerical values for microstrip
 * authors: Umberto Ravaioli, Janice Richards
 * version 1.0 - Copyright: Amanogawa.com - All Rights Reserved
 */

import java.util.*;
import java.awt.Point;
import java.awt.Color;
import java.awt.Font;

public class Mod4State {

    public static final double epsilonMax = 4.0;
    public static final double epsilonMin = 1.0;

    //public static final int placeNegativeCharge = 1;    
    public static final int placeCharge = 2;    
    public static final int changeChargeValue = 3;
    public static final int removeCharge = 4;    
    public static final int moveCharge = 5;    
    public static final int showVoltageAtCursor = 6;    
    public int currentAction;

    public Point highlightedPoint;

    public double chargeToAdd = 5.0;
    public static final double chargeMin = -5.0;
    public static final double chargeMax = 5.0;
    public static final double elementaryCharge = 1.6E-19; // in nCoulombs
    public static final double epsilon = 8.85E-12;

    public int deltaV = 10;   // initial number of equipotential lines

  // Maximum voltage is 103.16 (or actually > 106, with the additive charges)
  //  after all calculations;
  // below value is actually the CHARGE max (5*elementaryCharge)
  public double vmax; // for 5 elem charges at 1 grid diff

  // Round the 103 or 106 down to a nice even number:
  public static final double potentialMax = 100.0;
    public static final double efieldMax = 21;  // ???????
    public double voltageAtCursor = 0.0;   // intialized
    public double efieldAtCursor = 0.0;   // intialized
    public double efieldThetaAtCursor = 0.0;   // intialized

    //public int positiveChargeToAdd = 5;   // changeable in input
    //public int negativeChargeToAdd = -5;  //         ""

    public Point moveFromPoint = new Point(-1,-1);   // intialized
    public Point moveToPoint = new Point(-1,-1);   // intialized

    public boolean displayPotentialField = true;
    public boolean displayEquiPotentialLines = false;
    public boolean displayElectricField = false;
    public boolean displayChargeDensity = false;


  public static Color bgColor = new Color(194,235,255);
  //public static Color axisColor = Color.black;
  public static Color axisColor = Color.white;
    public static Color lineColor = Color.orange;

    public Font ttfFont, sanSerifFont, serifFont, symbolFont, italicFont;

    //public static Font boldFont = new Font("Serif",Font.BOLD, 18);
    
    public boolean LicenseExpired;
    public int this_month, today_week, this_year, this_hour, this_minute, 
        today_month, today_year, this_zone, saving_time;
    GregorianCalendar Greg = new GregorianCalendar();

    public double lookup[];

    
    public Mod4State(){
      vmax = chargeMax*elementaryCharge;
      currentAction = placeCharge;

      lookup = new double[(int)(potentialMax*10+1)];  //1001  0 - 1000
      lookup[0] = 0;
      double minNumber = Math.log(10);
      double maxNumber = Math.log(lookup.length+10) - minNumber;
      for (int i=1; i<lookup.length; i++) {
          lookup[i] = (Math.log(i+10)-minNumber)/maxNumber;
      }
    }
}


