c++的矢量类
来源:互联网 发布:向量用矩阵表示 编辑:程序博客网 时间:2024/06/05 19:31
下例中定义了一个矢量类,并对矢量定义了一系列操作:
文件结构:
vector.h代码:
#ifndef VECTOR_H_INCLUDED#define VECTOR_H_INCLUDED#include <iostream>class Vector{ public: enum Mode {RECT, POLAR}; //定义两种模式,一种为直角坐标,一种为极坐标,状态成员 private: double x; double y; //直角坐标系的横纵坐标 double distance; double angle; //极坐标的角度及距离 Mode mode; // void setX(); void setY(); void setDis(); void setAngle(); public: Vector(); Vector(double n1, double n2, Mode mode = RECT); ~Vector(); double xVal() const {return x;} double yVal() const {return y;} double distanceVal() const {return distance;} double angleVal() const {return angle;} void setRect(); // set mode to RECT void setPolar(); // set mode to POLAR Vector operator+(const Vector & v); //reload + Vector operator-(const Vector & v); Vector operator*(const double n); friend Vector operator*(double n, Vector & v); friend std::ostream & operator<<(std::ostream & os, const Vector & v);};#endif // VECTOR_H_INCLUDEDvector.cpp代码:
#include <iostream>#include <cmath>#include "vector.h"using namespace std;void Vector::setX() //set the value of x{ x = distance * cos(angle);}void Vector::setY(){ x = distance * sin(angle);}void Vector::setDis() //set the value of distance{ distance = sqrt(x*x + y*y);}void Vector::setAngle(){ angle = atan2(y, x);}Vector::Vector() //默认构造函数{ x = 0; y = 0; distance = 0; angle = 0; mode = RECT;}Vector::Vector(double n1, double n2, Mode form) //构造函数{ mode = form; if(form == RECT) { x = n1; y = n2; setAngle(); setDis(); } else if(form == POLAR) { distance = n1; angle = n2 / 57.2; setX(); setY(); } else { cout << "Mode error!\n"; x = 0; y = 0; distance = 0; angle = 0; mode = RECT; }}Vector::~Vector() //析构函数{}void Vector::setRect() // set mode to RECT{ mode = RECT;}void Vector::setPolar() // set mode to POLAR{ mode = POLAR;}Vector Vector::operator+(const Vector & v) //reload +{ Vector result; result.x = x + v.x; result.y = y + v.y; result.distance = distance + v.distance; result.angle = angle + v.angle; return result;}Vector Vector::operator-(const Vector & v) //reload +{ Vector result; result.x = x - v.x; result.y = y - v.y; result.distance = distance - v.distance; result.angle = angle - v.angle; return result;}Vector Vector::operator*(const double n){ Vector result; result.x = x * n; result.y = y * n; result.distance = distance * n; result.angle = angle; return result;}Vector operator*(double n, Vector & v){ Vector result; result.x = n * v.x; result.y = n * v.y; result.distance = n * v.distance; result.angle = v.angle; return result;}std::ostream & operator<<(std::ostream & os, const Vector & v){ if(v.mode == Vector::RECT) //因为这个函数是友元函数,不在类的作用域内,所以使用RECT要加上类名 os << "(x, y) = (" << v.x << ", " << v.y << ")" << endl; else if(v.mode == Vector::POLAR) os << "(d, a) = (" << v.distance << ", " << v.angle << ")" << endl; else os << "Vector mode is invalid." << endl; return os;}main.cpp代码:
#include <iostream>#include "vector.h"using namespace std;int main(){ Vector v1(1,2), v2(3, 5), v3, v4, v5, v6; Vector v7(12, 13, Vector::POLAR), v8; v3 = v1 * 3; v4 = v1 + v2; v5 = v1 - v2; v6 = 3 * v2; v8 = 3 * v7; cout << v2; cout << v3; cout << v4; cout << v5; cout << v6; cout << v7; cout << v8; return 0;}
0 0
- c++的矢量类
- 光栅的矢量化
- 矢量字库的剪裁
- 矢量的概念
- C进阶指南(3):显式内联、矢量扩展、C的逸闻轶事
- C进阶指南(3):显式内联、矢量扩展、C的逸闻轶事
- C进阶指南(3):显式内联、矢量扩展、C的逸闻轶事
- C进阶指南(3):显式内联、矢量扩展、C的逸闻轶事(转)
- 热区转矢量对象的工具类--关键、简单的代码
- Point类计算矢量
- 矢量
- as3中基本的2D矢量类:Vector_2D
- c#+ArcGIS Engine-矢量要素赋值
- 免费的矢量导航数据
- 矢量绘图的一些基本概念
- 复数与矢量的计算
- 基于SVG的矢量绘图
- 一些矢量方法的解释
- Flex4 FlexGlobals.topLevelApplication
- JS限制textarea字数
- lua源码分析之函数调用
- jdbc很多用法会导致memery leak
- 校赛 D 小鑫的漂流
- c++的矢量类
- 老鼠走迷宫
- iBatis学习笔记(2)--CRUD
- C++的Char traits模板类
- 【linux驱动分析】之dm9000驱动分析(五):另外几个重要的结构体
- allocator 的使用方法
- MFC读写INI配置文件
- PMON failed to acquire latch, see PMON dump
- 【linux驱动分析】之dm9000驱动分析(六):dm9000_init和dm9000_probe的实现