- 問題重現
現在一平面上有三點,分別是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函數的使用。