C++ 获取一个点相对于正x轴的角度

2024-05-05 20:58

本文主要是介绍C++ 获取一个点相对于正x轴的角度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#define EPS  0.0000001
#define  PI            3.14159265358979323846


struct pt
{
    double x;
    double y;
};

//获取所在象限
int GetQuadrantForPoint(pt  p)
{
    if(p.x > 0 && p.y > 0) //第一象限
        return 1;
    else if(abs(p.x - 0)<EPS && p.y > 0) //在y轴正方向
        return  12;
    else if(p.x<0 && p.y>0) //2
    {
        return 2;
    }
    else if(p.x<0&& abs(p.y-0)<EPS) //-x
    {
        return 23;
    }
    else if(p.x<0&& p.y<0) //3
    {
        return 3;
    }
    else if(abs(p.x-0)<EPS && p.y<0) //-y
    {
        return 34;
    }
    else if(p.x>0&& p.y<0) //4
    {
        return 4;
    }
    else if(p.x>0&& abs(p.y-0)<EPS) //+x
    {
        return 41;
    }
    else if(abs(p.x-0)<EPS && abs(p.y-0)<EPS) //o
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

//获取角度
BOOL GetAngleForPoint(pt p,double *angle)
{
    double x=abs(p.x);
    double y=abs(p.y);
    if(GetQuadrantForPoint(p) == 12)
    {
        *angle = 90.00;
    }
    else if(GetQuadrantForPoint(p) == 23)
    {
        *angle = 180.00;
    }
    else if(GetQuadrantForPoint(p) == 34)
    {
        *angle = 270.00;
    }
    else if(GetQuadrantForPoint(p) == 41)
    {
        *angle = 0.00;
    }
    else if(GetQuadrantForPoint(p) == 1)
    {
        *angle = atan(y/x)/PI*180;
    }
    else if(GetQuadrantForPoint(p) == 2)
    {
        *angle = atan(x/y)/PI*180+90;
    }
    else if(GetQuadrantForPoint(p) == 3)
    {
        *angle = atan(y/x)/PI*180+180;
    }
    else if(GetQuadrantForPoint(p) == 4)
    {
        *angle = atan(x/y)/PI*180+270;
    }
    else
    {
        return 0;
    }
    return 1;
}

这篇关于C++ 获取一个点相对于正x轴的角度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962660

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表