zoukankan      html  css  js  c++  java
  • 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函数的使用。

  • 相关阅读:
    SDUT 猴子分桃
    SDUT 母牛的故事
    SDUT 小鑫の日常系列故事(六)——奇遇记 递推算法
    SDUT 爬楼梯
    SDUT 王小二切饼
    linux 排序命令sort
    shell 判断语句
    shell统计指定范围内的所有质数以及它们的和
    shell 1到指定数累加
    shell九九乘法表
  • 原文地址:https://www.cnblogs.com/hyyq/p/8875329.html
Copyright © 2011-2022 走看看