注:现使用VS版本为2017
- 零向量:
任何集合,都存在加性单位元x,对集合中任意元素y,满足y+x=y。 n维向量集合的加性单位元就是n维“零向量”。(如[0 0 0 0 ···· 0]) 零向量是唯一一个没有方向的向量。
- 负向量 对于任意集合,元素x的加性逆元为-x,其与x相加等于加性单位元。简单的说就是x+(-x) = 0。 公式:
- 几何解释:向量变负,将得到一个和原向量大小相等,方向相反的向量。(向量的大小和方向才是最重要的)
- 向量的大小常被称作向量的长度或模。 公式:
- 几何解释:对于任意直角三角形,斜边长度的平方等于直角边长度的平方和。
一.首先新建c++源文件main.cpp测试输出,输出"hello vector":
#include <iostream>//iostream是c++系统定义的一个头文件,他设置了c++风格的I/O环境;流对象cin,cout及运算>;的定义,均包含在文件iostream中;
using namespace std;//空间命名
int main()
{
cout << "hello vector" << endl;
system("pause");//当函数存在返回值时,必须有return 0存在。system("PAUSE")是暂停运行,以便于查看运行结果
return 0;
}
二.新建头文件命名为Vector3.h学习 零向量 ,负向量, 向量大小长度模。
#pragma once
//给头文件加保护
#ifdef __VECTOR3_H_INCLUDED__
#define __VECTOR3_H_INCLUDED__
#include <math.h>
class Vector3
{
public:
//定义向量
float x, y, z;
//没有参数的构造函数
Vector3(){}
//复制构造函数
Vector3(const Vector3 &a) :x(a.x), y(a.y), z(a.z) {}//用a初始化坐标函数,复制坐标函数
Vector3(float nx, float ny, float nz) :x(nx), y(ny), z(nz) {}//带参数的坐标函数
void zero() { x = y = z = 0.0f; }//成员函数,当前向量设为0向量
Vector3 operator-() const { return Vector3(-x, -y, -z); }//为了计算负向量重载负号操作符
inline float vectorMag(const Vector3 &a)//非成员函数计算向量的模
{
return sqrt(a.x*a.x + a.y*a.y + a.z*a.z);//计算向量模,sqrt开平方根
}
};
#endif//结束
三.main.cpp
#include <iostream>
#include "Vector3.h"
using namespace std;
class Vector3* Mag;
void print_v(Vector3 v)
{
cout << "[" << v.x << "," << v.y<< "," << v.z<< "]"<<endl;
}
int main()
{
cout << "hello vector" << endl;
Vector3 v1(10, 20, 30);
print_v(v1);
Vector3 v2(v1);//使用复制函数
print_v(v2);
Vector3 v3 = -v1;//计算负向量
print_v(v3);
v2.zero();//计算0向量
print_v(v2);
Vector3 v4(5, -4, 7);//计算向量模
float r = Mag->vectorMag(v4);
cout << r << endl;
system("pause");
return 0;
}
输出: