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函数的使用。

posted @ 2018-04-18 15:43  敲代码的小松鼠  阅读(4132)  评论(0编辑  收藏  举报

你若不想做,总会找到“接口”;你若想做,总会找到“方法”。