CVector3类

在计算图形学中三维向量的用处非常广泛,可以自定义一个CVector3类,主要是封装对三维向量的操作,在Cvector3中主要封装一下操作

1.构造函数,初始化向量

2.运算符重载,主要是加减乘除运算符重载。

3.各种操作,比如数量积,向量积,单位化,求长度,按比例缩放等。

#pragma once
#include <math.h>
class CVector3
{
public:
	CVector3(void):x(0),y(0),z(0){};  
	CVector3(float x1,float y1,float z1):x(x1),y(y1),z(z1){};
	CVector3(const CVector3 &v);

	CVector3 operator =(const CVector3 &v); //赋值运算符重载

	// +-*/不同的重载方式
	CVector3 operator +(const CVector3 &v);
	CVector3 operator -(const CVector3 &v);
	CVector3 operator *(const CVector3 &v);
	CVector3 operator /(const CVector3 &v);

        CVector3 operator +(float a);
	CVector3 operator -(float a);
        CVector3 operator *(float a);
        CVector3 operator /(float a);

	float dot(const CVector3& v1,const CVector3& v2);      //2个向量的数量积
	CVector3 Cross(const CVector3& v1,const CVector3& v2); //2个向量的向量积
	float length();     //求向量的长度
	CVector3 Normalize();//单位化向量
	CVector3 Scale(float n);//向量按比例缩放 
	virtual ~CVector3(void);

private:
	float x;
	float y;
	float z;
};

#include "Vector3.h"

CVector3::CVector3(const CVector3 &v)
{
	x=v.x;
	y=v.y;
	z=v.z;
}


CVector3::~CVector3(void)
{

}

CVector3 CVector3::operator=(const CVector3& v)
{
	x=v.x;
	y=v.y;
	z=v.z;
	return *this;
}

CVector3 CVector3::operator+(const CVector3& v)
{
	return CVector3(x+v.x,y+v.y,z+v.z);
}

CVector3 CVector3::operator-(const CVector3& v)
{
	return CVector3(x-v.x,y-v.y,z-v.z);
}

CVector3 CVector3::operator*(const CVector3& v)
{
	return CVector3(x*v.x,y*v.y,z*v.z);
}

CVector3 CVector3::operator/(const CVector3& v)
{
	if(v.x==0||v.y==0||v.z==0)
		return *this;
	else
		return CVector3(x/v.x,y/v.y,z/v.z);
}

CVector3 CVector3::operator+(float a)
{
	return CVector3(x+a,y+a,z+a);
}

CVector3 CVector3::operator-(float a)
{
	return CVector3(x-a,y-a,z-a);
}

CVector3 CVector3::operator*(float a)
{
	return CVector3(x*a,y*a,z*a);
}

CVector3 CVector3::operator/(float a)
{
	if(a==0)
		return *this;
	else
	return CVector3(x/a,y/a,z/a);
}

float CVector3::dot(const CVector3& v1,const CVector3& v2)
{
	return v1.x*v2.x+v1.y*v2.y+v1.z*v2.z;
}

CVector3 CVector3::Cross(const CVector3& v1,const CVector3& v2)
{
	return CVector3(v1.y*v2.z-v1.z*v2.y,v1.z*v2.x-v1.x*v2.z,v1.x*v2.y-v1.y*v2.y);
}

float CVector3::length()
{
	return sqrt(x*x+y*y+z*z);
}

CVector3 CVector3::Normalize()
{
    if(this->length()==0)
		return CVector3(0.0,0.0,0.0);
	else
		return CVector3(x/length(),y/length(),z/length());
}

CVector3 CVector3::Scale(float n)
{
	return CVector3(x*n,y*n,z*n);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值