Java工具集-數學(二次函數)
- 2019 年 10 月 26 日
- 筆記
簡單工具類
寫作初衷:由於日常開發經常需要用到很多工具類,經常根據需求自己寫也比較麻煩 網上好了一些工具類例如commom.lang3或者hutool或者Jodd這樣的開源工具,但是 發現他們之中雖然設計不錯,但是如果我想要使用,就必須要引入依賴並且去維護依賴,有些 甚至會有存在版本編譯不通過問題,故此想要寫作一個每個類都可以作為獨立工具類使用 每個使用者只需要複製該類,到任何項目當中都可以使用,所以需要尊從以下兩個原則才能 做到.在此誠邀各位大佬參與.可以把各自用過的工具,整合成只依賴JDK,每個類都能夠單獨 使用的工具.每個人當遇到業務需求需要使用的時候,只需要到這裡單獨拷貝一個即可使用. 拋棄傳統的需要引入依賴的煩惱.讓大家一起來解決你所面臨的業務問題吧!
介紹
遵從兩大原則
- 1.絕不依賴JDK以外的源碼
- 2.犧牲代碼復用性,每個類都必須是單獨的組件,絕不互相引用,做到完全解耦
package *; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Collections; import java.util.List; /** * @program: simple_tools * @description: 數學(二次函數) * @author: ChenWenLong * @create: 2019-10-24 15:20 **/ public class QuadraticFunction { // y=ax^2 + bx + c // 自變量: independent 因變量: dependent private BigDecimal a = BigDecimal.ONE; private BigDecimal b = BigDecimal.ZERO; private BigDecimal c = BigDecimal.ZERO; private static QuadraticFunction instance; //拋物線上的點 private List<Point> points = Collections.EMPTY_LIST; private QuadraticFunction(){} static { if(instance == null){ synchronized (QuadraticFunction.class){ if(instance == null){ instance = new QuadraticFunction(); } } } } /** * 功能描述: * 〈初始化二次函數〉 * * @params : [a, b, c] * @return : void * @author : cwl * @date : 2019/10/24 15:32 */ public static void init(double a, double b,double c){ if(a == 0){ throw new RuntimeException("param a is not be zero"); } instance.setA(new BigDecimal(a)); instance.setB(new BigDecimal(b)); instance.setC(new BigDecimal(c)); } /** * 功能描述: * 〈初始化二次函數〉 * * @params : [a, b] * @return : void * @author : cwl * @date : 2019/10/24 15:33 */ public static void init(double a, double b){ if(a == 0){ throw new RuntimeException("param a is not be zero"); } instance.setA(new BigDecimal(a)); instance.setB(new BigDecimal(b)); } /** * 功能描述: * 〈初始化二次函數〉 * * @params : [a] * @return : void * @author : cwl * @date : 2019/10/24 15:34 */ public static void init(double a){ if(a == 0){ throw new RuntimeException("param a is not be zero"); } instance.setA(new BigDecimal(a)); } /** * 功能描述: * 〈判斷點是否在拋物線上〉 * * @params : [x, y] * @return : boolean * @author : cwl * @date : 2019/10/24 15:50 */ public static boolean isOnline(double x,double y){ BigDecimal dependent = new BigDecimal(y); BigDecimal square = new BigDecimal(Math.pow(2, x)); BigDecimal independent = new BigDecimal(x); return dependent.equals(square.multiply(instance.getA()).add(independent.multiply(instance.getB())).add(instance.getC())); } //-b/2a,(4ac-b^2)/4a //AxisOfSymmetry /** * 功能描述: * 〈獲得對稱軸 -b/2a〉 * * @params : [] * @return : java.math.BigDecimal * @author : cwl * @date : 2019/10/24 16:22 */ public static BigDecimal getAxisOfSymmetry(){ return instance.getB().divide(instance.getA().multiply(new BigDecimal(2)),2, RoundingMode.HALF_UP).negate(); } /** * 功能描述: * 〈獲得拋物線的頂點 (4ac-b^2)/4a〉 * * @params : [] * @return : java.math.BigDecimal * @author : cwl * @date : 2019/10/24 16:28 */ public static BigDecimal getMaxValue(){ BigDecimal a = instance.getA(); BigDecimal b = instance.getB(); BigDecimal c = instance.getC(); BigDecimal subtract = new BigDecimal(4).multiply(a).multiply(c).subtract(new BigDecimal(Math.pow(2, b.doubleValue()))); return subtract.divide(new BigDecimal(4).multiply(a),2,RoundingMode.HALF_UP); } /** * 功能描述: * 〈獲得拋物線頂點〉 * * @params : [] * @return : java.util.Map * @author : cwl * @date : 2019/10/24 16:45 */ public static List<Point> getTopPoint(){ Point point = new Point(); BigDecimal axisOfSymmetry = getAxisOfSymmetry(); BigDecimal maxValue = getMaxValue(); point.setX(axisOfSymmetry); point.setY(maxValue); List<Point> points = instance.getPoints(); points.add(point); return points; } //PointOfIntersection //-b +- 根號b^2 -4ac / 2a /** * 功能描述: * 〈獲得與X軸的交點〉 * * @params : [] * @return : java.util.List<com.simple.util.math.QuadraticFunction.Point> * @author : cwl * @date : 2019/10/24 16:55 */ public static List<Point> getPointOfIntersectionX(){ BigDecimal bSquare = new BigDecimal(Math.pow(2, instance.getB().doubleValue())). setScale(2, RoundingMode.HALF_UP). subtract(new BigDecimal(4).multiply(instance.getA()).multiply(instance.getC())); BigDecimal result = new BigDecimal(Math.sqrt(bSquare.doubleValue())); BigDecimal x1 = instance.getB().negate().add(result).divide(new BigDecimal(2).multiply(instance.getA()), 2, RoundingMode.HALF_UP); BigDecimal x2 = instance.getB().negate().subtract(result).divide(new BigDecimal(2).multiply(instance.getA()), 2, RoundingMode.HALF_UP); Point point1 = new Point(); point1.setX(x1); point1.setY(BigDecimal.ZERO); Point point2 = new Point(); point2.setY(x2); point2.setY(BigDecimal.ZERO); instance.setPoints(Collections.EMPTY_LIST); List<Point> points = instance.getPoints(); points.add(point1); points.add(point2); return points; } //拋物線上的點 private static class Point{ // x坐標 private BigDecimal x; // y坐標 private BigDecimal y; public BigDecimal getX() { return x; } public void setX(BigDecimal x) { this.x = x; } public BigDecimal getY() { return y; } public void setY(BigDecimal y) { this.y = y; } } public List<Point> getPoints() { return points; } public void setPoints(List<Point> points) { this.points = points; } private BigDecimal getA() { return a; } private void setA(BigDecimal a) { this.a = a; } private BigDecimal getB() { return b; } private void setB(BigDecimal b) { this.b = b; } private BigDecimal getC() { return c; } private void setC(BigDecimal c) { this.c = c; } }