Java 开发之 根据坐标计算长度、角度、位置等数据
生活随笔
收集整理的這篇文章主要介紹了
Java 开发之 根据坐标计算长度、角度、位置等数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java 開發之 根據坐標計算長度、角度、位置等數據
- 坐標計算 其實也相當于再做三角運算, 每一個坐標在坐標圖中都可視作三角形的一個頂角
- 有了這張圖, 大家就能清晰的想象出一個三角形,然后根據三角函數進行相關的計算
- 如果有不了解三角函數算法的可以看看本人匯總的幾個三角算法文章《Java開發 三角形算法匯總》,本文的算法中也使用了該文章的算法
兩點之間的長度
/*** 兩點之間的長度* @param point0 坐標* @param point1 坐標* @return*/public static double getLengthOfSide(Point point0, Point point1){return Math.sqrt(Math.pow((point0.x-point1.x),2)+Math.pow((point0.y-point1.y),2));}根據坐標 獲取角度
/*** 根據坐標 獲取角度* @param point0 坐標* @param degreePoint 坐標 獲取該點的角度* @param point2 坐標* @return*/public static int getDegree(Point point0, Point degreePoint, Point point2) {//向量的點乘int vector = (point0.x - degreePoint.x) * (point2.x - degreePoint.x) + (point0.y - degreePoint.y) * (point2.y - degreePoint.y);//向量的模乘double sqrt = Math.sqrt((Math.abs((point0.x - degreePoint.x) * (point0.x - degreePoint.x)) + Math.abs((point0.y - degreePoint.y) * (point0.y - degreePoint.y)))* (Math.abs((point2.x - degreePoint.x) * (point2.x - degreePoint.x)) + Math.abs((point2.y - degreePoint.y) * (point2.y - degreePoint.y))));//反余弦計算弧度double radian = Math.acos(vector / sqrt);//弧度轉角度制return (int) (180 * radian / Math.PI);}/*** 根據坐標 獲取角度* @param pA 坐標* @param degreePoint 坐標 獲取該點的角度* @param pC 坐標* @return*/public static double getDegree2(Point pA, Point degreePoint, Point pC) {double a = getLengthOfSide(pA,degreePoint),b = getLengthOfSide(pC,degreePoint),c = getLengthOfSide(pA,pC);return getDegree(a,b,c);}/*** 已知邊長 求AC 角度* @param a* @param b* @param c* @return*/public static double getDegree(double a,double b,double c){// 計算弧度表示的角double degrees = Math.acos((a*a + b*b -c*c)/(2.0*a*b));// 用角度表示的角return Math.toDegrees(degrees);}根據角度和邊長獲取位置
/*** 根據角度和邊長獲取位置* @param p 起點位置* @param degree 角度* @param width 邊長* @return 位置*/public static double[] getPoint(Point p,double degree,double width){int v = (int) (degree / 90);double d = (degree % 90);double side = getRightSideFromDegree(d, width);//與中心的直角邊長double top = getRightSideFromLength(side, width);//另一直角邊double x = 0 , y = 0 ;switch (v){case 0:x = (p.x+top);y = (p.y-side);break;case 1:x = (p.x+side);y = (p.y+top);break;case 2:x = (p.x-top);y = (p.y+side);break;case 3:x = (p.x-side);y = (p.y-top);break;}return new double[]{x,y};}最后推薦一個我自己寫的MVVM開源項目《Open MVVM》
有問題請私信,留言,或者發送郵件到我扣扣郵箱 qingingrunt2010
總結
以上是生活随笔為你收集整理的Java 开发之 根据坐标计算长度、角度、位置等数据的全部內容,希望文章能夠幫你解決所遇到的問題。