Unity3D-向量运算-加减点乘叉乘

1.加

矢量叠加


2.减

终点坐标减去起点坐标(减数指向被减数)


3.点乘,点积,标量积,内积

(1)定义

每对分量乘积之和:a·b=axbx+ayby+azbz

两模相乘再乘于夹角余弦:a·b=|a||b|cosθ

(2)矢量投影

u为单位向量

a·u为a在u方向上的投影长度

(3)点积判定

共线:a·b=|a||b|=ab

共线反向:a·b=-ab

垂直:a·b=0

同向:a·b>0

反向:a·b<0

(4)应用

求敌人在玩家的方位

求一点到某平面的高度


4.叉乘

(1)定义

垂直于两向量的向量:a×b=[(aybz-azby),(azbx-axbz),(axby-aybx)]=(aybz-azby)i+(azbx-axbz)j+(axby-aybx)k

(2)模

|a×b|=|a||b|sinθ,平行四边形面积

(3)右手法则

四指指向a方向,向b方向握拳,拇指指向叉乘的方向

(4)应用

求法向量,求力矩

以下是一个简单的C++三维向量类的示例代码,包含了向量加、减、点乘叉乘运算: ```cpp #include <iostream> #include <cmath> using namespace std; class Vector3D { public: Vector3D() : x(0), y(0), z(0) {} Vector3D(double x, double y, double z) : x(x), y(y), z(z) {} Vector3D operator+(const Vector3D& v) const { return Vector3D(x + v.x, y + v.y, z + v.z); } Vector3D operator-(const Vector3D& v) const { return Vector3D(x - v.x, y - v.y, z - v.z); } double operator*(const Vector3D& v) const { return x * v.x + y * v.y + z * v.z; } Vector3D operator^(const Vector3D& v) const { return Vector3D(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); } double length() const { return sqrt(x * x + y * y + z * z); } void normalize() { double len = length(); if (len != 0) { x /= len; y /= len; z /= len; } } void print() const { cout << "(" << x << ", " << y << ", " << z << ")" << endl; } private: double x, y, z; }; int main() { Vector3D v1(1, 2, 3); Vector3D v2(4, 5, 6); Vector3D v3 = v1 + v2; v3.print(); Vector3D v4 = v1 - v2; v4.print(); double dot_product = v1 * v2; cout << "Dot Product: " << dot_product << endl; Vector3D cross_product = v1 ^ v2; cross_product.print(); return 0; } ``` 该类实现了向量加、减、点乘叉乘运算,以及向量的长度归一化和输出功能。在主函数中,我们创建了两个三维向量v1和v2,并使用运算符重载实现了向量加、减、点乘叉乘运算。最后,我们输出了向量点乘叉乘结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值