C/C++已知坐标求角度(函数atan和atan2)

atan函数和atan2函数求角度的区别:

已知两点坐标求角度时,atan函数求角度时无方向(矢量),atan2函数求角度时有方向(矢量)。

atan:-90~90度

atan2:-180~180度

例如:a(3,1),b(4,2)  方向ab

             求直线角度(与水平坐标线),atan:45°

                                                                     atan2:45°

           

     b(4,2),a(3,1)  方向ba

             求直线角度(与水平坐标线),atan:45°

                                                                     atan2:-135°

程序如下:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define pi 3.1415926

void LineAngle1();
void LineAngle2();
typedef struct 
{
    double X;
    double Y;
}point;

 typedef struct 
{
    point A;
    point B;
    double deg;
}line;

line lineA;
line lineB;

double tmp;
double angle;

int main( )
{
    LineAngle1();   
    LineAngle2();

    printf( "两条直线角度差:%lf\n", fabs(lineA.deg-lineB.deg));

    return 0;
}
void LineAngle1()
{
    printf("请输点坐标(x,y)构造第一条直线\n");
    printf("第一点x与y:");
    scanf( "%lf%lf", &lineA.A.X, &lineA.A.Y );
    printf("第二点x与y:");
    scanf( "%lf%lf", &lineA.B.X, &lineA.B.Y );

    //求角度
    tmp=(lineA.B.Y-lineA.A.Y)/(lineA.B.X-lineA.A.X);
    lineA.deg=atan(tmp);  //弧度
    lineA.deg=lineA.deg*(double)180/pi;
   angle=atan2((lineA.B.Y-lineA.A.Y),(lineA.B.X-lineA.A.X))*(double)180/pi;  //atan 无方向,atan2 有方向 (矢量)


    printf( "第一条直线斜线角度:%lf,%lf\n", tmp,lineA.deg );
    printf( "angle:%lf\n", angle);
}
void LineAngle2()
{
printf("请输点坐标(x,y)构造第二条直线\n");
    printf("第一点x与y:");
    scanf( "%lf%lf", &lineB.A.X, &lineB.A.Y );
    printf("第二点x与y:");
    scanf( "%lf%lf", &lineB.B.X, &lineB.B.Y );


    //求角度
    tmp=(lineB.B.Y-lineB.A.Y)/(lineB.B.X-lineB.A.X);
    lineB.deg=atan(tmp);
    lineB.deg=lineB.deg*(double)180/pi;
    printf( "第二条直线斜线角度:%lf,%lf\n", tmp,lineB.deg );
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值