3D数学-C++Vector3类
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类相关推荐
- 3D数学 自定义三维向量类进行运算
3D数学 自定义向量类进行运算 设计一个3维向量类,可以实现如下运算: 零向量 负向量 向量大小.长度.模 标量与向量的乘除法 单位向量 向量的加法和减法 距离公式 向量点乘 向量叉乘 由于原理很简单 ...
- 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 ...
- Unity 3D数学 — 向量运算
向量(又称适量)是游戏开发中非常重要的概念.是用于描述具有方向和大小两个属性的物理量. 在数学里有大小和方向的量就是向量.在几何中,向量可以用一段有方向的线段表示. 1.向量的运算 (1)加减法:向量 ...
- 3D数学系列之——从“蒙的挺准”到“蒙的真准”解密蒙特卡洛积分!
目录 1.前言 2.积分概念简单回顾 3.积分在程序计算上的困难 4.蒙特卡洛积分 5.一些扩展应用 1.前言 在学习3D数学的过程中,或者说在学习游戏开发.引擎开发.渲染器开发.Shader开发 ...
- 《3D数学基础》提炼总结(一)3D数学和笛卡尔坐标系
写在前面,想学好图形学,数学是必不可少的,市面上想找一本书既包括数学知识又与图形学和编程连续紧密的,这本书算是名气较大的,再加上很多语言比较通俗幽默,读起来不那么想睡觉,所以就是它啦(#^.^#).当 ...
- Unity 3D数学\图形学基础-游戏开发(向量)
Unity 3D数学\图形学基础-游戏开发(向量) 向量运算的几何意义 标量与向量的计算 向量的模长 标准化向量 normalize 0向量 向量与向量的加减法 两点间距离公式(向量间距离) 点积,点 ...
- Unity基础01——3D数学
1.数学计算公共类Mathf 1.Mathf和Math Math是C#中封装好的用于数学计算的工具类--位于system命名空间中 Mathf是Unity中封装好的用于数学计算的工具结构体--位于Un ...
- Unity3D for VR 学习(6): 再次温故知新-3D数学
一年前,系统学习过3D数学,并记录了一篇博客<C#程序员整理的Unity 3D笔记(十):Unity3D的位移.旋转的3D数学模型>. 一年后,再次温习之. 坐标系:Unity3D使用左手 ...
- 常用的数学计算工具类
package com.xutil.math;import java.math.BigDecimal;/*** @title 数学计算工具类* @author Xingbz* @createDate ...
最新文章
- C# 实现基于ffmpeg加虹软的人脸识别
- word vba高效排版范例应用_收藏 | 原来word里面也有函数!
- 挂牌一年,关于 5G 的 9 个变化
- Quartz.Net进阶之二:关于触发器的更多信息
- Linux测量进程内存峰值,linux / unix进程的峰值内存使用情况
- 1 State Hook
- .net中使用XPath语言在xml中判断是否存在节点值的方法
- Nginx + Tomcat Windows下的负载均衡配置
- cocos2dx迷你地图
- python类定义中__init__()_转:python学习——类中为什么要定义__init__()方法
- vscode下的好用插件收集
- FreeBSD11配置local_unbound做dns缓存和转发
- vue 如何对两个文本比较
- 总结揭露黑客入侵网站的手法
- [论文笔记] ASFD 阅读笔记
- win7软件图标异常解决
- Maxio MAS0902A贴英特尔B16A颗粒速度测试
- 实验四+070+胡阳洋
- golang 实现数据结构-顺序表
- linux查显卡型号_Windows/Linux下怎么查看笔记本显卡型号
热门文章
- Android项目实战系列—基于博学谷(七)课程模块(下)
- canvas初学之——绘制一片星空
- mysql中主键约束和唯一约束的区别_主键约束和唯一性约束的区别
- python interactive mode_Nubia:是一个用Python构建命令行和交互式shell应用的轻量级框架...
- 第二十三讲 狄拉克函数(冲激函数)
- python获取标签属性值_Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
- java web 开发问题总结 5 原创-胡志广
- 自己动手,实现“你的名字”滤镜
- E影安全智能浏览器之界面
- Mysql源代码分析系列