some weird moving
This commit is contained in:
		
							
								
								
									
										37
									
								
								src/main/java/org/solovyev/util/math/MathEntity.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/main/java/org/solovyev/util/math/MathEntity.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| package org.solovyev.util.math; | ||||
|  | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| public enum MathEntity { | ||||
|  | ||||
| 	minus("-"), | ||||
| 	equals("="), | ||||
| 	factorial("!"), | ||||
| 	plus("+"), | ||||
| 	multiply("*"), | ||||
| 	divide("/"), | ||||
| 	power("^"), | ||||
| 	sin("sin"), | ||||
| 	asin("asin"), | ||||
| 	cos("cos"), | ||||
| 	acos("acos"), | ||||
| 	tg("tg"), | ||||
| 	atg("atg"), | ||||
| 	exp("exp"), | ||||
| 	log("log"), | ||||
| 	ln("ln"), | ||||
| 	mod("mod"), | ||||
| 	sqrt("sqrt"); | ||||
| 		 | ||||
| 	@NotNull | ||||
| 	private final String text; | ||||
| 	 | ||||
| 	private MathEntity (@NotNull String text) { | ||||
| 		this.text = text; | ||||
| 	} | ||||
|  | ||||
| 	@NotNull | ||||
| 	public String getText() { | ||||
| 		return text; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										79
									
								
								src/main/java/org/solovyev/util/math/MathEntityType.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								src/main/java/org/solovyev/util/math/MathEntityType.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| package org.solovyev.util.math; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
|  | ||||
| public enum MathEntityType { | ||||
|  | ||||
| 	digit, | ||||
| 	constant, | ||||
| 	dot, | ||||
| 	function,  | ||||
| 	unary_operation, | ||||
| 	binary_operation, | ||||
| 	group_symbols, | ||||
| 	group_symbol; | ||||
| 	 | ||||
| 	public static final List<Character> constants = Arrays.asList('e', 'π'); | ||||
|  | ||||
| 	public static final List<Character> dots = Arrays.asList('.', ','); | ||||
|  | ||||
| 	public static final List<Character> unaryOperations = Arrays.asList('-', '=', '!'); | ||||
|  | ||||
| 	public static final List<Character> binaryOperations = Arrays.asList('-', '+', '*', '×', '∙', '/', '^' ); | ||||
|  | ||||
| 	public static final List<String> functions = Arrays.asList("sin", "asin", "cos", "acos", "tg", "atg", "log", "ln", "mod", "√"); | ||||
| 	 | ||||
| 	public static final List<String> groupSymbols = Arrays.asList("[]", "()", "{}"); | ||||
|  | ||||
| 	public static final List<Character> openGroupSymbols = Arrays.asList('[', '(', '{'); | ||||
|  | ||||
| 	public static final List<Character> closeGroupSymbols = Arrays.asList(']', ')', '}'); | ||||
|  | ||||
| 	public static final List<Character> singleGroupSymbols; | ||||
| 	static { | ||||
| 		final List<Character> list = new ArrayList<Character>(); | ||||
| 		list.addAll(openGroupSymbols); | ||||
| 		list.addAll(closeGroupSymbols); | ||||
| 		singleGroupSymbols = Collections.unmodifiableList(list); | ||||
| 	} | ||||
|  | ||||
| 	@Nullable | ||||
| 	public static MathEntityType getType( @NotNull String s ) { | ||||
| 		MathEntityType result = null; | ||||
| 		 | ||||
| 		if ( s.length() == 1 ) { | ||||
| 			char ch = s.charAt(0); | ||||
| 			 | ||||
| 			if ( Character.isDigit(ch) ) { | ||||
| 				result = MathEntityType.digit; | ||||
| 			} else if ( unaryOperations.contains(ch) ) { | ||||
| 				result = MathEntityType.unary_operation;  | ||||
| 			} else if ( binaryOperations.contains(ch) ) { | ||||
| 				result = MathEntityType.binary_operation;  | ||||
| 			} else if ( singleGroupSymbols.contains(ch) ) { | ||||
| 				result = MathEntityType.group_symbol; | ||||
| 			} else if ( constants.contains(ch) ) { | ||||
| 				result = MathEntityType.constant; | ||||
| 			} else if ( dots.contains(ch) ) { | ||||
| 				result = MathEntityType.dot; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		if ( result == null ) { | ||||
| 			if ( functions.contains(s) ) { | ||||
| 				result = MathEntityType.function; | ||||
| 			} else if ( groupSymbols.contains(s) ) { | ||||
| 				result = MathEntityType.group_symbols; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		 | ||||
| 		return result; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										102
									
								
								src/main/java/org/solovyev/util/math/MathUtils.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								src/main/java/org/solovyev/util/math/MathUtils.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| package org.solovyev.util.math; | ||||
|  | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| public class MathUtils { | ||||
|  | ||||
| 	public static final float MIN_AMOUNT = 0.05f; | ||||
|  | ||||
| 	public static double round(@NotNull Double value, int numberOfFractionDigits) { | ||||
| 		double roundFactor = Math.pow(10, numberOfFractionDigits); | ||||
|  | ||||
| 		if (value < Double.MAX_VALUE / roundFactor) { | ||||
| 			return ((double)Math.round(value * roundFactor)) / roundFactor; | ||||
| 		} else { | ||||
| 			return value; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	public static float getDistance(@NotNull Point2d startPoint, | ||||
| 									@NotNull Point2d endPoint) { | ||||
| 		return getNorm(subtract(endPoint, startPoint)); | ||||
| 	} | ||||
|  | ||||
| 	public static Point2d subtract(@NotNull Point2d p1, @NotNull Point2d p2) { | ||||
| 		return new Point2d(p1.getX() - p2.getX(), p1.getY() - p2.getY()); | ||||
| 	} | ||||
|  | ||||
| 	public static Point2d sum(@NotNull Point2d p1, @NotNull Point2d p2) { | ||||
| 		return new Point2d(p1.getX() + p2.getX(), p1.getY() + p2.getY()); | ||||
| 	} | ||||
|  | ||||
| 	public static float getNorm(@NotNull Point2d point) { | ||||
| 		return (float) Math.pow( | ||||
| 				Math.pow(point.getX(), 2) + Math.pow(point.getY(), 2), 0.5); | ||||
| 	} | ||||
|  | ||||
| 	public static float getAngle(@NotNull Point2d startPoint, | ||||
| 								 @NotNull Point2d axisEndPoint, @NotNull Point2d endPoint) { | ||||
| 		final Point2d axisVector = subtract(axisEndPoint, startPoint); | ||||
| 		final Point2d vector = subtract(endPoint, startPoint); | ||||
|  | ||||
| 		double a_2 = Math.pow(getDistance(vector, axisVector), 2); | ||||
| 		double b = getNorm(vector); | ||||
| 		double b_2 = Math.pow(b, 2); | ||||
| 		double c = getNorm(axisVector); | ||||
| 		double c_2 = Math.pow(c, 2); | ||||
|  | ||||
| 		return (float) Math.acos((-a_2 + b_2 + c_2) / (2 * b * c)); | ||||
| 	} | ||||
|  | ||||
| 	public static double countMean(@NotNull List<Double> objects) { | ||||
|  | ||||
| 		double sum = 0d; | ||||
| 		for (Double object : objects) { | ||||
| 			sum += object; | ||||
| 		} | ||||
|  | ||||
| 		return objects.size() == 0 ? 0d : (sum / objects.size()); | ||||
| 	} | ||||
|  | ||||
| 	public static double countStandardDeviation(@NotNull Double mean, @NotNull List<Double> objects) { | ||||
| 		double sum = 0d; | ||||
|  | ||||
| 		for (Double object : objects) { | ||||
| 			sum += Math.pow(object - mean, 2); | ||||
| 		} | ||||
|  | ||||
| 		return objects.size() == 0 ? 0d : Math.sqrt(sum / objects.size()); | ||||
| 	} | ||||
|  | ||||
| 	public static StatData getStatData(@NotNull List<Double> objects) { | ||||
|  | ||||
| 		final double mean = countMean(objects); | ||||
| 		final double standardDeviation = countStandardDeviation(mean, objects); | ||||
|  | ||||
| 		return new StatData(mean, standardDeviation); | ||||
| 	} | ||||
|  | ||||
| 	public static class StatData { | ||||
|  | ||||
| 		private final double mean; | ||||
|  | ||||
| 		private final double standardDeviation; | ||||
|  | ||||
| 		public StatData(double mean, double standardDeviation) { | ||||
| 			this.mean = mean; | ||||
| 			this.standardDeviation = standardDeviation; | ||||
| 		} | ||||
|  | ||||
| 		public double getMean() { | ||||
| 			return mean; | ||||
| 		} | ||||
|  | ||||
| 		public double getStandardDeviation() { | ||||
| 			return standardDeviation; | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
							
								
								
									
										37
									
								
								src/main/java/org/solovyev/util/math/Point2d.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/main/java/org/solovyev/util/math/Point2d.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| package org.solovyev.util.math; | ||||
|  | ||||
| public class Point2d { | ||||
| 	 | ||||
| 	private float x = 0; | ||||
| 	 | ||||
| 	private float y = 0; | ||||
| 	 | ||||
| 	public Point2d() { | ||||
| 	} | ||||
| 	 | ||||
| 	public Point2d( float x, float y ) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
|  | ||||
| 	public float getX() { | ||||
| 		return x; | ||||
| 	} | ||||
|  | ||||
| 	public void setX(float x) { | ||||
| 		this.x = x; | ||||
| 	} | ||||
|  | ||||
| 	public float getY() { | ||||
| 		return y; | ||||
| 	} | ||||
|  | ||||
| 	public void setY(float y) { | ||||
| 		this.y = y; | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public String toString() { | ||||
| 		return "Point2d [x=" + x + ", y=" + y + "]"; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 serso
					serso