CAngle类 角度转换类

  • 不是我写的,仅分享学习!书上配套,如有侵权,速删
  • 与测绘程序设计配套(C++) 角度转换类
  • 代码:
    • Angle.h (CAngle.h):
    • Angle.cpp (CAngle.cpp):

不是我写的,仅分享学习!书上配套,如有侵权,速删

与测绘程序设计配套(C++) 角度转换类

代码:

Angle.h (CAngle.h):

#pragma once
enum AngleStyle
{DEG,DMS,RAD
};
class Angle
{public:Angle(double value=0,AngleStyle style=DMS);~Angle(void);private:double dValue;//角度值AngleStyle  nCurStyle;//当前角度值类型
private://设置常成员函数的作用:1.类成员不会被改变//2.可以被常类变量调用double Deg(double dDms) const;double Dms(double dDeg) const;public://获取指定的类型获取角度值,//由于返回的是dValue的引用,所以该值大小可以改变,即可以进行赋值double& operator() (AngleStyle style);//重载,获取指定的类型获取角度值,该值不可改变,const CAngle类型变量调用double operator() (AngleStyle style) const;//重载运算符+/-friend Angle operator + (const Angle& m1,const Angle& m2);friend Angle operator - (const Angle& m1,const Angle& m2);
};

Angle.cpp (CAngle.cpp):

#include "StdAfx.h"
#include "Angle.h"
#include "math.h"
const double EPSILON=1.0E-12;
const double PI=4.0*atan(1.0);//重载构造函数,有缺省值
Angle::Angle(double value,AngleStyle style)
{dValue=value;nCurStyle=style;
}Angle::~Angle(void)
{}
//重载()函数
double& Angle::operator() (AngleStyle style) //指定的类型获取角度值
{//double dAngleValue;if(style==DMS){if(nCurStyle==DEG){dValue=Dms(dValue);}else if(nCurStyle==RAD){dValue=Dms(dValue*180.0/PI);}nCurStyle=DMS;}else if(style==DEG){if(nCurStyle==DMS){dValue=Deg(dValue);}else if(nCurStyle==RAD){dValue=dValue*180.0/PI;}nCurStyle=DEG;}else{if(nCurStyle==DMS){dValue=Deg(dValue)*PI/180;}else if(nCurStyle==DEG){dValue=dValue*PI/180;}nCurStyle=RAD;}return dValue;
}
//重载()函数,该函数是常函数,只能被常CAngle对象使用
double Angle::operator() (AngleStyle style) const //指定的类型获取角度值
{double dAngleValue;if(style==DMS){if(nCurStyle==DEG){dAngleValue=Dms(dValue);}else if(nCurStyle==RAD){dAngleValue=Dms(dValue*180.0/PI);}else{dAngleValue=dValue;}}else if(style==DEG){if(nCurStyle==DMS){dAngleValue=Deg(dValue);}else if(nCurStyle==RAD){dAngleValue=dValue*180.0/PI;}else{dAngleValue=dValue;}}else{if(nCurStyle==DMS){dAngleValue=Deg(dValue)*PI/180;}else if(nCurStyle==DEG){dAngleValue=dValue*PI/180;}else{dAngleValue=dValue;}}return dAngleValue;
}//私有成员,度分秒向十进制度转换
double Angle::Deg(double dDms) const
{int iDeg,iMin;double dSec;iDeg = int(dDms + EPSILON);//度//加一个很小的数,以防止取整时的出错iMin = int((dDms - iDeg) * 100+ EPSILON);//分dSec = ((dDms - iDeg) * 100 - iMin) * 100 ;//秒return iDeg + (double)iMin / 60 + dSec / 3600;
}//私有成员,十进制度向度分秒转换
double Angle::Dms(double dDeg) const
{int iDeg,iMin;double dSec;double dTmp;iDeg = int(dDeg + EPSILON);//整数部分度dTmp = (dDeg - iDeg) * 60;//小数部分转换成分iMin = int(dTmp+ EPSILON);//取分的整数部分dSec = (dTmp - iMin) * 60;//截取秒return iDeg + (double)iMin / 100 + dSec / 10000;
}//友元重载+函数
Angle operator + (const Angle& m1,const Angle& m2)
{Angle addAngle(0,RAD);addAngle(RAD)=m1(RAD)+m2(RAD);return addAngle;
}
//友元重载-函数
Angle operator - (const Angle& m1,const Angle& m2)
{Angle subAngle(0,RAD);subAngle(RAD)=m1(RAD)-m2(RAD);return subAngle;
}

