常用的3d向量方法,根据《3d数学基础:图形与游戏开发》中第六章改写的c#版
来源:互联网 发布:java电子邮箱格式校验 编辑:程序博客网 时间:2024/06/05 23:54
常用的3d向量方法,根据《3d数学基础:图形与游戏开发》中第六章改写的c#版
class Vector3 { public float X { get; set; } public float Y { get; set; } public float Z { get; set; } public Vector3() { } public Vector3(float x, float y, float z) { this.X = x; this.Y = y; this.Z = z; } public Vector3(Vector3 vec) { this.X = vec.X; this.Y = vec.Y; this.Z = vec.Z; } #region 运算符重载 public static Vector3 operator +(Vector3 vec1, Vector3 vec2) { return new Vector3(vec1.X + vec2.X, vec1.Y + vec2.Y, vec1.Z + vec2.Z); } public static Vector3 operator -(Vector3 vec) { return new Vector3(-vec.X, -vec.Y, -vec.Z); } public static Vector3 operator -(Vector3 vec1, Vector3 vec2) { return new Vector3(vec1.X - vec2.X, vec1.Y - vec2.Y, vec1.Z - vec2.Z); } public static Vector3 operator *(Vector3 vec, float ratio) { return new Vector3(vec.X * ratio, vec.Y * ratio, vec.Z * ratio); } public static Vector3 operator *(float ratio, Vector3 vec) { return new Vector3(vec.X * ratio, vec.Y * ratio, vec.Z * ratio); } public static float operator *(Vector3 vec1, Vector3 vec2) { return vec1.X * vec2.X + vec1.Y * vec2.Y + vec1.Z * vec2.Z; } public static Vector3 operator /(Vector3 vec, float ratio) { if (ratio == 0) { Console.WriteLine("除数不能为0"); return null; } else { return new Vector3(vec.X / ratio, vec.Y / ratio, vec.Z / ratio); } } public static bool operator ==(Vector3 vec1, Vector3 vec2) { return !(vec1 != vec2); } public static bool operator !=(Vector3 vec1, Vector3 vec2) { return vec1.X != vec2.X || vec1.Y != vec2.Y || vec1.Z != vec2.Z; } public override bool Equals(object obj) { if (obj == null) return false; else { if (obj.GetType() == GetType()) { Vector3 temp = (Vector3)obj; return this.X == temp.X && this.Y == temp.Y && this.Z == temp.Z; } else { return false; } } } public override string ToString() { return string.Format("{0},{1},{2}", this.X, this.Y, this.Z); } public override int GetHashCode() { return base.GetHashCode(); } #endregion public Vector3 Normalize() { float magSq = X * X + Y * Y + Z * Z; if (magSq > 0) { float oneOverMag = 1.0f / (float)Math.Sqrt(magSq); float x = X * oneOverMag; float y = Y * oneOverMag; float z = Z * oneOverMag; return new Vector3(x, y, z); } return new Vector3(0, 0, 0); } public float Length() { return (float)Math.Sqrt(X * X + Y * Y + Z * Z); } public static float Length(Vector3 vec) { return (float)Math.Sqrt(vec.X * vec.X + vec.Y * vec.Y + vec.Z * vec.Z); } public static Vector3 CrossProduct(Vector3 vec1, Vector3 vec2) { return new Vector3( vec1.Y * vec2.Z - vec1.Z * vec2.Y, vec1.Z * vec2.X - vec1.X * vec2.Z, vec1.X * vec2.Y - vec1.Y * vec2.X ); } public static float Distance(Vector3 vec1, Vector3 vec2) { float dx = vec1.X - vec2.X; float dy = vec1.Y - vec2.Y; float dz = vec1.Z - vec2.Z; return (float)Math.Sqrt(dx * dx + dy * dy + dz * dz); } public static Vector3 Zero() { return new Vector3(0, 0, 0); } }
阅读全文
0 0
- 常用的3d向量方法,根据《3d数学基础:图形与游戏开发》中第六章改写的c#版
- 3D数学基础 图形与游戏开发的学习 第四章 向量
- 3D数学基础:图形与游戏开发(第6章3D向量类)笔记
- 3D数学基础 图形与游戏开发的学习 (四)[2D笛卡尔数学]
- 推荐一本3D基础的书----《3D数学基础图形与游戏开发》
- 3D数学基础 图形与游戏开发的学习 (五) [3D坐标系]
- 3D数学基础 图形与游戏开发的学习 第三章 多坐标系
- 3D数学基础,图形与游戏开发笔记3
- <<3D数学基础:图形与游戏开发>>读后感
- 3D数学基础:图形与游戏开发_读书笔记
- 《3D数学基础:图形与游戏开发》读后感
- 3D数学基础,图形与游戏开发笔记1
- 3D数学基础,图形与游戏开发笔记2
- 3D数学基础图形与游戏开发之 坐标系
- 3D数学基础:图形与游戏开发》阅读感言
- 3D数学基础图形与游戏开发之坐标系
- 《3D数学基础:图形与游戏开发 》
- 3D数学基础及图形与游戏开发的学习 (一)
- 动态规划——开餐馆
- 大数据的大价值:大数据五大成功案例深度解析
- java中几个概念的总结
- 包
- EasyNVR RTSP摄像机转HLS直播服务器中使用Onvif协议控制预置位
- 常用的3d向量方法,根据《3d数学基础:图形与游戏开发》中第六章改写的c#版
- jvm源码阅读笔记[7]-从jstat -gccause命令谈到jvm中都有哪些GC cause
- Docker的基本命令和Dockerfile的指令
- redis中事务(Transaction)的使用
- 编写优质嵌入式C程序
- Netty实战读书笔记三:EventLoop和线程模型
- CUDA中Block大小的选择
- 32位电脑和64位电脑的区别
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 L. The Heaviest Non-decreasing Subsequence Problem