坐标原点知道
两个点知道
相对于坐标原点的旋转的角度可以通过三角函数算出来
因为知道了三个边的长度,
Math.acos((bb*bb+cc*cc-aa*aa)/(2*bb*cc))
主要就是这个方法
至于旋转x1*y2-x2*y1大于0就是顺时针,小于0就是逆时针,考虑原点的位置
1 public class DirectionClass { 2 3 public double x0=LambdaTest01.InterSectionLat; 4 public double y0=LambdaTest01.InterSectionLng; 5 6 //给定两个点的方向,判断怎么转向的 7 //首先确定大方向就是用路口的定点作为基准点,两个点作为偏置点,制作到一个三角形然后用三个边判断两个点的角度。关键是如何判断顺时针还是逆时针。 8 public static double directionTurned(double x1,double y1,double x2,double y2) { 9 double result=0; 10 double bb=lengthConvert.getDistance(x1, y1, LambdaTest01.InterSectionLat, LambdaTest01.InterSectionLng); 11 double cc=lengthConvert.getDistance(x2, y2, LambdaTest01.InterSectionLat, LambdaTest01.InterSectionLng); 12 double aa=lengthConvert.getDistance(x1, y1, x2, y2); 13 result=Math.acos((bb*bb+cc*cc-aa*aa)/(2*bb*cc)); 14 double fix=180/Math.PI; 15 return result*fix; 16 } 17 public static double directionTurned_bd(double x1,double y1,double x2,double y2) { 18 double result=0; 19 double bb=lengthConvert.getDistance(x1, y1, LambdaTest01.testInterSectionLat, LambdaTest01.testInterSectionLng); 20 double cc=lengthConvert.getDistance(x2, y2, LambdaTest01.testInterSectionLat, LambdaTest01.testInterSectionLng); 21 double aa=lengthConvert.getDistance(x1, y1, x2, y2); 22 result=Math.acos((bb*bb+cc*cc-aa*aa)/(2*bb*cc)); 23 double fix=180/Math.PI; 24 return result*fix; 25 } 26 public static double directionTurned2(double x1,double y1,double x2,double y2) { 27 double result=0; 28 double bb=lengthConvert.getDistance2(x1, y1, 0, 0); 29 double cc=lengthConvert.getDistance2(x2, y2, 0, 0); 30 double aa=lengthConvert.getDistance2(x1, y1, x2, y2); 31 System.out.println(bb); 32 System.out.println(cc); 33 System.out.println(aa); 34 double fix=180/Math.PI; 35 result=Math.acos((bb*bb+cc*cc-aa*aa)/(2*bb*cc)); 36 return result*fix; 37 } 38 public static boolean wise_anti(double x1,double y1,double x2,double y2) { 39 double result=(x1-LambdaTest01.InterSectionLat)*(y2-LambdaTest01.InterSectionLng)-(x2-LambdaTest01.InterSectionLat)*(y1-LambdaTest01.InterSectionLng); 40 if (result>=0) { 41 System.out.println("顺时针"); 42 return true; 43 }else { 44 System.out.println("逆时针"); 45 return false; 46 } 47 } 48 public static boolean wise_anti_bd(double x1,double y1,double x2,double y2) { 49 double result=(x1-LambdaTest01.testInterSectionLat)*(y2-LambdaTest01.testInterSectionLng)-(x2-LambdaTest01.testInterSectionLat)*(y1-LambdaTest01.testInterSectionLng); 50 if (result>=0) { 51 System.out.println("顺时针"); 52 return true; 53 }else { 54 System.out.println("逆时针"); 55 return false; 56 } 57 } 58 59 60 public static void main(String[] args) { 61 // TODO Auto-generated method stub 62 63 double result=directionTurned2(1, 0, 0, 1); 64 System.out.println(result); 65 } 66 67 }