电脑做运算时,常会有浮点数误差的问题。为避免浮点数误差的问题,用电脑计算几何问题时,会採用不同于一般数学运算时所用的公式和定理。
内积(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
分享到:
相关推荐
2. 内积与外积的区别:内积表示为a·b,外积(叉积)表示为a×b,两者是不同的运算,且a·b ≠ ab,ab代表两个实数的乘积。 3. 零向量的性质:如果a≠0,且a·b=0,不能得出b=0,因为可能θ=90°。 4. 乘积的等价性...
换句话说,**ω ∧ ν(V1, V2)** 表示的是两个平行四边形的“内积”,这在几何上提供了对这两个向量关系的直观理解。 这种联系在实际应用中非常有用,例如在物理学中,力的向量积可以计算出力矩;在计算流体动力学...
内积(inner product, scalar product,dot product) 根据翻译,内积又叫标量积、点积,还叫数量积。是指接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。 两个向量和的点积...
3. **向量内积与外积**:内积(点积)和外积是线性代数中的基本概念。在R中,`crossprod()`计算两个向量的内积,而`tcrossprod()`计算外积。内积返回一个标量,外积返回一个矩阵。例如`z1 = crossprod(x, y)`。 4. ...
4. 向量的内积与外积: - 内积:向量的内积可通过`%*%`操作符实现,例如`x %*% y`。另外,`crossprod()`函数也是内积运算的另一种形式,如`crossprod(x, y)`。 - 外积:外积可以用`%o%`操作符完成,例如`x %o% y`...
- **向量的内积与外积** - **内积**:使用`%*%`运算符或`crossprod()`函数,如`x %*% y`计算两个向量的内积。 - **外积**:使用`%o%`运算符,如`x %o% y`计算两个向量的外积。`outer()`函数可以更灵活地计算外积...
C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等。 C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等.zip
10. **内积与外积**:内积是两个向量的点乘,返回一个标量;外积(向量积)在三维空间中产生一个新的向量,与原始向量垂直。 11. **秩**:矩阵的秩是指其行或列向量的最大线性无关组的数量,反映了矩阵的“厚度”。...
C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等。 C++线性代数运算库。包含了矩阵的加法运算、减法运算、内积运算、外积运算等.zip
通过这些点积方程,我们可以解出λ和µ的表达式,它们依赖于a、b和c的内积。 最后,将λ、µ以及(a × b) × a 和 (a × b) × b 的表达式代回原式,经过化简,我们得到(a × b) × c = (a · c)b - (b · c)a。这...
- 向量的内积与外积:理解内积与外积的几何意义及计算方法。 - 向量的线性相关性:掌握向量组线性相关性的判定方法。 #### 矩阵论 - 矩阵的运算:包括矩阵的加法、乘法、转置等。 - 行列式的概念及其计算方法。 - ...
3. 向量的内积与外积:内积(点积)定义了向量间的数量关系,外积(叉积)在三维空间中形成一个新的向量,具有正交性和右手定则特性。 4. 向量的线性组合与基:任何向量都可以表示为一组基向量的线性组合,基向量是...
3. **平面向量**:向量的定义、表示,向量的加减法、数乘运算,向量的内积与外积,向量在坐标系中的表示及运算,利用向量解决平面几何问题。 4. **三角函数**:正弦、余弦、正切函数的图像和性质,三角恒等式,和差...
2. **向量与空间**:向量的概念、向量的线性组合、向量的内积与外积、向量空间的基本性质、基与维数、子空间等。 3. **线性变换与坐标变换**:理解线性映射和线性变换,掌握坐标变换的计算,例如旋转、平移、缩放等...
- **1.1.3 向量的内积与外积**:解释向量的内积(点积)和外积(叉积)的概念及其计算方法。 - **1.1.4 向量的投影与分解**:介绍如何将一个向量按照另一个向量的方向进行分解和投影。 - **1.1.5 Cramer法则**:...
- **内积与外积**:向量之间的内积和外积计算及其几何意义。 - **向量空间**:向量空间是由一组满足特定条件的向量构成的集合,这些条件包括闭包性质、加法和数乘的可分配性等。 #### 2. 矩阵与行列式 - **矩阵的...
3. **向量的内积与外积**:虽然题目中没有直接涉及,但内积和外积是解析几何中非常重要的两个概念,它们可以帮助我们更好地理解向量之间的关系。 4. **向量的平行与垂直**:向量的平行与垂直也是解析几何中的基本...
2. **向量的内积与外积**:内积(点积)定义了两个向量之间的几何关系,结果是一个标量,表示两个向量的长度与夹角的余弦值。外积(叉积)在三维空间中定义,结果是一个新的向量,其方向垂直于原向量所在平面,长度...