向量的基本运算专题

article/2025/10/23 2:34:05

关于向量

高中数学必修 4 4 4说:

几何向量是线性空间中有大小与方向的量。

放图理解一下:

如上图所示,向量可以形象的用一根箭头表示。箭头所指代表向量的方向,线段的长度代表向量的大小。

O I OI OI中,我们简化了一下向量的存储方式及运算法则,我们定义向量为起点为 ( 0 , 0 ) (0,0) (0,0)的一条有方向的线段。由于我们在考虑向量时只考虑其大小与方向,一般不考虑具体位置,故我们将向量平移至坐标系原点处以简化运算。

所以,在之后的讲解中,我们默认向量和点已经被存在了一个结构体里面(向量和点记录的东西都是一个坐标):

struct Point{double x,y;  //注意这个double
};

如果想分清楚具体是点还是向量,那么只需要在结构体后加入一句:

typedef Point Vector;

这样我们就可以只开一个结构体而做到存储两种量。

tips:如果您觉得只用Point即可,那么请将后文的Vector全部视为Point(这样写出来也没有任何问题)

向量的运算法则(具体原理请查阅数学必修 4 4 4

前置:模长

∣ A ∣ |A| A表示向量 A A A的长度,为一个数。

double Length(const Vector &p){return sqrt(p.x*p.x+p.y*p.y);
}
前置:向量的方向


(请暂且忽略 B B B以及 β 和 γ \beta和\gamma βγ,后面要用)
我们设向量 A A A ( x , y ) (x,y) (x,y),那么
c o s ( α ) = s i n ( 9 0 。 − α ) = x ∣ A ∣ cos(\alpha)=sin(90^。-\alpha)=\frac{x}{|A|} cos(α)=sin(90α)=Ax
s i n ( α ) = c o s ( 9 0 。 − α ) = y ∣ A ∣ sin(\alpha)=cos(90^。-\alpha)=\frac{y}{|A|} sin(α)=cos(90α)=Ay
那么,我们定义向量 A A A的方向为 w ( c o s ( α ) , s i n ( α ) ) 。 w(cos(\alpha),sin(\alpha))。 w(cos(α),sin(α))

点±向量=点
//所有的重载运算符都定义在结构体外部,如果不重载运算符的话会很麻烦
Point operator + (const Point &p,const Vector &q){return (Point){p.x+q.x,p.y+q.y};
}
Point operator - (const Point &p,const Vector &q){return (Point){p.x-q.x,p.y-q.y};
}
点-点=向量
Vector operator - (const Point &p,const Point &q){return (Vector){p.x-q.x,p.y-q.y};
}

友情提示:两个减的操作只需要写一个,如果实在看不顺眼,那么就讲其中一个减号改为另外一个不相冲突的符号。

点+点无意义
向量*常数=向量
Vector operator * (const Vector &p,const double &k){//double很重要!!!return (Vector){p.x*k,p.y*k};
}
向量/常数=向量
Vector operator / (const Vector &p,const double &k){return (Vector){p.x/k,p.y/k};
}
向量±向量=向量

代码同点±向量

向量的点积

令向量 X = ( x 1 , x 2 ) , Y = ( y 1 , y 2 ) , X=(x_1,x_2),Y=(y_1,y_2), X=(x1,x2),Y=(y1,y2),则有:

定义式: X ⋅ Y = ∣ X ∣ ∣ Y ∣ c o s ( γ ) X\cdot Y=|X||Y|cos(\gamma) XY=XYcos(γ),其中 γ \gamma γ X , Y X,Y X,Y的夹角

但更通用的是这样一个式子: X ⋅ Y = ∣ X ∣ ∣ Y ∣ c o s ( γ ) = x 1 y 1 + x 2 y 2 X\cdot Y=|X||Y|cos(\gamma)=x_1y_1+x_2y_2 XY=XYcos(γ)=x1y1+x2y2

double Dot (const Vector &p,const Vector &q){return p.x*q.x+p.y*q.y;
}
几何意义:A在B所在方向的投影的模长和B的模长的乘积
tips:如果向量 A , B A,B A,B的点积为 0 0 0,则 A , B A,B A,B垂直

证明如下:

我们有上面讲到的向量的方向可知,
c o s ( α ) = x 1 ∣ X ∣ , s i n ( α ) = x 2 ∣ Y ∣ cos(\alpha)=\frac{x_1}{|X|},sin(\alpha)=\frac{x_2}{|Y|} cos(α)=Xx1,sin(α)=Yx2
c o s ( β ) = y 1 ∣ X ∣ , s i n ( β ) = y 2 ∣ Y ∣ cos(\beta)=\frac{y_1}{|X|},sin(\beta)=\frac{y_2}{|Y|} cos(β)=Xy1,sin(β)=Yy2
γ = α − β \gamma=\alpha-\beta γ=αβ得:
c o s ( γ ) = c o s ( α − β ) cos(\gamma)=cos(\alpha-\beta) cos(γ)=cos(αβ)
由数学必修4上一个著名公式得:
c o s ( γ ) = c o s ( α − β ) = c o s ( β ) c o s ( α ) + s i n ( β ) s i n ( α ) cos(\gamma)=cos(\alpha-\beta)=cos(\beta)cos(\alpha)+sin(\beta)sin(\alpha) cos(γ)=cos(αβ)=cos(β)cos(α)+sin(β)sin(α)
c o s ( γ ) = x 1 ∣ X ∣ × y 1 ∣ Y ∣ + x 2 ∣ X ∣ × y 2 ∣ Y ∣ cos(\gamma)=\frac{x_1}{|X|}\times\frac{y_1}{|Y|}+\frac{x_2}{|X|}\times\frac{y_2}{|Y|} cos(γ)=Xx1×Yy1+Xx2×Yy2
c o s ( γ ) = x 1 y 1 + x 2 y 2 ∣ X ∣ ∣ Y ∣ cos(\gamma)=\frac{x_1y_1+x_2y_2}{|X||Y|} cos(γ)=XYx1y1+x2y2
X ⋅ Y = ∣ X ∣ ∣ Y ∣ c o s ( γ ) = x 1 y 1 + x 2 y 2 X\cdot Y=|X||Y|cos(\gamma)=x_1y_1+x_2y_2 XY=XYcos(γ)=x1y1+x2y2

向量的叉积

定义式: X ∗ Y = ∣ X ∣ ∣ Y ∣ s i n ( γ ) X*Y=|X||Y|sin(\gamma) XY=XYsin(γ)

通用的式子: X ∗ Y = ∣ X ∣ ∣ Y ∣ s i n ( γ ) = x 1 y 2 − x 2 y 1 X*Y=|X||Y|sin(\gamma)=x_1y_2-x_2y_1 XY=XYsin(γ)=x1y2x2y1

double Cross (const Vector &p,const Vector &q){return p.x*q.y-q.x*p.y;
}

证明大体同上,需要用到另一个著名的式子:

s i n ( α − β ) = s i n ( α ) c o s ( β ) − c o s ( α ) s i n ( β ) sin(α-β)=sin(α)cos(β)-cos(α)sin(β) sin(αβ)=sin(α)cos(β)cos(α)sin(β)

几何意义:A转到B所夹平行四边形的有向面积

简单地解释一下:

A , B A,B A,B不共线的情况下,如果 A A A B B B上面,那么它们的叉积就小于 0 , 0, 0,反之则大于 0 0 0

如果 A , B A,B A,B共线,那么它们的叉积就等于 0 0 0

基础运算完整代码

struct Point{double x,y;
};
typedef Point Vector; 
Point operator + (const Point &p,const Vector &q){return (Point){p.x+q.x,p.y+q.y};
}
Vector operator - (const Point &p,const Point &q){return (Vector){p.x-q.x,p.y-q.y};
}
Vector operator * (const Vector &p,const double &k){return (Vector){p.x*k,p.y*k};
}
Vector operator / (const Vector &p,const double &k){return (Vector){p.x/k,p.y/k};
}
double Dot (const Vector &p,const Vector &q){return p.x*q.x+p.y*q.y;
}
double Cross (const Vector &p,const Vector &q){return p.x*q.y-q.x*p.y;
}
double Length(const Vector &p){return sqrt(Dot(p,p));
}

http://chatgpt.dhexx.cn/article/rKK7uA4R.shtml

相关文章

向量加减法

常用向量&#xff1a; 2D向量 v < x , y > 3D向量 v < x , y , z > 4D向量 v < x , y , z , w > (也称作齐次坐标) 向量加减法&#xff0c;各维度都是类似的。 向量加法&#xff1a; 向量加法的和就是以两个向量的边作为平行四边形长边的对角线表示 …

两个向量的点乘和叉乘怎么算_数学基础 —— 向量运算:点乘和叉乘

向量的点乘:a * b 公式&#xff1a;a * b |a| * |b| * cosθ 点乘又叫向量的内积、数量积&#xff0c;是一个向量和它在另一个向量上的投影的长度的乘积&#xff1b;是标量。 点乘反映着两个向量的“相似度”&#xff0c;两个向量越“相似”&#xff0c;它们的点乘越大。 向量…

向量的运算

向量 有大小&#xff0c;有方向的量&#xff0c;记为 a ⃗ \vec{a} a 基本运算 向量的加法 首尾相连法则(当然还有其他名字:平行四边形法则、三角形法则) 如图 a ⃗ b ⃗ \vec{a}\vec{b} a b 就相当于将 b ⃗ \vec{b} b 的起点平移到 a ⃗ \vec{a} a 的终点( a ⃗ 、 b ⃗…

数学基础 —— 向量运算(叉乘)

向量的叉乘&#xff0c;即求同时垂直两个向量的向量&#xff0c;即c垂直于a&#xff0c;同时c垂直于b&#xff08;a与c的夹角为90&#xff0c;b与c的夹角为90&#xff09; c ab &#xff08;a.y*b.z-b.y*a.z , b.x*a.z-a.x*b.z , a.x*b.y-b.x*a.y&#xff09; 以上图为例a…

向量化运算

向量化运算OLAP Clickhouse、dorisDB(starrocks)、spark(2.x以后)、 hive&#xff08;0.13.0以后&#xff09;、presto SIMD SIMD全称Single Instruction Multiple Data&#xff0c;单指令多数据流&#xff0c;能够复制多个操作数&#xff0c;并把它们打包在大型寄存器的一组…

常用的几种向量运算法则

a ⋅ b b ⋅ a ab ba a⋅bb⋅a a ( b ⋅ c ) ≠ ( a ⋅ b ) c a(bc)≠(ab)c a(b⋅c)​(a⋅b)c ( a b ) ⋅ c a ⋅ c b ⋅ c (ab)c acbc (ab)⋅ca⋅cb⋅c a b − b a ab - ba ab−ba ( r a ) b a ( r b ) r ( a b ) , 其 中 r 是 标 量 (ra)ba(rb)r(ab),其中r是…

空间向量及其运算

平面内任意向量 p \boldsymbol{p} p都可以用两个不共线的向量 a \boldsymbol{a} a b \boldsymbol{b} b来表示&#xff0c;这是平面向量的基本定理。类似的我们定义&#xff0c;如果三个向量不共面&#xff0c;那么对空间中的任一向量 p \boldsymbol{p} p&#xff0c;存在有序实…

数学-向量运算

1、外积&#xff08;差乘&#xff09; 定义&#xff1a;向量a与b的外积ab是一个向量&#xff0c;其长度等于|ab| |a||b|sin∠(a,b)&#xff0c;其方向正交于a与b。并且&#xff0c;(a,b,ab)构成右手系。 特别地&#xff0c;0a a0 0.此外&#xff0c;对任意向量a&#xff0c…

向量

向量对数学家是数字列表 向量对程序员是数组 数学上区分向量和标量 速度和位移是向量&#xff0c;速率和长度是标量 向量的维度&#xff1a;数的个数 写法&#xff1a;横着写行向量&#xff0c;竖着写列向量 几何意义 大小&#xff1a;向量的长度 方向&#xff1a;空间中的…

MATLAB——向量的运算

文章目录 一.向量的定义&#xff1a;***向量的生成方法&#xff1a;直接输入法、冒号法和利用MATLAB函数创建三种方法。*** 二.向量元素的引用&#xff1a;三.向量的定义与赋值&#xff1a;四.向量的点积运算&#xff1a;向量的叉积&#xff1a;向量的混合积&#xff1a; 一.向…

【math】 向量运算:叉乘

文章目录 1 定义2 几何意义3 拓展应用 1 定义 cab 向量的叉乘&#xff0c;即求同时垂直两个向量的向量&#xff0c;即c垂直于a&#xff0c;且c垂直于b。 假设向量a(a.x,a.y,a.z),b(b.x,b.y,b.z),c(c.x,c.y,c.z)&#xff0c; 则cab(a.x,a.y,a.z)(b.x,b.y,b.z)(a.y * b.z - a…

了解向量运算

了解向量运算 向量运算是制作三维图形、物理和动画的基础&#xff0c;深入了解向量运算有助于充分利用 Unity 的大部分功能。下方介绍了主要的向量运算方法&#xff0c;以及将向量运算用于多种用途时的建议。 加法 两向量相加的值等于将两个向量首尾相接&#xff0c;以原向量为…

向量的基本运算

向量是什么 向量就是给定一个点A&#xff0c;连接原点到点A&#xff0c;并具有由O到A方向的连线&#xff0c;表示为 O A ⃗ \vec{OA} OA . 书本的定义&#xff1a;向量就是具有大小和方向东西。 大小(magnitude) 向量的大小(magnitude)写作 ∥ x ∥ \Vert x \Vert ∥x∥,称为…

向量运算

零向量 任意一维都是0的向量&#xff0c;例如[0&#xff0c;0&#xff0c;0]&#xff0c;3D零向量。 零向量是唯一大小为零的向量&#xff0c;也是唯一一个没有方向的向量。但不是点&#xff0c;只是没有位移。 负向量 要得到任意向量的负向量&#xff0c;只需要简单的将向量…

利用websocket实现群聊以及单聊

利用websocket实现群聊以及单聊 项目结构实现代码运行截图 在这里提供一下思路&#xff0c;正常情况下我们登陆进去之后就应该打开一个ws连接&#xff0c;以便和服务器进行通信&#xff0c;将打开的管道用一个set容器进行存储&#xff0c;并将用户名或者其他能唯一标示用户的字…

Java实现钉钉自定义群聊机器人

参考文档&#xff1a; 自定义机器人接入 - 钉钉开放平台https://open.dingtalk.com/document/orgapp/custom-robot-access 自定义机器人安全设置 - 钉钉开放平台目前有3种安全设置方式&#xff0c;请根据需要选择一种。https://open.dingtalk.com/document/robots/customize-ro…

Netty基础,Netty实现群聊系统

NIO群聊系统 这里面的知识比较全面&#xff0c;用到了我们之前学习的三大组件&#xff0c;首先我先来给大家介绍本系统的功能 服务端功能 最基本的当然是注册功能&#xff0c;也就是将serverSocketChannel注册进Selector&#xff0c;Selector负责调度事件 监听、读取客户端…

c语言 多进程实现基于UDP的网络群聊聊天室

功能 有新用户登录&#xff0c;其他在线的用户可以收到登录信息 有用户群聊&#xff0c;其他在线的用户可以收到群聊信息 有用户退出&#xff0c;其他在线的用户可以收到退出信息 服务器可以发送系统信息 流程图如下&#xff1a; 提示&#xff1a; 客户端登录之后&#x…

Spring Boot使用WebSocket实现群聊

1.通过https://start.aliyun.com创建一个spring boot项目 https://start.aliyun.com 所需依赖&#xff1a; 2.编写代码 目录&#xff1a; WebMvcConfig&#xff0c;监控用户页面&#xff1a; package com.example.mywbsk.config;import org.springframework.context.annotat…

网络编程 : 基于UDP的网络群聊聊天室

一、UDP网络编程: 1.1 流程 服务器流程: 创建用户数据报套接字 填充服务器的网络信息结构体 绑定套接字与服务器网络信息结构体 收发数据 关闭套接字 客户端流程&#xff1a; 创建用户数据报套接字 填充服务器的网络信息结构体 收发数据 关闭套接字 二、基于UDP的网络群聊聊天…