CAngle类 角度转换类 C++相关推荐

  1. javabean实体类与实体类之间的快速转换

    一.Dozer是什么? dozer是一个能把实体和实体之间进行转换的工具.只要建立好映射关系.就像是ORM的数据库和实体映射一样. 使用方法示例如下: // article(PO) -> art ...

  2. 派生类到基类的转换 和基类到派生类的转换

    一. 基类与派生类的转换     3种继承方式(公用.保护.私有继承)中,公用派生类才是基类真正的子类型,它完整地继承了基类的功能.     不同类型数据之间在一定条件下可以进行类型的转换.基类与派生 ...

  3. C++中的四类强制转换?

    C++中的四类强制转换? 例: class ClassA { public: virtual ~ ClassA() {          }      virtual void FunctionA() ...

  4. Java 编程的动态性,第 5 部分: 动态转换类--转载

    在第 4 部分" 用 Javassist 进行类转换"中,您学习了如何使用 Javassist 框架来转换编译器生成的 Java 类文件,同时写回修改过的类文件.这种类文件转换步骤 ...

  5. 基类与派生类之间的转换关系

    一. 派生类到基类的转换: 1.可以使用派生类指针初始化基类指针,同样也可以使用派生类的引用或对象初始化基类的引用,注意这里提到的是对象的指针和引用而不是对象本身: (但是,在使用基类指针(或引用)指 ...

  6. 第三次学JAVA再学不好就吃翔(part51)--String类的转换功能

    学习笔记,仅供参考 文章目录 String类 String类的转换功能 getBytes方法 toCharArray方法 valueOf方法 toLowerCase方法 toUpperCase方法 c ...

  7. WPF中一个通用的BoolToXXX转换类

    在WPF程序的数据绑定里面,经常会通过一个布尔类型的值来控制UI控件的状态,例如是否可见,是否最大化之类的.然而UI控件的各个状态属性的类型往往不是布尔类型,比如UIElement.Visibilit ...

  8. java 类之间转换,java中类对象之间的类型转换

    类似于基本数据类型之间的强制类型转换. 存在继承关系的父类对象和子类对象之间也可以 在一定条件之下相互转换. 这种转换需要遵守以下原则: 1.子类对象可以被视为是其父类的一个对象 2.父类对象不能被当 ...

  9. 【C++ Priemr | 15】派生类向基类转换的可访问性

    1. 只有当D公有继承B时,用户代码才能使用派生类向基类的转换:如果D私有继承B的方式是受保护的或者私有的,则用户代码不能使用该转换. class A {}: class B : public A { ...

  10. C++:43---派生类向基类转换、静态/动态的类变量

    一.继承中类的类型转换规则 我们普通的编程规则规定,如果我们想把引用或指针绑定到一个对象上,则引用或指针的类型必须与所绑定的对象的类型一致或者对象的类型含有一种可接受的const类型转换规则.但是继承 ...

最新文章

  1. FileZilla无法连接到服务器,不安全的服务器,不支持 FTP over TLS的解决方案
  2. MySQL事件调度器(Event Scheduler)介绍
  3. ubuntu9.10 安装 eclipse3.5 的问题
  4. python购物车实现的功能是什么_Python3实现购物车功能
  5. linux 查看用户上次修改密码的日期
  6. 联发科推出5G处理器天玑720 采用台积电7nm工艺制造
  7. 计算机技术与分析化学论文,分析化学论文范文
  8. ping 丢包 网络摄像头_FIFA21 新加入网络连接监测功能
  9. linux 批量选中文本删除,教程 | 【七牛云】Qshell Linux下批量删除文件教程
  10. linux media v4l2,Linux kernel drivers/media/v4l2-core/videobuf2-v4l2.c拒绝服务漏洞(CVE-2016-4568)...
  11. UVA10624 Super Number【DFS】
  12. 传智播客大型人才招聘会成功举行
  13. 智慧城市顶层设计跨界思维指导方案(ppt)
  14. MediaRecorder单独录制影像,不录制音频
  15. 【华为机试真题 Python实现】九宫格按键输入【2022 Q1 Q2 Q3 |200分】
  16. 计算机组成原理——存储器(一)
  17. 进程间通信----共享内存
  18. 【图像处理】关于颜色的万花筒(RGB--HSV)
  19. 管理学专业学生必懂 3月25日 16:40
  20. 地球经纬度计算两点距离

热门文章

  1. 每天一道剑指offer-二叉搜索树与双向链表
  2. linux nvme 驱动 版本,Linux 上的 NVMe
  3. linq 清除一条数据中的某个字段值_利用Postman中Tests断言校验返回结果
  4. pyqt5优秀项目python_Python优秀开源项目Rich源码解析
  5. 华为matepadpro可以用云电脑吗_放弃台式机,改用华为云电脑,再手机投屏到显示器,这样可行吗?...
  6. python os.open禁止写入缓存区_Python-设置文件缓冲类型
  7. C语言sopc蜂鸣器按键弹奏中音,五邑大学sopc实验报告:基于自定义PWM的乐曲演奏实验.doc...
  8. bde连接mysql设置,delphi通过BDE方式连接数据库以及程序Demo
  9. 如何用C语言做PONG游戏,游戏第一弹--pong游戏
  10. Tomcat:开启Tomcat服务CMD窗口乱码