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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM