精华内容
下载资源
问答
  • 向量叉乘

    万次阅读 多人点赞 2017-04-19 15:00:02
    向量叉乘公式以及推导: 向量叉乘几何意义:

    向量叉乘公式以及推导:

    向量叉乘几何意义:

    在三维几何中,向量a和向量b的叉乘结果是一个向量,该向量垂直于a和b向量构成的平面,该向量也被称作法向量


    向量叉乘运用:

    在三维模型中可以根据三角面的两条边计算出垂直于三角面的法线向量


    向量叉积的和:

    将叉乘的到的向量每个分量相加,得到叉积和

    a x b = y1z2- y2z1 + z1x2 - x1z2+ x1y2 - y1x2

    向量叉积和的应用:

    判断两个向量之间的顺逆关系

    若 P x Q > 0,则P在Q的顺时针方向

    若 P x Q > 0,则P在Q的逆时针方向

    若 P x Q > 0,则PQ共线

    判断凸多边形

    以多边形相邻两条边为向量进行叉积和,如果全部大于零则是凸多边形,如果全部为零则共线,否则就是凹多边形

    判断点和直线的位置关系

    在线上选两个点和需要判断的点构成向量叉积和

    判断点在矩形内部



    展开全文
  • 在二维空间中,利用直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点。并且由于利用叉乘最后可以的到一个...

    1.2D空间的直线相交

    在二维空间中,利用两个直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点。并且由于利用叉乘最后可以的到一个比例值,这个值的大小还可以判断四个点所得到的两个线段是延长线相交还是线段相交。

    2.向量叉乘

    三维空间中,两个向量叉乘得到的是一个垂直于两向量组成的平面的向量,方向可利用右手螺旋法则获取,这一点百度谷歌一搜一大把,不细说了大小可由下面的公式得到,注意和点乘的区别。

    向量叉乘的几何意义是得到一个三角形的有向面积,如下图所示,向量OA和OB叉乘的到的向量大小的二分之一就等于三角形OAB的面积

    有了以上基础,我们就可以开始计算三维空间中的直线交点了 

    3.三维空间中的两直线交点 

    下图CE和AB是平行线且长度相等。

    首先确定两条直线是否平行,利用向量点乘结果是否等于0来判断,等于0垂直,等于1则平行。

    接着我们需要确定两条直线在一个平面内,否则无论如何也无法相交,这个用向量叉乘来判断,即判断向量CA和向量AB叉乘得到的向量是否垂直于向量CD。

    然后明确一个目标,在四个点ABCD已知的情况下,求交点O我们只需要知道CO/CD就可以了。通过观察发现,三角形ACD的面积比三角形CDE的面积等于线段CO和CD的比值,我们来证明一下,步骤很简单。

    证明 :S三角形ACD/S三角形CDE  =  AO比AB

    三角形AFO和三角形EGC相似
    AF / EG = AO/CE;
    CE = AB  所以等式成立

    问题转化成要计算两个三角形的面积,那么我们只需要  向量AB,CD和CA就可以了,开始写代码

    3.代码实现 

    利用叉乘求交点少了很多if else的判断,并且可以做到二维和三维的通用,传递参数的时候只要将所有点和向量y轴的值设为0就可以当作二维来使用了。

    利用代码中得到的比例值num2的大小还可以判断是延长线相交还是线段相交

    注意下述方法所传入的参数是两个点和两个方向,可以改写成传入四个点。

            /// <summary>
            /// 判断线与线之间的相交
            /// </summary>
            /// <param name="intersection">交点</param>
            /// <param name="p1">直线1上一点</param>
            /// <param name="v1">直线1方向</param>
            /// <param name="p2">直线2上一点</param>
            /// <param name="v2">直线2方向</param>
            /// <returns>是否相交</returns>
            public static bool LineLineIntersection(out Vector3 intersection, Vector3 p1, Vector3 v1, Vector3 p2, Vector3 v2)
            {
                intersection = Vector3.zero;
                if (Vector3.Dot(v1, v2) == 1)
                {
                    // 两线平行
                    return false;
                }
    
                Vector3 startPointSeg = p2 - p1;
                Vector3 vecS1 = Vector3.Cross(v1, v2);            // 有向面积1
                Vector3 vecS2 = Vector3.Cross(startPointSeg, v2); // 有向面积2
                float num = Vector3.Dot(startPointSeg, vecS1);
    
                // 打开可以在场景中观察向量
                //Debug.DrawLine(p1, p1 + v1, Color.white, 20000);
                //Debug.DrawLine(p2, p2 + v2, Color.black, 20000);
    
                //Debug.DrawLine(p1, p1 + startPointSeg, Color.red, 20000);
                //Debug.DrawLine(p1, p1 + vecS1, Color.blue, 20000);
                //Debug.DrawLine(p1, p1 + vecS2, Color.yellow, 20000);
    
                // 判断两这直线是否共面
                if (num >= 1E-05f || num <= -1E-05f)
                {
                    return false;
                }
    
                // 有向面积比值,利用点乘是因为结果可能是正数或者负数
                float num2 = Vector3.Dot(vecS2, vecS1) / vecS1.sqrMagnitude;
    
                intersection = p1 + v1 * num2;
                return true;
            }

     

    展开全文
  • 1.2D空间的直线相交 在二维空间中,利用直线方程y = kx + ...三维空间中,向量叉乘得到的是一个垂直于向量组成的平面的向量,方向可利用右手螺旋法则获取,这一点百度谷歌一搜一大把,不细说了大小可由下...

    1.2D空间的直线相交

    在二维空间中,利用两个直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点。并且由于利用叉乘最后可以的到一个比例值,这个值的大小还可以判断四个点所得到的两个线段是延长线相交还是线段相交。

    2.向量叉乘

    三维空间中,两个向量叉乘得到的是一个垂直于两向量组成的平面的向量,方向可利用右手螺旋法则获取,这一点百度谷歌一搜一大把,不细说了大小可由下面的公式得到,注意和点乘的区别。

    向量叉乘的几何意义是得到一个三角形的有向面积,如下图所示,向量OA和OB叉乘的到的向量大小的二分之一就等于三角形OAB的面积

    有了以上基础,我们就可以开始计算三维空间中的直线交点了 

    3.三维空间中的两直线交点 

    下图CE和AB是平行线且长度相等。

    首先确定两条直线是否平行,利用向量点乘结果是否等于0来判断,等于0垂直,等于1则平行。

    接着我们需要确定两条直线在一个平面内,否则无论如何也无法相交,这个用向量叉乘来判断,即判断向量CA和向量AB叉乘得到的向量是否垂直于向量CD。

    然后明确一个目标,在四个点ABCD已知的情况下,求交点O我们只需要知道CO/CD就可以了。通过观察发现,三角形ACD的面积比三角形CDE的面积等于线段CO和CD的比值,我们来证明一下,步骤很简单。

    证明 :S三角形ACD/S三角形CDE  =  AO比AB

    三角形AFO和三角形EGC相似
    AF / EG = AO/CE;
    CE = AB  所以等式成立

    问题转化成要计算两个三角形的面积,那么我们只需要  向量AB,CD和CA就可以了,开始写代码

    3.代码实现 

    利用叉乘求交点少了很多if else的判断,并且可以做到二维和三维的通用,传递参数的时候只要将所有点和向量y轴的值设为0就可以当作二维来使用了。

    利用代码中得到的比例值num2的大小还可以判断是延长线相交还是线段相交

    注意下述方法所传入的参数是两个点和两个方向,可以改写成传入四个点。

    
      
    1. /// <summary>
    2. /// 判断线与线之间的相交
    3. /// </summary>
    4. /// <param name="intersection">交点</param>
    5. /// <param name="p1">直线1上一点</param>
    6. /// <param name="v1">直线1方向</param>
    7. /// <param name="p2">直线2上一点</param>
    8. /// <param name="v2">直线2方向</param>
    9. /// <returns>是否相交</returns>
    10. public static bool LineLineIntersection(out Vector3 intersection, Vector3 p1, Vector3 v1, Vector3 p2, Vector3 v2)
    11. {
    12. intersection = Vector3.zero;
    13. if (Vector3.Dot(v1, v2) == 1)
    14. {
    15. // 两线平行
    16. return false;
    17. }
    18. Vector3 startPointSeg = p2 - p1;
    19. Vector3 vecS1 = Vector3.Cross(v1, v2); // 有向面积1
    20. Vector3 vecS2 = Vector3.Cross(startPointSeg, v2); // 有向面积2
    21. float num = Vector3.Dot(startPointSeg, vecS1);
    22. // 打开可以在场景中观察向量
    23. //Debug.DrawLine(p1, p1 + v1, Color.white, 20000);
    24. //Debug.DrawLine(p2, p2 + v2, Color.black, 20000);
    25. //Debug.DrawLine(p1, p1 + startPointSeg, Color.red, 20000);
    26. //Debug.DrawLine(p1, p1 + vecS1, Color.blue, 20000);
    27. //Debug.DrawLine(p1, p1 + vecS2, Color.yellow, 20000);
    28. // 判断两这直线是否共面
    29. if (num >= 1E-05f || num <= -1E-05f)
    30. {
    31. return false;
    32. }
    33. // 有向面积比值,利用点乘是因为结果可能是正数或者负数
    34. float num2 = Vector3.Dot(vecS2, vecS1) / vecS1.sqrMagnitude;
    35. intersection = p1 + v1 * num2;
    36. return true;
    37. }

     

    展开全文
  • 作者:xdedzl 原文地址 1. 2D空间的直线相交 在二维空间中,利用个...三维空间中,向量叉乘得到的是一个垂直于向量组成的平面的向量,方向可利用右手螺旋法则获取,这一点百度谷歌一搜一大把,不细说..

    作者:xdedzl

    原文地址

    以下是原文,我把格式整理一下,方便大家理解阅读

    1. 2D空间的直线相交

    在二维空间中,利用两个直线方程 y = kx + b 我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点。并且由于利用叉乘最后可以的到一个比例值,这个值的大小还可以判断四个点所得到的两个线段是延长线相交还是线段相交。

     

    2. 向量叉乘

    三维空间中,两个向量叉乘得到的是一个垂直于两向量组成的平面的向量,方向可利用右手螺旋法则获取,这一点百度谷歌一搜一大把,不细说了大小可由下面的公式得到,注意和点乘的区别。

    向量叉乘的几何意义是得到一个三角形的有向面积,如下图所示,向量 \vec{OA}\vec{OB} 叉乘的到的向量大小的二分之一就等于三角形\triangle OAB 的面积

    有了以上基础,我们就可以开始计算三维空间中的直线交点了 

     

    3. 三维空间中的两直线交点 

    下图 CE 和 AB 是平行线且长度相等。

    首先确定两条直线是否平行,利用向量点乘结果是否等于 0 来判断,等于 0 垂直,等于 1 则平行。

    接着我们需要确定两条直线在一个平面内,否则无论如何也无法相交,这个用向量叉乘来判断,即判断 \vec{CA} 和 \vec{AB} 叉乘得到的向量是否垂直于 \vec{CD}

    然后明确一个目标,在四个点 ABCD 已知的情况下,求交点 O 我们只需要知道 \frac{\left | AO \right |}{\left | AB \right |} 就可以了。通过观察发现,\triangle ACD 的面积比 \triangle CDE 的面积等于线段 AO 和 AB 的比值,我们来证明一下,步骤很简单。

     

    证明 \frac{\textbf{S}\triangle ACD}{\textbf{S}\triangle CDE}=\frac{\left | AO \right |}{\left | AB \right |} 

    \triangle AFO\triangle EGC 相似
    \frac {AF} {EG} = \frac{AO}{CE}
    CE = AB  所以等式成立。


    问题转化成要计算两个三角形的面积,那么我们只需要 \vec{AB}\vec{CD} 和 \vec{CA} 就可以了,开始写代码

     

    4.代码实现 

    利用叉乘求交点少了很多 if / else 的判断,并且可以做到二维和三维的通用,传递参数的时候只要将所有点和向量 y 轴的值设为 0 就可以当作二维来使用了。

    利用代码中得到的比例值 num2 的大小还可以判断是延长线相交还是线段相交

    注意下述方法所传入的参数是两个点和两个方向,可以改写成传入四个点。

            /// <summary>
            /// 判断线与线之间的相交
            /// </summary>
            /// <param name="intersection">交点</param>
            /// <param name="p1">直线1上一点</param>
            /// <param name="v1">直线1方向</param>
            /// <param name="p2">直线2上一点</param>
            /// <param name="v2">直线2方向</param>
            /// <returns>是否相交</returns>
            public static bool LineLineIntersection(out Vector3 intersection, Vector3 p1, Vector3 v1, Vector3 p2, Vector3 v2)
            {
                intersection = Vector3.zero;
                if (Vector3.Dot(v1, v2) == 1)
                {
                    // 两线平行
                    return false;
                }
     
                Vector3 startPointSeg = p2 - p1;
                Vector3 vecS1 = Vector3.Cross(v1, v2);            // 有向面积1
                Vector3 vecS2 = Vector3.Cross(startPointSeg, v2); // 有向面积2
                float num = Vector3.Dot(startPointSeg, vecS1);
     
                // 打开可以在场景中观察向量
                //Debug.DrawLine(p1, p1 + v1, Color.white, 20000);
                //Debug.DrawLine(p2, p2 + v2, Color.black, 20000);
     
                //Debug.DrawLine(p1, p1 + startPointSeg, Color.red, 20000);
                //Debug.DrawLine(p1, p1 + vecS1, Color.blue, 20000);
                //Debug.DrawLine(p1, p1 + vecS2, Color.yellow, 20000);
     
                // 判断两这直线是否共面
                if (num >= 1E-05f || num <= -1E-05f)
                {
                    return false;
                }
     
                // 有向面积比值,利用点乘是因为结果可能是正数或者负数
                float num2 = Vector3.Dot(vecS2, vecS1) / vecS1.sqrMagnitude;
     
                intersection = p1 + v1 * num2;
                return true;
            }

     

    根据原作者的实现, 0<= num2<=1时,交点在线段上; 否则,在延长线上

     

    展开全文
  • 向量 - 向量叉乘 向量点乘

    千次阅读 2013-07-04 01:00:55
    向量 - 向量叉乘 向量点乘 2010年07月28日 星期三 14:33 向量(Vector) 在几乎所有的几何问题中,向量(有时也称矢量)是一个基本点。向量的定义包含方向和一个数(长度)。在二维空间中,一个向量可以用...
  • 向量叉乘 - 判断条线段是否相交

    千次阅读 2020-01-19 10:59:58
    首先我们要明白一个定理:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向;若结果大于0,表示向量b在向量a的逆时针方向;若等于0,表示向量a与向量b平行。(顺逆时针是指向量平移至...
  • 网上很多讲这个问题都不完整,仅仅是叉积一下,并未考虑平行共线等情况,这篇文章讲的很细致,所以我转载过来了 问题:给出条线段,问线段是否相交?...首先我们要明白一个定理:向量a×向量b(×为向量叉乘...
  • 一、向量叉乘的几何意义 二、法向量的叉乘公式
  • 首先我们要明白一个定理:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向;若结果大于0,表示向量b在向量a的逆时针方向;若等于0,表示向量a与向量b平行。(顺逆时针是指向量平移至...
  • 首先我们要明白一个定理:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向;若结果大于0,表示向量b在向量a的逆时针方向;若等于0,表示向量a与向量b平行。(顺逆时针是指向量平移至...
  • 向量叉乘判断点的位置

    千次阅读 2018-07-04 13:34:08
    note:用到叉乘的知识,向量叉乘得到一个垂直于这向量向量,如果这向量不共线的话。否则,得到的是0。结果向量方向可以用右手定则判断。如图所示,线段AB和点P印象里,只学过三维向量叉乘,将...
  • * 向量叉积:向量的叉积是向量,它们的绝对值相当于向量构成平行四边形的面积,A向量*B向量=A*B*sina; * 相当于三角形的2倍,然后我们可以利用三角形的面积的正负来判断是否是凸边形.因为如果是凹边形,a>90...
  • 那判断线段是否相交与一开始提到的向量叉乘定理有什么关系呢?有,我们可以通过叉乘来证明上面说的充要条件。看下图: 在上图中,线段AB与线段CD相交,于是我们可以得到个向量AC,AD,C和D分别在AB的两边,向量...
  • 前面天画了点和线,今天我们来画一个最简单也是最强大的面——三角形。 本文主要讲解三角形绘制算法的推导和思路(只涉及到一点点的向量知识),最后会给出代码实现,大家放心的看下去就好。 本文源码 ????:...
  • 向量点乘与叉乘

    万次阅读 多人点赞 2019-02-25 14:06:01
    向量点乘与叉乘 向量(Vector)  在几乎所有的几何问题中,向量(有时也称矢量)是一个基本点。向量的定义包含方向和一个数(长度)。在二维空间中,一个向量可以用一对x和y来表示。例如由点(1,3)到(5,1的向量...
  • 判断向量的夹角方向,用向量叉乘来判断 假设有向量(v1x,v1y), (v2x, v2y) 坐标系是右手坐标系,0点在屏幕左下方,往右是x正方向,往上是y正方向 角度逆时针为正,顺时针为负 从v1 到 v2的夹角是顺时针还是逆时针...
  • NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_vec.h> #include <uf_curve.h>... //创建直线1 UF_CURVE_line_t LineCoords1; LineCoords1.start_...
  • 点到直线距离
  • 3维向量的点乘叉乘运算

    万次阅读 2020-11-04 20:30:36
    文章目录3维向量的点乘叉乘运算三维向量的点乘三维向量叉乘点到直线的距离点到平面的距离 三维向量的点乘 点乘得到的是对应元素乘积的和,是一个标量,没有方向 V1( x1, y1, z1)·V2(x2, y2, z2) = x1x2 + y1y2 + ...
  • 定义:向量a与b的内积为 a·b = |a||b|cos∠(a, b),0·a =a·0 = 0;若a,b是非零向量,则a与b向量正交的充要条件是a·b = 0。 向量内积的性质: a^2 ≥ 0;当a^2 = 0时,必有a = 0. (正定性) a·b = b·a. ...
  • 向量的点乘与叉乘

    千次阅读 2015-07-22 11:40:50
    向量 - 向量叉乘 向量点乘   向量(Vector) 在几乎所有的几何问题中,向量(有时也称矢量)是一个基本点。向量的定义包含方向和一个数(长度)。在二维空间中,一个向量可以用一对x和y来表示。例如由点(1,3)...
  • 题意:一些线段把一个矩形分成若干部分,给...思路:向量oa和ob,如果oa*ob<0,说明oa在ob的左侧,如果>0,说明oa在右侧,=0,说明共线。注意两向量一定是共起点的。 #include <cstdio> #include &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,862
精华内容 744
关键字:

两直线的方向向量叉乘