package com.softwarefools.nik.spiritlevel; import java.text.DecimalFormat; import com.softwarefools.nik.spiritlevel.*; import java.util.Locale; import android.content.Context; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.graphics.RectF; import android.hardware.Sensor; import android.hardware.SensorManager; import android.preference.PreferenceManager; import android.util.DisplayMetrics; import android.view.Display; import android.view.Menu; import android.view.View; import android.view.WindowManager; import android.widget.Toast; public class LevelView extends View{ public static DecimalFormat f = new DecimalFormat("#0.000"); /*DisplayMetrics dm = new DisplayMetrics(); //getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; int height = dm.heightPixels;*/ public double precition=0.002; //(%) public float x_gravSense=0; public float y_gravSense=0; public float z_gravSense=0; public float sum_gravSense=0; public float x_accSense=0; public float y_accSense=0; public float z_accSense=0; public float sum_accSense=0; public float x_magSense=0; public float y_magSense=0; public float z_magSense=0; public float sum_magSense=0; public float x_gravSense_min=10; public float y_gravSense_min=10; public float z_gravSense_min=10; public float x_accSense_max=0; public float y_accSense_max=0; public float z_accSense_max=0; private float xCenter = 0; // This displays center private float yCenter = 0; private float xAxisTag_x=0; private float xAxisTag_y=0; private float yAxisTag_x=0; private float yAxisTag_y=0; private float xAxisTagNeg_x=0; private float xAxisTagNeg_y=0; private float yAxisTagNeg_x=0; private float yAxisTagNeg_y=0; private float x_horizon=0; private float y_horizon=0; private float x_horizon2=0; private float y_horizon2=0; private float x_gravEnd=0; private float y_gravEnd=0; private float x_gravAngEnd=0; private float y_gravAngEnd=0; private float x_accEnd=0; private float y_accEnd=0; private float x_magEnd=0; private float y_magEnd=0; private float ballRadius = 320; // Circles and Axis props private float ballWidth = 10; private float lineWidth=5; private float lineTextSize=50; private float maxdiameter=0; private float accOffset=0; private float levelballRadius=50; private float magballRadius=50; private float vectWidth =14; private float vectTextSize=40; private float vectTextDist=5; private float margin=20; private double alpha =0; // angle G from X private int orientation; int mActionBarSize=0; int statusbarSize=0; SharedPreferences mySettings; private String levelActDebug=""; //private float ballX = ballRadius + 20; // Ball's center (x,y) //private float ballY = ballRadius + 40; private RectF ballBounds; // Needed for Canvas.drawOval private RectF helpBallBounds; private RectF helpBallBounds2; private RectF helpBallBounds3; private RectF levelballBounds; private RectF magballBounds; private Paint paintCircle; private Paint paintHelpCircle;// The paint (e.g. style, color) used for drawing private Paint paintHelpCircle2; private Paint paintVector; private Paint paintVectorHelp; private Paint paintVector2; private Paint paintVector2Help; private Paint paintVector3Help; private Paint paintVector3; private Paint paintAxisLines; private Paint paintAxisHelpLines; private Paint paintTexts; DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); final int displaywidth = metrics.widthPixels; final int displayheight = metrics.heightPixels; //private Canvas myCanvas; // Constructor public LevelView(Context context) { //registerForContextMenu(); super(context); mySettings = PreferenceManager.getDefaultSharedPreferences(context); init(); } private void init() { ballBounds = new RectF(); helpBallBounds = new RectF(); helpBallBounds2 = new RectF(); helpBallBounds3 = new RectF(); levelballBounds = new RectF(); magballBounds = new RectF(); paintCircle = new Paint(); paintHelpCircle = new Paint(); paintHelpCircle2 = new Paint(); paintVector = new Paint(); paintVectorHelp = new Paint(); paintVector2 = new Paint(); paintVector2Help = new Paint(); paintVector3Help = new Paint(); paintVector3 = new Paint(); paintAxisLines = new Paint(); paintAxisHelpLines = new Paint(); paintTexts = new Paint(); // ADJUST TO SCREEN ballRadius = displaywidth/4; ballWidth =(int)displayheight/108; lineWidth=displaywidth/200; vectTextSize=(int)displayheight/27; vectTextDist=(int)vectTextSize/4; levelballRadius=(int)displayheight/20; magballRadius=(int)displayheight/20; // Circles and Axis props final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes( new int[] { android.R.attr.actionBarSize }); mActionBarSize = (int) styledAttributes.getDimension(0, 0); styledAttributes.recycle(); statusbarSize =getStatusBarHeight(); xCenter=displaywidth/2; yCenter=displayheight/2 -mActionBarSize-statusbarSize; double t=displaywidth*displaywidth+displayheight*displayheight; maxdiameter=(float) Math.sqrt(t); x_gravEnd=xCenter; y_gravEnd=yCenter+ballRadius; x_accEnd=xCenter; y_accEnd=yCenter; x_magEnd=xCenter; y_magEnd=yCenter; ballBounds.set(xCenter-ballRadius, yCenter-ballRadius, xCenter+ballRadius, yCenter+ballRadius); helpBallBounds.set(xCenter-ballRadius/2, yCenter-ballRadius/2, xCenter+ballRadius/2, yCenter+ballRadius/2); helpBallBounds2.set(xCenter-(3*ballRadius/4), yCenter-(3*ballRadius/4), xCenter+(3*ballRadius/4), yCenter+(3*ballRadius/4)); helpBallBounds3.set(xCenter-(ballRadius/4), yCenter-(ballRadius/4), xCenter+(ballRadius/4), yCenter+(ballRadius/4)); /** * Initial Colorsettings * Später * Auslagerung in settings; */ paintCircle.setColor(Color.BLACK); paintCircle.setStyle(Paint.Style.STROKE); paintCircle.setStrokeWidth(ballWidth); paintCircle.setAntiAlias(true); paintHelpCircle.setColor(Color.DKGRAY); paintHelpCircle.setStyle(Paint.Style.STROKE); paintHelpCircle.setStrokeWidth(ballWidth/2); paintHelpCircle.setAntiAlias(true); paintHelpCircle2.setColor(Color.GRAY); paintHelpCircle2.setStyle(Paint.Style.STROKE); paintHelpCircle2.setStrokeWidth(ballWidth/3); paintHelpCircle2.setAntiAlias(true); paintVector.setColor(Color.RED); paintVector.setAntiAlias(true); paintVector.setStrokeWidth(vectWidth); paintVector.setTextSize(vectTextSize); paintVectorHelp.setStrokeWidth(vectWidth/2); paintVectorHelp.setColor(Color.RED); paintVectorHelp.setAntiAlias(true); //paintVector2.setStyle(Paint.Style.FILL_AND_STROKE); paintVector2.setColor(Color.RED); paintVector2.setAntiAlias(true); paintVector2.setStrokeWidth(vectWidth); paintVector2.setTextSize(vectTextSize); paintVector2Help.setStrokeWidth(vectWidth/3); paintVector2Help.setColor(Color.RED); paintVector2Help.setAntiAlias(true); //MagneticField paintVector3.setColor(Color.GRAY); paintVector3.setAntiAlias(true); paintVector3.setStrokeWidth(vectWidth); paintVector3.setTextSize(vectTextSize); paintVector3Help.setTextSize(vectTextSize); paintVector3Help.setColor(Color.DKGRAY); paintVector3Help.setAntiAlias(true); paintAxisLines.setColor(Color.BLACK); paintAxisLines.setStrokeWidth(lineWidth); paintAxisLines.setTextSize(lineTextSize); paintAxisHelpLines.setColor(Color.DKGRAY); paintAxisHelpLines.setStrokeWidth(lineWidth/2); paintAxisHelpLines.setTextSize(lineTextSize/3); paintTexts.setColor(Color.BLACK); paintTexts.setTextSize(vectTextSize); paintAxisHelpLines.setTextSize(lineTextSize/2); } @Override protected void onDraw(Canvas canvas) { // Calculate Gravity Vector AxisTitles onlyforLandscape x_gravEnd=xCenter+y_gravSense/sum_gravSense*ballRadius; y_gravEnd=yCenter+x_gravSense/sum_gravSense*ballRadius; x_gravAngEnd=xCenter+y_gravSense/sum_gravSense*ballRadius/2; y_gravAngEnd=yCenter+x_gravSense/sum_gravSense*ballRadius/2; x_accEnd=xCenter+(y_accSense-y_gravSense)/sum_accSense*ballRadius; y_accEnd=yCenter+(x_accSense-x_gravSense)/sum_accSense*ballRadius; x_magEnd=xCenter+(y_magSense)/sum_magSense*ballRadius; y_magEnd=yCenter+x_magSense/sum_magSense*ballRadius; x_horizon=xCenter-x_gravSense*maxdiameter; y_horizon=yCenter+y_gravSense*maxdiameter; x_horizon2=xCenter+x_gravSense*maxdiameter; y_horizon2=yCenter-y_gravSense*maxdiameter; yAxisTag_x=xCenter+ballRadius-lineTextSize+5; yAxisTag_y=yCenter-5; xAxisTag_x=xCenter+2; xAxisTag_y=yCenter+ballRadius-8; yAxisTagNeg_x=xCenter-ballRadius+7; yAxisTagNeg_y=yCenter+1+lineTextSize; xAxisTagNeg_x=xCenter-lineTextSize+4; xAxisTagNeg_y=yCenter-ballRadius+lineTextSize+2; alpha = getAngle(x_gravSense/sum_gravSense,y_gravSense/sum_gravSense); //alpha = Math.atan((y_gravSense/x_gravSense)); // Orientation stuff activate and edit when needed (Fawlty) /*if(orientation==1){ //Vertical -- portrait x_gravEnd=xCenter-x_gravSense*ballRadius; y_gravEnd=yCenter+y_gravSense*ballRadius; xAxisTag_x=xCenter+ballRadius-lineTextSize; xAxisTag_y=yCenter-10; yAxisTag_x=xCenter-lineTextSize+4; yAxisTag_y=yCenter-ballRadius+lineTextSize+2; }else if(orientation==0){ //Horizontal left x_gravEnd=xCenter+y_gravSense*ballRadius; y_gravEnd=yCenter+x_gravSense*ballRadius; yAxisTag_x=xCenter-ballRadius+5; yAxisTag_y=yCenter+1+lineTextSize; xAxisTag_x=xCenter-lineTextSize+4; xAxisTag_y=yCenter-ballRadius+lineTextSize+2; }else if(orientation==8){ x_gravEnd=xCenter-y_gravSense*ballRadius; y_gravEnd=yCenter-x_gravSense*ballRadius; yAxisTag_x=xCenter+ballRadius-lineTextSize; yAxisTag_y=yCenter+1+lineTextSize; xAxisTag_x=xCenter-lineTextSize+4; xAxisTag_y=yCenter+ballRadius-4; }*/ //Circle and HelpCircle canvas.drawOval(ballBounds, paintCircle); canvas.drawOval(helpBallBounds, paintHelpCircle); canvas.drawOval(helpBallBounds2, paintHelpCircle2); canvas.drawOval(helpBallBounds3, paintHelpCircle2); //Draw Axis and TitlesxC canvas.drawLine(xCenter-maxdiameter,yCenter-maxdiameter,xCenter+maxdiameter,yCenter+maxdiameter,paintAxisHelpLines); canvas.drawLine(xCenter+maxdiameter,yCenter-maxdiameter,xCenter-maxdiameter,yCenter+maxdiameter,paintAxisHelpLines); canvas.drawLine(0,yCenter,displaywidth,yCenter,paintAxisLines); canvas.drawLine(xCenter,0,xCenter,displayheight,paintAxisLines); canvas.drawText("X",xAxisTag_x,xAxisTag_y,paintAxisLines); canvas.drawText("Y",yAxisTag_x,yAxisTag_y,paintAxisLines); canvas.drawText("-X",xAxisTagNeg_x,xAxisTagNeg_y,paintAxisLines); canvas.drawText("-Y",yAxisTagNeg_x,yAxisTagNeg_y,paintAxisLines); // Important Angles canvas.drawText(makeDegAngle(getAlpha(y_gravSense,z_gravSense)),xCenter-150, displayheight -mActionBarSize-statusbarSize- margin, paintTexts); canvas.drawText(makeDegAngle(getAlpha(x_gravSense,z_gravSense)),displaywidth-150,yAxisTag_y,paintTexts); //Draw Vector/Ball and Text if(mySettings.getBoolean("applicationShowMag",true)) { canvas.drawLine(xCenter, yCenter, x_magEnd, y_magEnd, paintVector3); if(inMagneticZ()){ magballRadius=(int) (displayheight/20*(Math.sqrt(z_magSense/sum_magSense*z_magSense/sum_magSense))); magballBounds.set(x_magEnd - magballRadius, y_magEnd - magballRadius, x_magEnd + magballRadius, y_magEnd + magballRadius); canvas.drawOval(magballBounds, paintVector3); } } setVectorColor(); if(inHorizontalMode()){ if(mySettings.getBoolean("applicationShowGrav",true)) { canvas.drawLine(xCenter, yCenter, x_gravEnd, y_gravEnd, paintVector); levelballRadius = (int) (displayheight / 20 * (1 - Math.sqrt(x_gravSense/sum_gravSense * x_gravSense/sum_gravSense + y_gravSense/sum_gravSense * y_gravSense/sum_gravSense))); levelballBounds.set(x_gravEnd - levelballRadius, y_gravEnd - levelballRadius, x_gravEnd + levelballRadius, y_gravEnd + levelballRadius); canvas.drawOval(levelballBounds, paintVector); canvas.drawLine(x_gravEnd - levelballRadius, y_gravEnd, x_gravEnd + levelballRadius, y_gravEnd, paintAxisHelpLines); canvas.drawLine(x_gravEnd, y_gravEnd - levelballRadius, x_gravEnd, y_gravEnd + levelballRadius, paintAxisHelpLines); } if(mySettings.getBoolean("applicationShowAccel",true)) { //canvas.drawPath(getTrianglePath(xCenter, yCenter, x_accEnd, y_accEnd), paintVector2); canvas.drawLine(xCenter, yCenter, x_accEnd, y_accEnd, paintVector2); } }else{ //levelballRadius=0; levelballRadius=(int) (displayheight/20*(1-Math.sqrt(x_gravSense/sum_gravSense*x_gravSense/sum_gravSense+y_gravSense/sum_gravSense*y_gravSense/sum_gravSense))); levelballBounds.set(x_gravEnd-levelballRadius,y_gravEnd-levelballRadius,x_gravEnd+levelballRadius,y_gravEnd+levelballRadius); if(mySettings.getBoolean("applicationShowAccel",true)) { //canvas.drawPath(getTrianglePath(xCenter, yCenter, x_accEnd, y_accEnd), paintVector2); canvas.drawLine(xCenter, yCenter, x_accEnd, y_accEnd, paintVector2); } if(mySettings.getBoolean("applicationShowGrav",true)) { canvas.drawOval(levelballBounds, paintVector); canvas.drawLine(xCenter, yCenter, x_gravEnd, y_gravEnd, paintVector); canvas.drawLine(xCenter, yCenter, x_horizon, y_horizon, paintVectorHelp); canvas.drawLine(xCenter, yCenter, x_horizon2, y_horizon2, paintVectorHelp); canvas.drawText(makeDegAngle(getAlpha(y_gravSense,x_gravSense)),x_gravAngEnd-150,y_gravAngEnd,paintTexts); } } canvas.save(); //Texts //canvas.rotate((float) (180*getAngle(y_gravSense, x_gravSense)/Math.PI)); float sum_g=(float)Math.sqrt(x_gravSense*x_gravSense+y_gravSense*y_gravSense+z_gravSense*z_gravSense); float sum_gmin=(float)getLength(x_gravSense_min,y_gravSense_min,z_gravSense_min); float sum_amax=(float)getLength(x_accSense_max,y_accSense_max,z_accSense_max); float sum_na =(float) getLength(x_accSense-x_gravSense,y_accSense-y_gravSense,z_accSense-z_gravSense); float sum_ma =(float) getLength(x_magSense,y_magSense,z_magSense); if(mySettings.getBoolean("applicationShowGrav",true)) { if((y_gravEnd + margin + 4 * vectTextSize + vectTextDist)<(displayheight -mActionBarSize-statusbarSize-margin)) { canvas.drawText("G [m\u00B2/s]", x_gravEnd + levelballRadius + margin, y_gravEnd + margin, paintVector); canvas.drawText("\u01A9 " + niceValue(sum_g), x_gravEnd + levelballRadius + margin, y_gravEnd + margin + vectTextSize + vectTextDist, paintVector); canvas.drawText("x " + niceValue(x_gravSense), x_gravEnd + levelballRadius + margin, y_gravEnd + margin + 2 * vectTextSize + vectTextDist, paintVector); canvas.drawText("y " + niceValue(y_gravSense), x_gravEnd + levelballRadius + margin, y_gravEnd + margin + 3 * vectTextSize + vectTextDist, paintVector); canvas.drawText("z " + niceValue(z_gravSense), x_gravEnd + levelballRadius + margin, y_gravEnd + margin + 4 * vectTextSize + vectTextDist, paintVector); canvas.restore(); }else{ canvas.drawText("G [m\u00B2/s]", x_gravEnd + levelballRadius + margin, displayheight-mActionBarSize-statusbarSize - margin - 4*vectTextSize - vectTextDist, paintVector); canvas.drawText("\u01A9 " + niceValue(sum_g), x_gravEnd + levelballRadius + margin, displayheight -mActionBarSize-statusbarSize- margin - 3*vectTextSize , paintVector); canvas.drawText("x " + niceValue(x_gravSense), x_gravEnd + levelballRadius + margin, displayheight -mActionBarSize-statusbarSize- margin - 2 * vectTextSize , paintVector); canvas.drawText("y " + niceValue(y_gravSense), x_gravEnd + levelballRadius + margin, displayheight-mActionBarSize-statusbarSize -margin - 1 * vectTextSize , paintVector); canvas.drawText("z " + niceValue(z_gravSense), x_gravEnd + levelballRadius + margin, displayheight -mActionBarSize-statusbarSize- margin , paintVector); canvas.restore(); } } // Acceleration Sumup if(mySettings.getBoolean("applicationShowAccel",true)) { accOffset=displaywidth / 10; canvas.drawText("A [m\u00B2/s]", displaywidth - displaywidth / 10, margin + vectTextSize, paintVector2); canvas.drawText("\u01A9 " + niceValue(sum_na), displaywidth - displaywidth / 10, margin + 2 * vectTextSize + vectTextDist, paintVector2); canvas.drawLine(displaywidth - displaywidth / 10, margin + 2 * vectTextSize + 2 * vectTextDist, displaywidth - 2 * margin, margin + 2 * vectTextSize + 2 * vectTextDist, paintVector2Help); canvas.drawText("x " + niceValue(x_accSense - x_gravSense), displaywidth - displaywidth / 10, margin + 3 * vectTextSize + 2 * vectTextDist, paintVector2); canvas.drawText("y " + niceValue(y_accSense - y_gravSense), displaywidth - displaywidth / 10, margin + 4 * vectTextSize + 2 * vectTextDist, paintVector2); canvas.drawText("z " + niceValue(z_accSense - z_gravSense), displaywidth - displaywidth / 10, margin + 5 * vectTextSize + 2 * vectTextDist, paintVector2); }else accOffset= 0; if(mySettings.getBoolean("applicationShowMag",true)) { canvas.drawText("M [\u03bcT]", displaywidth -accOffset- displaywidth / 10, margin + vectTextSize, paintVector3); canvas.drawText("\u01A9 " + niceValue(sum_ma), displaywidth -accOffset- displaywidth / 10, margin + 2 * vectTextSize + vectTextDist, paintVector3); canvas.drawLine(displaywidth -accOffset- displaywidth / 10, margin + 2 * vectTextSize + 2 * vectTextDist, displaywidth - 2 * margin-accOffset, margin + 2 * vectTextSize + 2 * vectTextDist, paintVector3Help); canvas.drawText("x " + niceValue(x_magSense), displaywidth -accOffset- displaywidth / 10, margin + 3 * vectTextSize + 2 * vectTextDist, paintVector3); canvas.drawText("y " + niceValue(y_magSense), displaywidth -accOffset- displaywidth / 10, margin + 4 * vectTextSize + 2 * vectTextDist, paintVector3); canvas.drawText("z " + niceValue(z_magSense), displaywidth -accOffset- displaywidth / 10, margin + 5 * vectTextSize + 2 * vectTextDist, paintVector3); } canvas.drawText("G min [m\u00B2/s]", displaywidth-displaywidth/8, displayheight-margin-4*vectTextSize-2*vectTextDist-mActionBarSize-statusbarSize, paintVector3Help); canvas.drawText("\u01A9 "+niceValue(sum_gmin), displaywidth-displaywidth/9, displayheight-margin-3*vectTextSize-2*vectTextDist-mActionBarSize-statusbarSize, paintVector3Help); canvas.drawText("A max [m\u00B2/s]", displaywidth-displaywidth/8, displayheight-margin-2*vectTextSize-vectTextDist-mActionBarSize-statusbarSize, paintVector3Help); canvas.drawText("\u01A9 "+niceValue(sum_amax), displaywidth-displaywidth/9, displayheight-margin-1*vectTextSize-mActionBarSize-statusbarSize, paintVector3Help); //Draw Debug double pitch = (double) mySettings.getInt("applicationPitch", 10) / 10; double rate = (double) mySettings.getInt("applicationRate", 10) / 10; String current = getResources().getConfiguration().locale.getLanguage(); String screeninfo = "Width: "+ displaywidth+ "Height: "+ displayheight + " Orientation :" + String.valueOf(orientation); canvas.drawText(screeninfo, margin, margin+vectTextSize, paintTexts); canvas.drawText(String.valueOf(inHorizontalMode()), margin, margin+2*vectTextSize+vectTextDist, paintTexts); canvas.drawText(makeDegAngle(getAlpha(y_gravSense,z_gravSense)), margin, margin+3*vectTextSize+vectTextDist, paintTexts); canvas.drawText(makeDegAngle(getAlpha(x_gravSense,z_gravSense)), margin, margin+4*vectTextSize+vectTextDist, paintTexts); canvas.drawText(makeDegAngle(getAlpha(z_gravSense,y_gravSense)), margin, margin+5*vectTextSize+vectTextDist, paintTexts); canvas.drawText(current+"; P:"+pitch+", R:"+rate, margin, margin+6*vectTextSize+vectTextDist, paintTexts); canvas.drawText(levelActDebug, margin, margin+7*vectTextSize+vectTextDist, paintTexts); } public String niceValue(float x){ //double g= 9.80665; return f.format(x); } public String makeDegAngle(double grad){ //double alphadeg = 180*grad/Math.PI; double d=0; if(grad>89.99)d=90; else if(grad<0.001 && grad>-0.001)d=0.0; else if(grad<-89.99 )d=-90; else d=grad; return f.format(d)+"\u00B0"; } public double getAngle(float x, float y){ double div = (double)x/y; float theta = (float) Math.toDegrees(Math.atan(div)); //System.out.println(theta); // 53.130104 return theta; } public double getAlpha(float x,float y){ double div = (double)x/y; float theta = (float) Math.toDegrees(Math.atan(div)); return theta; } public double getLength(float x, float y, float z){ double res = Math.sqrt(x*x+y*y+z*z); return res; } public int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; } public void updateData(float x,float y,float z,int orientation,String debug) { //float x_resultForce=x+x_accSense float sq= (float)x*x+y*y+z*z; float sum=(float)Math.sqrt(sq); this.x_gravSense = x; this.y_gravSense = y; this.z_gravSense = z; this.sum_gravSense=sum; this.orientation = orientation; this.levelActDebug=debug; invalidate(); } public void updateAccelData(float x,float y,float z,int orientation) { if (getLength(x_accSense_max,y_accSense_max,z_accSense_max)getLength(x,y,z)){ this.x_gravSense_min=x; this.y_gravSense_min=y; this.z_gravSense_min=z; } float sq= (float)x*x+y*y+z*z; float sum=(float)Math.sqrt(sq); if(sum sqs*(1-prec) || y_gravSense > sqs*(1-prec) || z_gravSense > sqs*(1-prec) ){ paintVector.setColor(Color.GREEN); paintVectorHelp.setColor(Color.GREEN); }else if (sqsa > sqs*(1-prec) || sqsb > sqs*(1-prec) || sqsc > sqs*(1-prec) ){ paintVector.setColor(Color.BLUE); paintVectorHelp.setColor(Color.BLUE); } else{ paintVector.setColor(Color.RED); paintVectorHelp.setColor(Color.RED); } //Color Accel Vector double acc= getLength(x_accSense-x_gravSense,y_accSense-y_gravSense,z_accSense-z_gravSense); if (acc<0.05){ paintVector2.setColor(Color.GREEN); paintVector2Help.setColor(Color.GREEN); }else if (acc<=0.694){ paintVector2.setColor(Color.BLUE); paintVector2Help.setColor(Color.BLUE); }else{ paintVector2.setColor(Color.RED); paintVector2Help.setColor(Color.RED); } double acc_max= getLength(x_accSense_max,y_accSense_max,z_accSense_max); if (acc_max<0.01){ paintVector3Help.setColor(Color.GREEN); }else if (acc_max<=0.694){ paintVector3Help.setColor(Color.BLUE); }else{ paintVector3Help.setColor(Color.RED); } } }