java 三维向量类_三维向量类

本文介绍了作者根据线性代数和计算机图形学知识自定义的C++三维向量类,该类包含了向量的基本属性如模、角度以及一系列操作,如加减、乘法、单位化、旋转等。通过这个类,可以方便地进行三维空间的向量运算,尤其在OpenGL编程中表现出便利性。作者分享了类的定义和部分实现,并期望与读者交流提高。
摘要由CSDN通过智能技术生成

还是在读书的时候帮外专业朋友做作业,用GDI实现三维空间的立方体绘制和旋转的操作,那个时候自己根据《线性代数与空间解析几何》以及《计算机图形学》等课程的相关知识写了一个三维向量类。后来做了些二维和三维的东西发现用向量操作会使很多问题变得简单直观,尤其是在OpenGL编程的时候这种感觉尤为明显。经过这么长时间的使用现在这个类已经比较完善了,早些时候将它上传到了CSDN,近来比较闲索性写个介绍吧,希望对从事三维图形开发的朋友有所帮助,也期待着与大家的交流中会有所提高。

先把代码贴上,当然有兴趣的朋友也可以在我的资源中下载。

类的定义是这样的

class CVector

{

public:

float m_fVectorX, m_fVectorY, m_fVectorZ, //向量的空间坐标

m_fAngleX, m_fAngleY, m_fAngleZ, //向量与坐标轴的夹角

m_fMod; //向量的模

public:

CVector();

CVector(float fVectorX, float fVectorY, float fVectorZ);

virtual ~CVector();

void CalculateAngles();

void SetVector(float fStartX, float fStartY, float fStartZ, float fEndX, float fEndY, float fEndZ);

void SetVector(float fVectorX, float fVectorY, float fVectorZ);

float GetMod(){return m_fMod;}

void Invert();

void MakeUnitVector();

void Rotate(float fAngle, CVector vtrAxis);

void operator=(CVector vectorOther);

CVector operator+(CVector vectorOther);

CVector operator*(float fNum);

float operator^(CVector vectorOther);

CVector operator*(CVector vectorOther);

};

大家应该都知道所谓向量其实就是一组数,在笛卡尔坐标系中一个向量就是起点在原点的有向线段,虽然向量的起点可以在任意位置,但是标记向量的有序数却还是当起点在原点时终点的坐标。所以m_fVectorX, m_fVectorY, m_fVectorZ就唯一确定了一个向量。当然向量还有一些其他属性,比如模(也就是向量的长度),比如其和各个坐标轴的夹角,所以我做了另外四个变量m_fMod、m_fAngleX、m_fAngleY、m_fAngleZ来保存这些属性。

生成变量有很多方法,比如直接设置终点坐标、比如通过起点和终点做差,所以我也实现了两个版本的SetVector。当然也有通过模和角度来生成变量的,但这种方法极其不常用,尤其是在三维条件下这个角度其实很不容易

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值