package senscript;
import wisen_simulation.SimLog;
import device.SensorNode;
public class Command_ANGLE extends Command {
protected String arg1 = "";
protected String arg2 = "";
protected String arg3 = "";
protected String arg4 = "";
public Command_ANGLE(SensorNode sensor, String arg1, String arg2, String arg3, String arg4) {
this.sensor = sensor ;
this.arg1 = arg1 ;
this.arg2 = arg2 ;
this.arg3 = arg3 ;
this.arg4 = arg4 ;
}
@Override
public double execute() {
SimLog.add("S" + sensor.getId() + " Calculate Angle.");
String prev = sensor.getScript().getVariableValue(arg2);
String local = sensor.getScript().getVariableValue(arg3);
String next = sensor.getScript().getVariableValue(arg4);
String[] prec_tab = prev.split("#");
String[] local_tab = local.split("#");
String[] next_tab = next.split("#");
double prec_X = Double.valueOf(prec_tab[0]);
double prec_Y = Double.valueOf(prec_tab[1]);
double local_X = Double.valueOf(local_tab[0]);
double local_Y = Double.valueOf(local_tab[1]);
double next_X = Double.valueOf(next_tab[0]);
double next_Y = Double.valueOf(next_tab[1]);
double b = getAngle(prec_X, prec_Y, local_X, local_Y, next_X, next_Y);
sensor.getScript().addVariable(arg1, ""+b);
return 0;
}
public double getAngle(double prec_X, double prec_Y, double local_X, double local_Y, double next_X, double next_Y) {
prec_X = prec_X - local_X;
prec_Y = prec_Y - local_Y;
next_X = next_X - local_X;
next_Y = next_Y - local_Y;
double b = 0;
double a = 0;
if(prec_X==next_X && prec_Y==next_Y)
b = Math.PI*2;
else{
a = Math.atan2(prec_X ,prec_Y);
if (a < 0)
a = (2 * Math.PI) + a;
b = Math.atan2(next_X, next_Y);
if (b < 0)
b = (2 * Math.PI) + b;
b = b - a;
if (b < 0)
b = (2 * Math.PI) + b;
}
return b;
}
@Override
public String toString() {
return "ANGLE";
}
}