hdu2080 夹角有多大Ⅱ

设:原点O坐标(0,0),向量A坐标(x1,y1),向量B坐标(x2,y2),直线OA与OB的夹角度数等于 α;

由向量的数量积公式:

                                                A · B =  |A| * |B| * cosα

所以:

                                           cosα = (A · B) /  (|A| * |B|)

而A · B 和 |A| * |B| 都可由A、B的坐标计算得到,这样就得到了cosα的值,再用arcos函数反求一下cosα的值就能得到度数α是多少。

                                                A · B = x1*x2 + y1*y2

                                        |A| = 根号下(x1的平方 + y1的平方)               ( |B| 同理 )

ac不了,懒得排查了,就酱。

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    const double PI = acos(-1.0);
    int N;
    cin>>N;

    int x1,y1,x2,y2;
    while (N--)
    {
        cin>>x1>>y1>>x2>>y2;
        double dot_ab = x1*x2 + y1*y2;//数量积 A·B
        double abs_ab = sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2);// |A||B|

        double cos_ab = dot_ab/abs_ab;//cos的值
        double acos_ab = acos(cos_ab)*180.0/PI;//acos
        cout<<acos_ab;
    }
    
}

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值