`
micheal19840929
  • 浏览: 163155 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

内积与外积

阅读更多

      电脑做运算时,常会有浮点数误差的问题。为避免浮点数误差的问题,用电脑计算几何问题时,会採用不同于一般数学运算时所用的公式和定理。
      内积(inner product、dot product)、外积(outer product、cross product)这两个运算只用了加法和乘法,而不包括除法,故能有效的避免除法所產生的浮点数误差。内积与外积有许多很有用的特性。大部分的几何问题,都可以用内积与外积来计算答案。
      此处仅作简单介绍。不失一般性,以下都用二维空间当作范例。

      内积与外积是向量运算,所以得设计一个向量的资料结构。

struct Vector {int x, y;};  // 二维向量的资料结构 
// 内积运算 
int dot(Vector& v1, Vector& v2) 
{ 
    return v1.x * v2.x + v1.y * v2.y;   // 没有除法,尽量避免误差。 
}
// 外积运算,回传纯量(除去方向) 
int cross(Vector& v1, Vector& v2) 
{ 
    return v1.x * v2.y - v1.y * v2.x;   // 没有除法,尽量避免误差。 
}
struct Vector {int x, y;};	// 二维向量的资料结构
// 内积运算
int dot(Vector& v1, Vector& v2)
{
	return v1.x * v2.x + v1.y * v2.y;	// 没有除法,尽量避免误差。
}
// 外积运算,回传纯量(除去方向)
int cross(Vector& v1, Vector& v2)
{
	return v1.x * v2.y - v1.y * v2.x;	// 没有除法,尽量避免误差。
}

 

      向量资料结构拥有一个座标,并拥有一支内积函式与一支外积函式。
      两个向量做内积的结果是一个纯量。两个向量做外积的结果为一个向量,然而我们通常只会用到纯量部份,所以让外积函式的回传值为纯量。

 

内积、外积跟长度的关係


      内积后取绝对值,求得的是投影量,再除以投影标的的单位向量,则得到投影长度。
      外积后取绝对值,求得的是平行四边形的面积量,再除以底的单位向量,则得到高。

struct Point {double x, y;};    // 点的资料结构 
typedef Point Vector;           // 向量的资料结构,和点一样 
// 内积运算 
double dot(Vector& v1, Vector& v2) 
{ 
    return v1.x * v2.x + v1.y * v2.y; 
} 
// 外积运算,回传纯量(去除方向) 
double cross(Vector& v1, Vector& v2) 
{ 
    return v1.x * v2.y - v1.y * v2.x; 
} 
// 向量的长度 
double length(Vector& v) 
{ 
    return sqrt(v1.x * v1.x + v2.y * v2.y); 
//  return sqrt(dot(v, v)); 
} 
void print_d1_and_d2() 
{ 
    Point p, p1, p2; 
    Vector v1 = p1 - p, v2 = p2 - p; 
    cout << "d1:" << fabs(dot(v1, v2)) / length(v1); 
    cout << "d2:" << fabs(cross(v1, v2)) / length(v1); 
}

 

内积、外积跟角度的关系

void print_θ() 
{ 
    Point p, p1, p2; 
    Vector v1 = p1 - p, v2 = p2 - p; 
    double l1 = length(v1), l2 = length(v2); 
    cout << "cos(θ):" << dot(v1, v2) / l1 / l2; 
    cout << "sin(θ):" << cross(v1, v2) / l1 / l2; 
    cout << "θ:" << acos(dot(v1, v2) / l1 / l2);    // [0, π] 
    cout << "θ:" << asin(cross(v1, v2) / l1 / l2);  // [-π/2, π/2] 
}

 

      注意到acos与asin的回传值,回传的结果是弪度量(radian)而非度度量(grade),而且回传值的范围也不同。一般都以内积与acos求得介于0˚到180˚之间的夹角大小。

 

内积与向量夹角

      利用内积的性质,可以粗略判断夹角大小:内积大于0时,两向量夹角小于90˚;等于0时,夹角等于90˚;小于零时,夹角大于90˚且小于180˚。

 

外积与向量旋转

      外积大于0时,两向量前后顺序为逆时针顺序(在180˚之内);等于0时,两向量平行,也就是指夹角等于0˚或180˚;小于0时,两向量前后顺序为顺时针顺序(在180˚之内)。

转自:http://www.csie.ntnu.edu.tw/~u91029/VectorProduct.html

另外可参考:如何判断一个点是否在三角形内http://blog.csdn.net/xueyong1203/archive/2007/01/05/1474474.aspx

分享到:
评论

相关推荐

    数学中的内积和外积

    内积(inner product, scalar product,dot product) 根据翻译,内积又叫标量积、点积,还叫数量积。是指接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。 两个向量和的点积...

    统计建模与R软件课后习题答案2-5章.doc

    3. **向量内积与外积**:内积(点积)和外积是线性代数中的基本概念。在R中,`crossprod()`计算两个向量的内积,而`tcrossprod()`计算外积。内积返回一个标量,外积返回一个矩阵。例如`z1 = crossprod(x, y)`。 4. ...

    R语言中矩阵运算[参考].pdf

    4. 向量的内积与外积: - 内积:向量的内积可通过`%*%`操作符实现,例如`x %*% y`。另外,`crossprod()`函数也是内积运算的另一种形式,如`crossprod(x, y)`。 - 外积:外积可以用`%o%`操作符完成,例如`x %o% y`...

    R语言中矩阵运算.pdf

    - **向量的内积与外积** - **内积**:使用`%*%`运算符或`crossprod()`函数,如`x %*% y`计算两个向量的内积。 - **外积**:使用`%o%`运算符,如`x %o% y`计算两个向量的外积。`outer()`函数可以更灵活地计算外积...

    C++线性代数运算库 包含了矩阵的加法运算、减法运算、内积运算、外积运算等

    C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等。 C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等.zip

    C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等

    C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等。 C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等.zip

    线性代数复习资料和试卷

    3. 向量的内积与外积:内积(点积)定义了向量间的数量关系,外积(叉积)在三维空间中形成一个新的向量,具有正交性和右手定则特性。 4. 向量的线性组合与基:任何向量都可以表示为一组基向量的线性组合,基向量是...

    李永乐权威12题精讲必下

    2. **向量与空间**:向量的概念、向量的线性组合、向量的内积与外积、向量空间的基本性质、基与维数、子空间等。 3. **线性变换与坐标变换**:理解线性映射和线性变换,掌握坐标变换的计算,例如旋转、平移、缩放等...

    线性代数(同济第三版)

    2. **向量的内积与外积**:内积(点积)定义了两个向量之间的几何关系,结果是一个标量,表示两个向量的长度与夹角的余弦值。外积(叉积)在三维空间中定义,结果是一个新的向量,其方向垂直于原向量所在平面,长度...

    R语言总和性试验.pdf

    5. **向量与矩阵的内积与外积**:内积使用`%*%`运算符,如`a=t(x)%*%y`,外积可以使用`crossprod()`或`outer()`函数,如`b=crossprod(x,y)`,`f=outer(x,y)`。 6. **二分法求解非线性方程**:自定义函数`fzero()`...

    dotnet矩阵类库matrix_src

    5. **向量和矩阵的内积与外积**:向量的点积和外积在很多领域都有应用,例如在物理学中描述力的作用。 6. **优化算法**:在处理大规模问题时,高效的算法是必不可少的,比如高斯消元法、迭代法等。 7. **线性系统...

    Matlab.docx

    2. **内积与外积**:两个向量的点积(内积)如`[1 1 1]*[1;1;1]`,矩阵乘法得到外积如`[1;1;1]*[1 1 1]`。 3. **矩阵索引**:用`(行,列)`访问矩阵元素,如`A(1,:)`获取第一行的所有值。 4. **替换元素**:`A(x,:)=[ ...

    南昌大学高等数学竞赛:第三届

    - **向量的内积与外积**:衡量向量之间的关系,外积产生一个新的向量或标量。 3. **概率论与数理统计**: - **随机变量**:可以取到不同数值的变量,可以是离散型或连续型。 - **概率分布**:描述随机变量取值...

    南昌大学第四届高等数学竞赛的试题

    2. **线性代数**:线性方程组的解法、矩阵的运算(加法、乘法、逆矩阵、行列式、特征值与特征向量)、线性空间、线性变换、欧几里得空间的概念以及向量的内积与外积。这些基础知识在解决几何问题、物理学问题等方面...

    内外积代数运算及python,tensorflow,matlab语句的实现

    重则成百上千行的代码反复尝试多次不知道错在哪里,浪费大量不必要的时间,我也是经常遇到向量以及矩阵的运算,一次搞清楚事后不复习又忘记,然后再查再忘,今天就索性自己写一篇博客,将常见的内积和外积的代数运算...

    外运算:例如外积、外和、外等...-matlab开发

    当 OPERATOR 应用于向量 A 的元素和向量 B 的元素的所有组合时,计算结果矩阵,例如 A 和 B 的外积是 outerop(A,B,'*'),A 和 B 的外和是外操作(A,B,'+') 如果省略 OPERATOR,则假定为“+” 这个函数相当于APL...

    流量积算记录仪|记录仪|SPR10F流量积算记录仪.zip

    同时,该记录仪还具备数据记录功能,可以存储一定时间内的流量数据,便于后期分析和报表生成。 在实际应用中,SPR10F流量积算记录仪可能需要连接到PLC(可编程逻辑控制器)、DCS(分布式控制系统)或其他上位机系统...

    向量的点积与叉积PPT课件.pptx

    "向量的点积与叉积" 向量的点积(数量积)是两个向量的乘积,记为 a · b 或(a,b),它是一个标量值。点积也称为“点积”、“内积”。点积的定义为:a · b = |a| |b| cosθ,其中θ是两个向量之间的夹角。 点积...

    用坐标法定义向量的内积外积空间解析几何新体系之一 (1992年)

    本文首先用坐标法定义了向量的内积外积,然后证明了坐标法定义与向量法定义等价。这样做简化了内积外积各种运算规律的证明。

    易语言源码易语言判断点在多边形内外源码.rar

    3. **点积法**(Cross Product Method):通过计算点与多边形相邻边的向量的点积,判断点所在平面一侧。如果点总在所有边的同一侧,那么点在多边形内部。 4. **Barycentric坐标法**:将多边形视为平面直角坐标系下...

Global site tag (gtag.js) - Google Analytics