java中计算平面图形夹角

在代码中我们知道了ABC,DEF等六个点的坐标,现在需要求出∠A 和 ∠D 的度数。怎么计算?
(这个其实是一道数学题,只是需要我们用代码写出来,先来回顾一下之前的三角函数和反三角函数)


1、三角函数

  • 锐角三角函数

进行角度计算的时候,我们先来回顾一下三角函数,当我们需要计算某个角的三角函数时,我们可以通过构造直角三角形,即把这个角放到某个直角三角形中,然后利用这个直角三角形的三条边长进行相关的三角函数计算。

!!!注意,下面的对应关系只限于构造出来的直角三角形中,在普通的三角形中不适用


  • 任意角三角函数

在平面直角坐标系xOy中设∠β的始边为x轴的正半轴,设点P(x,y)为∠β的终边上不与原点O重合的任意一点,设r=OP,令∠β=∠α,则:

sinα = y / r;
cosα = x / r;
tanα = y / x;

其实也是通过构建直角三角形进行计算


2、反三角函数

百度百科-反三角函数

欧拉提出反三角函数的概念,并且首先使用了“arc+函数名”的形式表示反三角函数。
我们可以利用反三角函数求出对应角度的弧度。


3、向量夹角计算

  • 二维向量

求向量AB,向量AC 的夹角,向量DF,向量DE 的夹角

  • 向量求角度的计算公式
v1⋅v2=|v1||v2|cosθ

[向量v1] 点乘 [向量v2] 等于 [向量v1的长度] 乘以 [向量v2的长度] 再乘以 [向量v1和向量v2夹角的余弦]


  • 向量的点乘

向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量(没有方向的数量值)。

点乘的几何意义是可以用来表征或计算两个向量之间的夹角(公式如上),以及在b向量在a向量方向上的投影。


  • 向量的模

向量→AB的大小也就是向量→AB的长度(或称模),记作|→AB|。
(没办法把箭头放到字母上面去,就这样写吧)


  • 向量角度计算
计算过程

4、代码计算

回到上面三角形的计算,我们可以按照向量角度计算的步骤来计算∠A 。
A、B、C 三个点的坐标我们都已经知道了,下面就用point[A/B/C]_[x/y]来进行表示

  • 1、向量
    →AB:(pointB_x - pointA_x ,pointB_y - pointA_y)
    →AC:(pointC_x - pointA_x ,pointC_y - pointA_y)

  • 2、向量的点乘 →AB · →AC
//向量的点乘
int vector = (pointB_x - pointA_x) * (pointC_x - pointA_x) + (pointB_y - pointA_y) * (pointC_y - pointA_y);

  • 3、向量的模乘 |→AB||→AC|
//向量的模乘
double sqrt = Math.sqrt(
        (Math.abs((pointB_x - pointA_x) * (pointB_x - pointA_x)) + Math.abs((pointB_y - pointA_y) * (pointB_y - pointA_y)))
      * (Math.abs((pointC_x - pointA_x) * (pointC_x - pointA_x)) + Math.abs((pointC_y - pointA_y) * (pointC_y - pointA_y)))
);

  • 4、∠A的余弦值
double cosA = vector / sqrt ;

  • 5、∠A的弧度
//反余弦计算弧度
double radian = Math.acos(vector / sqrt);

  • 6、∠A的度数
//弧度转角度制
int degree= (int) (180 * radian / Math.PI);

5、方法提取

代码中使用的根据点坐标计算角度的方法

/**
 * 
 * @param vertexPointX -- 角度对应顶点X坐标值
 * @param vertexPointY -- 角度对应顶点Y坐标值
 * @param point0X
 * @param point0Y
 * @param point1X
 * @param point1Y
 * @return
 */
private int getDegree(int vertexPointX, int vertexPointY, int point0X, int point0Y, int point1X, int point1Y) {
    //向量的点乘
    int vector = (point0X - vertexPointX) * (point1X - vertexPointX) + (point0Y - vertexPointY) * (point1Y - vertexPointY);
    //向量的模乘
    double sqrt = Math.sqrt(
            (Math.abs((point0X - vertexPointX) * (point0X - vertexPointX)) + Math.abs((point0Y - vertexPointY) * (point0Y - vertexPointY)))
                    * (Math.abs((point1X - vertexPointX) * (point1X - vertexPointX)) + Math.abs((point1Y - vertexPointY) * (point1Y - vertexPointY)))
    );
    //反余弦计算弧度
    double radian = Math.acos(vector / sqrt);
    //弧度转角度制
    return (int) (180 * radian / Math.PI);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容