右手坐标系:X(食指) Y(中) Z(大拇指)
左手坐标系:X(大拇指) Y(食指) Z(中指)
OPenGL 用右手坐标系
Directx 用左手坐标系
东西南北对应的xyz
Y
Z北边
X东边
世界坐标系===============》惯性坐标系==============》物体坐标系
移动 旋转
向量 [1、2、3] 行向量
[1]
[2]
[3] 列向量
标量是一维向量
1 a1=ax=1
a=[ 2 ] a2=ay=2
3 a3=az=3
向量是有大小有方向的有向线段。
[x,y] x方向偏移量,y方向上的便宜量
向量和点在数学上是等价的
(x,y)表示点 [x,y]表示向量
头文件 Vector3.h
#ifndef __VERTOR3_H_INCLUDED__//给头文件加保护
#define __VECTOR3_H_INCLUEDE__
#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){}//用nx初始化x
void zero(){ x = y = z = 0.0f; }//零向量
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);//计算平方根
}
#endif
源文件 Main.cpp
#include <iostream>//包含io流
#include "Vector3.h"//头文件包含进来
using namespace std;//名称空间
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();
print_v(v2);
Vector3 v4(5, -4, 7);
float f = vectorMag(v4);
cout << f << endl;
system("pause");//写一个暂停
return 0;
}
输出结果