05/13/2020

C++ Vector3类

  • Vector3类
  • 设计决策
    • float 还是double
    • 不要构造过得的构造函数
    • 不要重载过多的运算符
    • 可以考虑不使用信息屏蔽
    • 优化问题

Vector3类

3D向量基本操作:

  • get/set 各分量
  • 向量之间的赋值
  • 比较向量是否相同
  • 向量的运算
//Vector3.h
class Vector3
{public:
//构造函数Vector3() = default;Vector3(const Vector3& vector3);Vector3(float x,float y, float z);
//赋值Vector3& operator=(const Vector3& vector3);//等于与不等于bool opeartor==(const Vector3& vector3)const;bool operator!=(const Vector3& vector3)const;
//get/set 成员函数//向量运算void zero(){x=y=z=0;}
//重载运算符Vector3 operator-()const{return Vector3(-x,-y,-z);}Vector3 opeartor+(const Vector3& rhs)const;Vector3 operator-(const Vector3& rhs)const;Vector3 operator*(float k)const;Vector3 operator/(float k)const;Vector3& operator+=(const Vector3& rhs);Vector3& operator-=(const Vector3& rhs);Vector3& operator*=(const Vector3& rhs);Vector3& operator/=(const Vector3& rhs);//向量标准化void normalize(); // 注意除零问题!
//向量点乘float operator*(const Vector3& rhs)const;
//非成员函数friend Vector3 crossProduct(const Vector3& lhs,const Vector3& vector3);friend Vector3 operator*(float k,const Vector3& vector3);float vectorMag(const Vector3& vector);friend float distance(const Vector3& lhs,const Vector& rhs);private:float x;float z;float z;
};
//全局零向量
extern const Vector3 kZeroVector;

设计决策

float 还是double

针对x,y,z使用float还是double。float的精度比double低。需要根据地图来定。为了需求节省内存资源

不要构造过得的构造函数

基本来说,经常用到的就是拷贝构造函数和带3个参数的构造函数

不要重载过多的运算符

向量的基本运算法则需要与操作符相互对应,使操作符有意义和更明确的表达。

可以考虑不使用信息屏蔽

不需要使用protected和public,这样get/set和friend关键字就不需要,可以方便操作和简单易懂。

优化问题

如果更加优化Vector3很重要,因为向量类随处被使用到,所以需要结合当下,了解什么是最好的优化。

3DMath 第6章

3D数学-C++Vector3类相关推荐

  1. 3D数学 自定义三维向量类进行运算

    3D数学 自定义向量类进行运算 设计一个3维向量类,可以实现如下运算: 零向量 负向量 向量大小.长度.模 标量与向量的乘除法 单位向量 向量的加法和减法 距离公式 向量点乘 向量叉乘 由于原理很简单 ...

  2. Unity中的3D数学—02向量与矩阵

    1.向量 1.1 向量的运算 运算 公式 矢量和标量的乘/除法 k v = ( k v x , k v y , k v z ) k\mathbf{v}=(kv_x,kv_y,kv_z) kv=(kvx ...

  3. Unity 3D数学 — 向量运算

    向量(又称适量)是游戏开发中非常重要的概念.是用于描述具有方向和大小两个属性的物理量. 在数学里有大小和方向的量就是向量.在几何中,向量可以用一段有方向的线段表示. 1.向量的运算 (1)加减法:向量 ...

  4. 3D数学系列之——从“蒙的挺准”到“蒙的真准”解密蒙特卡洛积分!

    目录 1.前言 2.积分概念简单回顾 3.积分在程序计算上的困难 4.蒙特卡洛积分 5.一些扩展应用 1.前言   在学习3D数学的过程中,或者说在学习游戏开发.引擎开发.渲染器开发.Shader开发 ...

  5. 《3D数学基础》提炼总结(一)3D数学和笛卡尔坐标系

    写在前面,想学好图形学,数学是必不可少的,市面上想找一本书既包括数学知识又与图形学和编程连续紧密的,这本书算是名气较大的,再加上很多语言比较通俗幽默,读起来不那么想睡觉,所以就是它啦(#^.^#).当 ...

  6. Unity 3D数学\图形学基础-游戏开发(向量)

    Unity 3D数学\图形学基础-游戏开发(向量) 向量运算的几何意义 标量与向量的计算 向量的模长 标准化向量 normalize 0向量 向量与向量的加减法 两点间距离公式(向量间距离) 点积,点 ...

  7. Unity基础01——3D数学

    1.数学计算公共类Mathf 1.Mathf和Math Math是C#中封装好的用于数学计算的工具类--位于system命名空间中 Mathf是Unity中封装好的用于数学计算的工具结构体--位于Un ...

  8. Unity3D for VR 学习(6): 再次温故知新-3D数学

    一年前,系统学习过3D数学,并记录了一篇博客<C#程序员整理的Unity 3D笔记(十):Unity3D的位移.旋转的3D数学模型>. 一年后,再次温习之. 坐标系:Unity3D使用左手 ...

  9. 常用的数学计算工具类

    package com.xutil.math;import java.math.BigDecimal;/*** @title 数学计算工具类* @author Xingbz* @createDate ...

最新文章

  1. C# 实现基于ffmpeg加虹软的人脸识别
  2. word vba高效排版范例应用_收藏 | 原来word里面也有函数!
  3. 挂牌一年,关于 5G 的 9 个变化
  4. Quartz.Net进阶之二:关于触发器的更多信息
  5. Linux测量进程内存峰值,linux / unix进程的峰值内存使用情况
  6. 1 State Hook
  7. .net中使用XPath语言在xml中判断是否存在节点值的方法
  8. Nginx + Tomcat Windows下的负载均衡配置
  9. cocos2dx迷你地图
  10. python类定义中__init__()_转:python学习——类中为什么要定义__init__()方法
  11. vscode下的好用插件收集
  12. FreeBSD11配置local_unbound做dns缓存和转发
  13. vue 如何对两个文本比较
  14. 总结揭露黑客入侵网站的手法
  15. [论文笔记] ASFD 阅读笔记
  16. win7软件图标异常解决
  17. Maxio MAS0902A贴英特尔B16A颗粒速度测试
  18. 实验四+070+胡阳洋
  19. golang 实现数据结构-顺序表
  20. linux查显卡型号_Windows/Linux下怎么查看笔记本显卡型号

热门文章

  1. Android项目实战系列—基于博学谷(七)课程模块(下)
  2. canvas初学之——绘制一片星空
  3. mysql中主键约束和唯一约束的区别_主键约束和唯一性约束的区别
  4. python interactive mode_Nubia:是一个用Python构建命令行和交互式shell应用的轻量级框架...
  5. 第二十三讲 狄拉克函数(冲激函数)
  6. python获取标签属性值_Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
  7. java web 开发问题总结 5 原创-胡志广
  8. 自己动手,实现“你的名字”滤镜
  9. E影安全智能浏览器之界面
  10. Mysql源代码分析系列