能否写出sin@的详细求解过程(是不是matlab向量叉乘的叉乘仅

向量&-&向量叉乘&向量点乘(转)
向量(Vector)在几乎所有的几何问题中,向量(有时也称矢量)是一个基本点。向量的定义包含方向和一个数(长度)。在二维空间中,一个向量可以用一对x和y来表示。例如由点(1,3)到(5,1的向量可以用(4,-2)来表示。这里大家要特别注意,我这样说并不代表向量定义了起点和终点。向量仅仅定义方向和长度。
向量也支持各种数学运算。最简单的就是加法。我们可以对两个向量相加,得到的仍然是一个向量。我们有:
&&& V1(x1,
y1)+V2(x2, y2)=V3(x1+x2, y1+y2)
下图表示了四个向量相加。注意就像普通的加法一样,相加的次序对结果没有影响(满足交换律),减法也是一样的。
点乘(Dot Product)
如果说加法是凭直觉就可以知道的,另外还有一些运算就不是那么明显的,比如点乘和叉乘。
点乘比较简单,是相应元素的乘积的和:
&&& V1( x1,
y1)&& V2(x2, y2) = x1*x2 +
注意结果不是一个向量,而是一个标量(Scalar)。点乘有什么用呢,我们有:
A&& B = |A||B|Cos(θ)
θ是向量A和向量B见的夹角。这里|A|我们称为向量A的模(norm),也就是A的长度,&在二维空间中就是|A|
= sqrt(x2+y2)。这样我们就和容易计算两条线的夹角:
&&& Cos(θ) =
A&& B /(|A||B|)
当然你知道要用一下反余弦函数acos()啦。(回忆一下cos(90)=0&和cos(0) =
1还是有好处的,希望你没有忘记。)这可以告诉我们如果点乘的结果,简称点积,为0的话就表示这两个向量垂直。当两向量平行时,点积有最大值
另外,点乘运算不仅限于2维空间,他可以推广到任意维空间。(译注:不少人对量子力学中的高维空间无法理解,其实如果你不要试图在视觉上想象高维空间,而仅仅把它看成三维空间在数学上的推广,那么就好理解了)
叉乘(cross product)
相对于点乘,叉乘可能更有用吧。2维空间中的叉乘是:
&&& V1(x1, y1) X
V2(x2, y2) = x1y2 & y1x2
看起来像个标量,事实上叉乘的结果是个向量,方向在z轴上。上述结果是它的模。在二维空间里,让我们暂时忽略它的方向,将结果看成一个向量,那么这个结果类似于上述的点积,我们有:
&&& A x B =
|A||B|Sin(θ)
然而角度&θ和上面点乘的角度有一点点不同,他是有正负的,是指从A到B的角度。下图中&θ为负。
另外还有一个有用的特征那就是叉积的绝对值就是A和B为两边说形成的平行四边形的面积。也就是AB所包围三角形面积的两倍。在计算面积时,我们要经常用到叉积。
(译注:三维及以上的叉乘参看维基:http://en.wikipedia.org/wiki/Cross_product)
找出一个点和一条线间的距离是经常遇见的几何问题之一。假设给出三个点,A,B和C,你想找出点C到点A、B定出的直线间距离。第一步是找出A到B的向量AB和A到C的向量AC,现在我们用该两向量的叉积除以|AB|,这就是我们要找的的距离了(下图中的红线)。
&&& d = (AB x
如果你有基础的高中几何知识,你就知道原因了。上一节我们知道(AB X
AC)/2是三角形ABC的面积,这个三角形的底是|AB|,高就是C到AB的距离。有时叉积得到的是一个负值,这种情况下距离就是上述结果的绝对值。
当我们要找点到线段的距离时,情况变得稍稍复杂一些。这时线段与点的最短距离可能是点到线段的某一端点,而不是点到直线的垂线。例如上图中点C到线段AB的最短距离应该是线段BC。我们有集中不同的方法来判断这种特殊情况。第一种情况是计算点积AB
Bc来判定两线段间夹角。如果点积大于等于零,那么表示AB到BC是在-90到90度间,也就是说C到AB的垂线在AB外,那么AB上到C距离最近的点就是B。同样,如果BAAC大于等于零,那么点A就是距离C最近的点。如果两者均小于零,那么距离最近的点就在线段AB中的莫一点。
源代码参考如下:
//Compute the dot product AB&&
int dot(int[] A, int[] B, int[] C){
AB = new int[2];
BC = new int[2];
AB[0] = B[0]-A[0];
AB[1] = B[1]-A[1];
BC[0] = C[0]-B[0];
BC[1] = C[1]-B[1];
int dot = AB[0] * BC[0] + AB[1] * BC[1];
//Compute the cross product AB x AC
int cross(int[] A, int[] B, int[] C){
AB = new int[2];
AC = new int[2];
AB[0] = B[0]-A[0];
AB[1] = B[1]-A[1];
AC[0] = C[0]-A[0];
AC[1] = C[1]-A[1];
int cross = AB[0] * AC[1] - AB[1] * AC[0];
//Compute the distance from A to B
double distance(int[] A, int[] B){
int d1 = A[0] - B[0];
int d2 = A[1] - B[1];
return sqrt(d1*d1+d2*d2);
//Compute the distance from AB to C
//if isSegment is true, AB is a segment, not a line.
double linePointDist(int[] A, int[] B, int[] C, boolean
isSegment){
double dist = cross(A,B,C) / distance(A,B);
if(isSegment){
&&&&&&&&&&&&
int dot1 = dot(A,B,C);
&&&&&&&&&&&&
if(dot1 & 0)return distance(B,C);
&&&&&&&&&&&&
int dot2 = dot(B,A,C);
&&&&&&&&&&&&
if(dot2 & 0)return distance(A,C);
return abs(dist);
上面的代码看起来似乎是很繁琐。不过我们可以看看在C++和C#中,采用了运算符重载的类point,用‘*’代表点乘,用'^'代表叉乘(当然'+''-'还是你所希望的),那么看起来就简单些,代码如下:
&& //Compute the distance from AB
//if isSegment is true, AB is a segment, not a line.
double linePointDist(point A, point B, point C, bool
isSegment){
double dist = ((B-A)^(C-A)) / sqrt((B-A)*(B-A));
if(isSegment){
&&&&&&&&&&&&
int dot1 = (C-B)*(B-A);
&&&&&&&&&&&&
if(dot1 & 0)return sqrt((B-C)*(B-C));
&&&&&&&&&&&&
int dot2 = (C-A)*(A-B);
&&&&&&&&&&&&
if(dot2 & 0)return sqrt((A-C)*(A-C));
return abs(dist);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。在数学中,数量积( scalar product,也称为点积)是接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是的标准。
设二维空间内有两个向量&和&定义它们的数量积(又叫内积、点积)为以下实数:
更一般地,n维向量的内积定义如下:
设二维空间内有两个向量&和&&,它们的夹角为&,则内积定义为以下实数:
该定义只对二维和三维空间有效。
u的大小、v的大小、u,v夹角的余弦。在u,v非零的前提下,点积如果为负,则u,v形成的角大于90度;如果为零,那么u,v垂直;如果为正,那么u,v形成的角为锐角。
两个单位向量的点积得到两个向量的夹角的cos值,通过它可以知道两个向量的相似性,利用点积可判断一个多边形是否面向摄像机还是背向摄像机。
向量的点积与它们夹角的余弦成正比,因此在聚光灯的效果计算中,可以根据点积来得到光照效果,如果点积越大,说明夹角越小,则物理离光照的轴线越近,光照越强。
结合律:&,其中m是实数。
向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量和垂直。
两个向量a和b的叉积写作a×b(有时也被写成a∧b,避免和字母x混淆)。
向量积可以被定义为:
模长:(在这里θ表示两向量之间的夹角(共起点的前提下)(0° ≤ θ ≤ 180°),它位于这两个矢量所定义的平面上。)
方向:a向量与b向量的向量积的方向与这两个向量所在平面垂直,且遵守右手定则。(一个简单的确定满足“右手定则”的结果向量的方向的方法是这样的:若坐标系是满足右手定则的,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。)
也可以这样定义(等效):
向量积|c|=|a×b|=|a| |b|sin&a,b&
即c的长度在数值上等于以a,b,夹角为θ组成的平行四边形的面积。
而c的方向垂直于a与b所决定的平面,c的指向按右手定则从a转向b来确定。
*运算结果c是一个伪向量。这是因为在不同的坐标系中c可能不同。
几何意义及其运用
叉积的长度 |a×b| 可以解释成这两个叉乘向量a,b共起点时,所构成平行四边形的面积。据此有:
混合积 [a&b&c] = (a×b)·c可以得到以a,b,c为棱的平行六面体的体积。
反交换律:
a×b= -b×a
加法的分配律:
a× (b+c) =a×b+a×c
与标量乘法兼容:
(ra) ×b=a× (rb) = r(a×b)
不满足结合律,但满足:
a× (b×c) +b× (c×a) +c× (a×b) =0
分配律,线性性和雅可比恒等式别表明:具有向量加法和叉积的 R3 构成了一个李代数。
两个非零向量a和b平行,当且仅当a×b=0
拉格朗日公式
这是一个著名的公式,而且非常有用:
a×(b×c)=b(a·c) -c(a·b),
证明过程如下:
二重向量叉乘化简公式及证明
可以简单地记成“BAC - CAB”。这个公式在物理上简化向量运算非常有效。需要注意的是,这个公式对不成立。
这里给出一个和梯度相关的一个情形:
这是一个霍奇的霍奇分解 的特殊情形。
另一个有用的恒等式是:
这是一个在代数中乘法 | vw | = | v | | w | 的特殊情形。
在物理学光学和计算机图形学中,叉积被用于求物体光照相关问题。
求解光照的核心在于求出物体表面法线,而叉积运算保证了只要已知物体表面的两个非平行矢量(或者不在同一直线的三个点),就可依靠叉积求得法线。
阅读(...) 评论()数论(18)
向量&-&向量叉乘&向量点乘
日&星期三&14:33
向量(Vector)
在几乎所有的几何问题中,向量(有时也称矢量)是一个基本点。向量的定义包含方向和一个数(长度)。在二维空间中,一个向量可以用一对x和y来表示。例如由点(1,3)到(5,1的向量可以用(4,-2)来表示。这里大家要特别注意,我这样说并不代表向量定义了起点和终点。向量仅仅定义方向和长度。
向量也支持各种数学运算。最简单的就是加法。我们可以对两个向量相加,得到的仍然是一个向量。我们有:
&&& V1(x1, y1)+V2(x2, y2)=V3(x1+x2, y1+y2)
下图表示了四个向量相加。注意就像普通的加法一样,相加的次序对结果没有影响(满足交换律),减法也是一样的。
点乘(Dot Product)
如果说加法是凭直觉就可以知道的,另外还有一些运算就不是那么明显的,比如点乘和叉乘。
点乘比较简单,是相应元素的乘积的和:
&&& V1( x1, y1)&& V2(x2, y2) = x1*x2 + y1*y2
注意结果不是一个向量,而是一个标量(Scalar)。点乘有什么用呢,我们有:
&&& A&& B = |A||B|Cos(θ)
θ是向量A和向量B见的夹角。这里|A|我们称为向量A的模(norm),也就是A的长度,&在二维空间中就是|A| = sqrt(x2+y2)。这样我们就和容易计算两条线的夹角:
&&& Cos(θ) = A&& B /(|A||B|)
当然你知道要用一下反余弦函数acos()啦。(回忆一下cos(90)=0&和cos(0) = 1还是有好处的,希望你没有忘记。)这可以告诉我们如果点乘的结果,简称点积,为0的话就表示这两个向量垂直。当两向量平行时,点积有最大值
另外,点乘运算不仅限于2维空间,他可以推广到任意维空间。(译注:不少人对量子力学中的高维空间无法理解,其实如果你不要试图在视觉上想象高维空间,而仅仅把它看成三维空间在数学上的推广,那么就好理解了)
叉乘(cross product)
相对于点乘,叉乘可能更有用吧。2维空间中的叉乘是:
&&& V1(x1, y1) X V2(x2, y2) = x1y2 – y1x2
看起来像个标量,事实上叉乘的结果是个向量,方向在z轴上。上述结果是它的模。在二维空间里,让我们暂时忽略它的方向,将结果看成一个向量,那么这个结果类似于上述的点积,我们有:
&&& A x B = |A||B|Sin(θ)
然而角度&θ和上面点乘的角度有一点点不同,他是有正负的,是指从A到B的角度。下图中&θ为负。(顺时针为负,逆时针为正)
另外还有一个有用的特征那就是叉积的绝对值就是A和B为两边说形成的平行四边形的面积。也就是AB所包围三角形面积的两倍。在计算面积时,我们要经常用到叉积。
(译注:三维及以上的叉乘参看维基:http://en.wikipedia.org/wiki/Cross_product)
找出一个点和一条线间的距离是经常遇见的几何问题之一。假设给出三个点,A,B和C,你想找出点C到点A、B定出的直线间距离。第一步是找出A到B的向量AB和A到C的向量AC,现在我们用该两向量的叉积除以|AB|,这就是我们要找的的距离了(下图中的红线)。
&&& d = (AB x AC)/|AB|&
如果你有基础的高中几何知识,你就知道原因了。上一节我们知道(AB X AC)/2是三角形ABC的面积,这个三角形的底是|AB|,高就是C到AB的距离。有时叉积得到的是一个负值,这种情况下距离就是上述结果的绝对值。
当我们要找点到线段的距离时,情况变得稍稍复杂一些。这时线段与点的最短距离可能是点到线段的某一端点,而不是点到直线的垂线。例如上图中点C到线段AB的最短距离应该是线段BC。我们有集中不同的方法来判断这种特殊情况。第一种情况是计算点积AB Bc来判定两线段间夹角。如果点积大于等于零,那么表示AB到BC是在-90到90度间,也就是说C到AB的垂线在AB外,那么AB上到C距离最近的点就是B。同样,如果BAAC大于等于零,那么点A就是距离C最近的点。如果两者均小于零,那么距离最近的点就在线段AB中的莫一点。
源代码参考如下:
&&&& //Compute the dot product AB&& BC
&&&& int dot(int[] A, int[] B, int[] C){
&&&&&&&& AB = new int[2];
&&&&&&&& BC = new int[2];
&&&&&&&& AB[0] = B[0]-A[0];
&&&&&&&& AB[1] = B[1]-A[1];
&&&&&&&& BC[0] = C[0]-B[0];
&&&&&&&& BC[1] = C[1]-B[1];
&&&&&&&& int dot = AB[0] * BC[0] + AB[1] * BC[1];
&&&& //Compute the cross product AB x AC
&&&& int cross(int[] A, int[] B, int[] C){
&&&&&&&& AB = new int[2];
&&&&&&&& AC = new int[2];
&&&&&&&& AB[0] = B[0]-A[0];
&&&&&&&& AB[1] = B[1]-A[1];
&&&&&&&& AC[0] = C[0]-A[0];
&&&&&&&& AC[1] = C[1]-A[1];
&&&&&&&& int cross = AB[0] * AC[1] - AB[1] * AC[0];
&&&& //Compute the distance from A to B
&&&& double distance(int[] A, int[] B){
&&&&&&&& int d1 = A[0] - B[0];
&&&&&&&& int d2 = A[1] - B[1];
&&&&&&&& return sqrt(d1*d1+d2*d2);
&&&& //Compute the distance from AB to C
&&&& //if isSegment is true, AB is a segment, not a line.
&&&& double linePointDist(int[] A, int[] B, int[] C, boolean isSegment){
&&&&&&&& double dist = cross(A,B,C) / distance(A,B);
&&&&&&&& if(isSegment){
&&&&&&&&&&&& int dot1 = dot(A,B,C);
&&&&&&&&&&&& if(dot1 & 0)return distance(B,C);
&&&&&&&&&&&& int dot2 = dot(B,A,C);
&&&&&&&&&&&& if(dot2 & 0)return distance(A,C);
&&&&&&&& }
&&&&&&&& return abs(dist);
上面的代码看起来似乎是很繁琐。不过我们可以看看在C++和C#中,采用了运算符重载的类point,用‘*’代表点乘,用'^'代表叉乘(当然'+''-'还是你所希望的),那么看起来就简单些,代码如下:
&& //Compute the distance from AB to C
&&&& //if isSegment is true, AB is a segment, not a line.
&&&& double linePointDist(point A, point B, point C, bool isSegment){
&&&&&&&& double dist = ((B-A)^(C-A)) / sqrt((B-A)*(B-A));
&&&&&&&& if(isSegment){
&&&&&&&&&&&& int dot1 = (C-B)*(B-A);
&&&&&&&&&&&& if(dot1 & 0)return sqrt((B-C)*(B-C));
&&&&&&&&&&&& int dot2 = (C-A)*(A-B);
&&&&&&&&&&&& if(dot2 & 0)return sqrt((A-C)*(A-C));
&&&&&&&& }
&&&&&&&& return abs(dist);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:606778次
积分:11105
积分:11105
排名:第1244名
原创:475篇
转载:323篇
评论:23条
(1)(16)(3)(41)(24)(37)(51)(54)(82)(92)(142)(96)(110)(16)(6)(27)君,已阅读到文档的结尾了呢~~
向量_-_向量叉乘_向量点乘[精华]
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
向量_-_向量叉乘_向量点乘[精华]
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口61886人阅读
。这里:。如果点积大于等于零,那么表示
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:268171次
积分:2421
积分:2421
排名:第13823名
原创:43篇
转载:20篇
评论:37条
(1)(1)(1)(1)(2)(1)(3)(1)(1)(1)(1)(2)(4)(1)(1)(5)(3)(2)(2)(2)(1)(2)(9)(8)(6)(1)(1)

我要回帖

更多关于 向量叉乘公式 的文章

 

随机推荐