JAVA实现计算三角形等平面图形的夹角问题
- 问题重现
现在一平面上有三点,分别是x(x1,x2),y(y1,y2),z(z1,z2),图形大致如下
现要求用java代码求出∠YxZ的度数。
- 问题分析及数学模型
1、要求两直线的夹角,就想到数学中的向量问题;
2、根据数学公式cosφ=A1A2+B1B2/[√(A1^2+B1^2)√(A2^2+B2^2)] ,(注:这里A1、A2...是向量)
3、这里要求夹角而不是余弦值,即求φ的值,需要用到反三角函数;
4、反三角函数求出来φ的值的值是弧度制,显然要将弧度制转成角度制,公式为φ*180/π。
- 代码编写
1 /** 2 * 计算三个点组成的夹角 3 * @author b6762 4 * 5 */ 6 public class Main { 7 public static void main(String []args){ 8 /* 9 *^y 10 *| 11 | /| y点 12 | / | 13 | / | 14 0|--- x点----z点---------->x 15 | 16 */ 17 int x1=255; 18 int x2=145; 19 //中间点的坐标x(x1,x2) 20 int y1=211; 21 int y2=147; 22 //y点(y1,y2) 23 int z1=271; 24 int z2=182; 25 //z点(z1,z2) 26 int result = getIn_angle(x1, x2, y1, y2, z1, z2); 27 System.out.println("夹角为:"+result+"度"); 28 } 29 30 private static int getIn_angle(int x1, int x2, int y1, int y2, int z1, int z2) { 31 //向量的点乘 32 int t =(y1-x1)*(z1-x1)+(y2-x2)*(z2-x2); 33 34 //为了精确直接使用而不使用中间变量 35 //包含了步骤:A=向量的点乘/向量的模相乘 36 // B=arccos(A),用反余弦求出弧度 37 // result=180*B/π 弧度转角度制 38 int result =(int)(180*Math.acos( 39 t/Math.sqrt 40 ((Math.abs((y1-x1)*(y1-x1))+Math.abs((y2-x2)*(y2-x2))) 41 *(Math.abs((z1-x1)*(z1-x1))+Math.abs((z2-x2)*(z2-x2))) 42 )) 43 /Math.PI); 44 // pi = 180 45 // x = ? 46 //====> ?=180*x/pi 47 48 return result; 49 } 50 }
- 运行测试
- 小结
主要是对java中Math函数的使用。