`
micheal19840929
  • 浏览: 166261 次
  • 性别: 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

分享到:
评论

相关推荐

    平面向量的数量积及运算律.doc

    2. 内积与外积的区别:内积表示为a·b,外积(叉积)表示为a×b,两者是不同的运算,且a·b ≠ ab,ab代表两个实数的乘积。 3. 零向量的性质:如果a≠0,且a·b=0,不能得出b=0,因为可能θ=90°。 4. 乘积的等价性...

    数学中的内积和外积

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

    楔积与向量积1

    换句话说,**ω ∧ ν(V1, V2)** 表示的是两个平行四边形的“内积”,这在几何上提供了对这两个向量关系的直观理解。 这种联系在实际应用中非常有用,例如在物理学中,力的向量积可以计算出力矩;在计算流体动力学...

    统计建模与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

    .arch线性代数2019.pdf

    10. **内积与外积**:内积是两个向量的点乘,返回一个标量;外积(向量积)在三维空间中产生一个新的向量,与原始向量垂直。 11. **秩**:矩阵的秩是指其行或列向量的最大线性无关组的数量,反映了矩阵的“厚度”。...

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

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

    双重向量积公式的证明1

    通过这些点积方程,我们可以解出λ和µ的表达式,它们依赖于a、b和c的内积。 最后,将λ、µ以及(a × b) × a 和 (a × b) × b 的表达式代回原式,经过化简,我们得到(a × b) × c = (a · c)b - (b · c)a。这...

    张宇高等数学手写笔记

    - 向量的内积与外积:理解内积与外积的几何意义及计算方法。 - 向量的线性相关性:掌握向量组线性相关性的判定方法。 #### 矩阵论 - 矩阵的运算:包括矩阵的加法、乘法、转置等。 - 行列式的概念及其计算方法。 - ...

    线性代数复习资料和试卷

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

    届陕西省韩城市高二下学期期末数学理质量检试题.docx

    3. **平面向量**:向量的定义、表示,向量的加减法、数乘运算,向量的内积与外积,向量在坐标系中的表示及运算,利用向量解决平面几何问题。 4. **三角函数**:正弦、余弦、正切函数的图像和性质,三角恒等式,和差...

    李永乐权威12题精讲必下

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

    代码:线性代数与解析几何 学习及上机指导

    - **1.1.3 向量的内积与外积**:解释向量的内积(点积)和外积(叉积)的概念及其计算方法。 - **1.1.4 向量的投影与分解**:介绍如何将一个向量按照另一个向量的方向进行分解和投影。 - **1.1.5 Cramer法则**:...

    线性代数 同济大学教材

    - **内积与外积**:向量之间的内积和外积计算及其几何意义。 - **向量空间**:向量空间是由一组满足特定条件的向量构成的集合,这些条件包括闭包性质、加法和数乘的可分配性等。 #### 2. 矩阵与行列式 - **矩阵的...

    高等代数与解析几何 高教版 第一章 答案

    3. **向量的内积与外积**:虽然题目中没有直接涉及,但内积和外积是解析几何中非常重要的两个概念,它们可以帮助我们更好地理解向量之间的关系。 4. **向量的平行与垂直**:向量的平行与垂直也是解析几何中的基本...

    线性代数(同济第三版)

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

Global site tag (gtag.js) - Google Analytics