三、向量的加减乘除法
来源:互联网 发布:linux镜像文件iso下载 编辑:程序博客网 时间:2024/06/11 20:07
向量的运算
- 零向量
- 负向量
- 向量大小、长度、模
- 标量与向量的乘法
- 标准化向量
- 向量的加法和减法
- 距离公式
- 向量点乘
- 向量投影
- 向量叉乘
C++语言
- 标量与向量的乘法除法
放大一个向量的长度(乘以一个标量)
缩放一个向量的长度(除以一个标量) 标准化向量
长度为1,方向不变的向量,单位向量
公式:
例如标准化一个2D向量:向量的加法和减法
公式(符号变换即可):
距离公式:
贴上代码:
// Vector.h#ifndef _VECTOR3_H_INCLUDED_#define _VECTOR3_H_INCLUDED_#include <math.h>class Vector3 {public: float x; float y; float z; Vector3() {} Vector3(const Vector3 &a) :x(a.x), y(a.y), z(a.z) {} Vector3(float nX, float nY, float nZ) :x(nX), y(nY), z(nZ) {} void zero() { x = y = z = 0.0f; } Vector3 operator -() const { return Vector3(-x, -y, -z); } // 向量的乘法,放大一个向量 Vector3 operator *(Vector3 &v) const { return Vector3(x*v.x, y*v.y, z*v.z); } Vector3 operator *(float a) const { return Vector3(x*a, y*a, z*a); } Vector3 operator *=(float a) { x *= a; y *= a; z *= a; return *this; } // 向量的除法,缩放一个向量 Vector3 operator /(float a) const { float oneOverA = 1.0f / a; return Vector3(x, y, z)*oneOverA; } Vector3 operator /=(float a) { x /= a; y /= a; z /= a; return *this; } // 向量的加法 Vector3 operator +(const Vector3 &v) const { return Vector3(x + v.x, y + v.y, z + v.z); } Vector3 operator +=(const Vector3 &v) { return Vector3(x += v.x, y += v.y, z += v.z); } // 向量的减法法 Vector3 operator -(const Vector3 &v) const { return Vector3(x - v.x, y - v.y, z - v.z); } Vector3 operator -=(const Vector3 &v) { return Vector3(x -= v.x, y -= v.y, z -= v.z); } // 标准化一个向量 void normalize() { float magSq = x*x + y*y + z*z; if (magSq > 0.0f) { float oneOverMag = 1.0f / sqrt(magSq); x *= oneOverMag; y *= oneOverMag; z *= oneOverMag; } }};// 求模inline float vectorMag(const Vector3 &a) { return sqrt(a.x*a.x + a.y*a.y + a.z*a.z);}// 左乘inline Vector3 operator *(float le_v, const Vector3 &v) { return Vector3(le_v * v.x, le_v * v.y, le_v * v.z);}// 两点距离inline float Distance(const Vector3 &a, const Vector3 &b) { return vectorMag(a - b);}#endif
下一章是向量的叉乘和点乘。
0 0
- 三、向量的加减乘除法
- BigDecimal的加减乘除法
- 转载高精度加减乘除法
- 随机出加减乘除法
- JS中的加减乘除法
- 常见对象_BigInteger的加减乘除法的使用
- 常见对象_BigDecimal的加减乘除法的使用
- 常见对象_BigInteger的加减乘除法的使用
- 重载的可加减乘的点(向量)模板
- 多项式加减乘除法算法实现
- 密码学中一些加减乘除法优化
- 不用加减乘除法做加法
- 多项式的加减乘
- java处理浮点类型的加减乘除法出现小数点精度错乱的解决方法
- [源码]个人的大数相乘法及[转载]大数加减乘除法完全设计
- java实现大整数的加减乘除法(百练OJ:2736、2737、2980、2981)
- <C语言>实现简单的计算器(循环输入,加减乘除法可选)
- 学会利用java程序编写简单的加减乘除法运算
- 走在20出头的路上
- [jQuery知识]jQuery之知识九-事件高级
- Nginx是什么,有什么优点?为什么选择Nginx做web服务器软件?
- uva10635(lcs lis O(NlgN))
- 1. Two Sum
- 三、向量的加减乘除法
- C++静态成员复习笔记
- 你知道android中的视差特效吗
- Bootstrap学习总结笔记(18)-- 基本插件之Tooltip提示工具
- 控制器Controller
- BadBoy参数化和乱码处理
- Android开发——service直接启动activity
- HTML&CSS
- nginx配置https和生成自己的CA证书