精华内容
下载资源
问答
  • 学习OpenCV3:判断直线重合

    千次阅读 2020-06-27 10:30:01
      已知直线l1(x1,y1,x2,y2)l_1(x_1,y_1,x_2,y_2)l1​(x1​,y1​,x2​,y2​)和l2(x3,y3,x4,y4)l_2(x_3,y_3,x_4,y_4)l2​(x3​,y3​,x4​,y4​),现希望判断l1l_1l1​与l2l_2l2​间是否重合。 二、分析   l1l_...

    一、问题

      已知两条直线 l 1 ( x 1 , y 1 , x 2 , y 2 ) l_1(x_1,y_1,x_2,y_2) l1(x1,y1,x2,y2) l 2 ( x 3 , y 3 , x 4 , y 4 ) l_2(x_3,y_3,x_4,y_4) l2(x3,y3,x4,y4),现希望判断 l 1 l_1 l1 l 2 l_2 l2间是否重合。

    二、分析

       l 1 l_1 l1的直线方程:
    y − y 1 y 2 − y 1 = x − x 1 x 2 − x 1 ⇒ { a 1 x + b 1 y + c 1 = 0 a 1 = − ( y 2 − y 1 ) b 1 = x 2 − x 1 c 1 = ( y 2 − y 1 ) x 1 − ( x 2 − x 1 ) y 1 \frac{y-y_1}{y_2-y_1} = \frac{x-x_1}{x_2-x_1} \Rightarrow \begin{cases} a_1x+b_1y+c_1=0 \\a_1=-(y_2-y_1) \\b_1 = x_2-x_1 \\c_1 = (y_2-y_1)x_1 - (x_2-x_1) y_1\end{cases} y2y1yy1=x2x1xx1a1x+b1y+c1=0a1=(y2y1)b1=x2x1c1=(y2y1)x1(x2x1)y1

      若 l 2 l_2 l2的起点 p 3 ( x 3 , y 3 ) p_{3}(x_{3},y_{3}) p3(x3,y3)和终点 p 4 ( x 4 , y 4 ) p_{4}(x_{4},y_{4}) p4(x4,y4)不是同一个点,且都在直线 l 1 l_1 l1上,则 l 2 l_2 l2 l 1 l_1 l1重合。
      判断条件:p3!=p4 && a1*x3+b1*y3+c1==0 && a1*x4+b1*y4+c1==0

    三、实现

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <string>
    #include <cmath>
    using namespace std;
    using namespace cv;
    
    Vec4d g_line1(100, 300, 300, 300), g_line2(500, 300, 700, 300); // 重合的两条线
    
    // 判断两条线是否重合
    bool lines_coincidence(const Vec4d l1, const Vec4d l2)
    {
        double x1 = l1[0], y1 = l1[1], x2 = l1[2], y2 = l1[3];                      // 两点式:(y-y1)/(y2-y1)=(x-x1)/(x2-x1)
        double a1 = -(y2 - y1), b1 = x2 - x1, c1 = (y2 - y1) * x1 - (x2 - x1) * y1; // 一般式:a1x+b1y1+c1=0
        double x3 = l2[0], y3 = l2[1], x4 = l2[2], y4 = l2[3];
        Point2d p3(x3, y3), p4(x4, y4);
        if (p3 != p4 && a1 * x3 + b1 * y3 + c1 == 0 && a1 * x4 + b1 * y4 + c1 == 0) // 判断条件
            return true;
        else
            return false;
    }
    
    // 画虚线
    void draw_dotted_line(Mat img, const Point2d p1, const Point2d p2, const Scalar color, const int thickness)
    {
        double n = 15; // 小虚线的长度
        double w = p2.x - p1.x, h = p2.y - p1.y;
        double l = sqrtl(w * w + h * h);
        // 矫正线长度,使线个数为奇数
        int m = l / n;
        m = m % 2 ? m : m + 1;
        n = l / m;
    
        circle(img, p1, 1, color, thickness); // 画起点
        circle(img, p2, 1, color, thickness); // 画终点
        // 画中间点
        if (p1.y == p2.y) //水平线:y = m
        {
            double x1 = min(p1.x, p2.x);
            double x2 = max(p1.x, p2.x);
            for (double x = x1, n1 = 2 * n; x < x2; x = x + n1)
                line(img, Point2d(x, p1.y), Point2d(x + n, p1.y), color, thickness);
        }
        else if (p1.x == p2.x) //垂直线, x = m
        {
            double y1 = min(p1.y, p2.y);
            double y2 = max(p1.y, p2.y);
            for (double y = y1, n1 = 2 * n; y < y2; y = y + n1)
                line(img, Point2d(p1.x, y), Point2d(p1.x, y + n), color, thickness);
        }
        else
        {
            // 直线方程的两点式:(y-y1)/(y2-y1)=(x-x1)/(x2-x1) -> y = (y2-y1)*(x-x1)/(x2-x1)+y1
            double n1 = n * abs(w) / l;
            double k = h / w;
            double x1 = min(p1.x, p2.x);
            double x2 = max(p1.x, p2.x);
            for (double x = x1, n2 = 2 * n1; x < x2; x = x + n2)
            {
                Point p3 = Point2d(x, k * (x - p1.x) + p1.y);
                Point p4 = Point2d(x + n1, k * (x + n1 - p1.x) + p1.y);
                line(img, p3, p4, color, thickness);
            }
        }
    }
    
    // 画延长线
    void draw_extension_line(Mat img, const Vec4d l, Scalar color)
    {
        double x1 = l[0], y1 = l[1], x2 = l[2], y2 = l[3];
        double a = -(y2 - y1), b = x2 - x1, c = (y2 - y1) * x1 - (x2 - x1) * y1;
        Point2d p1(0, 0), p2(0, 0);
        if (b != 0)
        {
            p1 = Point2d(0, -c / b);
            p2 = Point2d(img.cols, ((-a * img.cols - c) / b));
        }
        else
        {
            p1 = Point2d(-c / a, 0);
            p2 = Point2d(-c / a, img.rows);
        }
        draw_dotted_line(img, p1, p2, color, 1);
    }
    
    // 画图
    void draw(const Mat img, const Vec4d l1, const Vec4d l2)
    {
        line(img, Point2d(l1[0], l1[1]), Point2d(l1[2], l1[3]), Scalar(0, 255, 0), 2); // 画绿线
        line(img, Point2d(l2[0], l2[1]), Point2d(l2[2], l2[3]), Scalar(0, 255, 0), 2); // 画绿线
        if (lines_coincidence(l1, l2))                                                 // 重合
        {
            putText(img, "yes", Point2d(10, 25), cv::FONT_HERSHEY_COMPLEX, 0.5, Scalar(0, 255, 0));
            draw_extension_line(img, l1, Scalar(0, 255, 0)); // 画延长线
        }
        else
        {
            putText(img, "no", Point2d(10, 25), cv::FONT_HERSHEY_COMPLEX, 0.5, Scalar(0, 0, 255));
        }
    }
    
    // 确定鼠标左键点击在两条直线的那个点上
    Vec6d define_area(const Vec4d l1, const Vec4d l2, const Point2d p)
    {
        Vec6d v(-1, 0, 0, 0, 0, 0);
        double w = 20, h = 20;
        double x1 = l1[0], y1 = l1[1], x2 = l1[2], y2 = l1[3];
        double x3 = l2[0], y3 = l2[1], x4 = l2[2], y4 = l2[3];
        Rect r0(x1 - w, y1 - h, 2 * w, 2 * h);    // l1的起点点
        Point2d p1((x2 + x1) / 2, (y1 + y2) / 2); // l1的中间点
        Rect r1(p1.x - w, p1.y - h, 2 * w, 2 * h);
        Rect r2(x2 - w, y2 - h, 2 * w, 2 * h); // l1的终点
    
        Rect r3(x3 - w, y3 - h, 2 * w, 2 * h);    // l2的起点
        Point2d p2((x3 + x4) / 2, (y3 + y4) / 2); // l2的中间点
        Rect r4(p2.x - w, p2.y - h, 2 * w, 2 * h);
        Rect r5(x4 - w, y4 - h, 2 * w, 2 * h); // l2的终点
    
        if (r0.contains(p)) // 判断点是否在矩形中
        {
            v = Vec6d(0, x1, y1, 0, 0, 0);
        }
        else if (r1.contains(p))
        {
            v = Vec6d(1, x1, y1, x2, y2, 0);
        }
        else if (r2.contains(p))
        {
            v = Vec6d(2, x2, y2, 0, 0, 0);
        }
        else if (r3.contains(p))
        {
            v = Vec6d(3, x3, y3, 0, 0, 0);
        }
        else if (r4.contains(p))
        {
            v = Vec6d(4, x3, y3, x4, y4, 0);
        }
        else if (r5.contains(p))
        {
            v = Vec6d(5, x4, y4, 0, 0, 0);
        }
        return v;
    }
    
    // 根据鼠标移动相应的修改直线的起点和终点
    void modify_line(Vec4d &l1, Vec4d &l2, const Vec6d area, const double w, const double h)
    {
        if (area[0] == 0)
        {
            l1[0] = area[1] + w;
            l1[1] = area[2] + h;
        }
        else if (area[0] == 1)
        {
            l1[0] = area[1] + w;
            l1[1] = area[2] + h;
            l1[2] = area[3] + w;
            l1[3] = area[4] + h;
        }
        else if (area[0] == 2)
        {
            l1[2] = area[1] + w;
            l1[3] = area[2] + h;
        }
        else if (area[0] == 3)
        {
            l2[0] = area[1] + w;
            l2[1] = area[2] + h;
        }
        else if (area[0] == 4)
        {
            l2[0] = area[1] + w;
            l2[1] = area[2] + h;
            l2[2] = area[3] + w;
            l2[3] = area[4] + h;
        }
        else if (area[0] == 5)
        {
            l2[2] = area[1] + w;
            l2[3] = area[2] + h;
        }
    }
    
    // 鼠标回调函数
    void mouse_callback(int event, int x, int y, int flags, void *param)
    {
        static Point2d p1(0, 0), p2(0, 0);
        static Vec6d area(-1, 0, 0, 0, 0, 0);
        switch (event)
        {
        case cv::EVENT_LBUTTONDOWN: // 鼠标左键点击
            p1 = Point2d(x, y);
            area = define_area(g_line1, g_line2, p1); // 确定鼠标所要移动的区域
            break;
        case cv::EVENT_MOUSEMOVE: // 鼠标移动
            if (area[0] > -1)     // 移动直线
            {
                p2 = Point2d(x, y);
                double w = p2.x - p1.x, h = p2.y - p1.y;
                modify_line(g_line1, g_line2, area, w, h); // 根据鼠标移动相应的修改直线的起点和终点
            }
            break;
        case cv::EVENT_LBUTTONUP: // 鼠标左键释放
            p1 = Point2d(0, 0);
            p2 = Point2d(0, 0);
            area = Vec6d(-1, 0, 0, 0, 0, 0);
            break;
        default:
            break;
        }
    }
    
    // 主函数
    int main()
    {
        string window_name = "image";
        namedWindow(window_name, WINDOW_AUTOSIZE);
        int w = 800, h = 600;
        Mat image_original = Mat(h, w, CV_8UC3, Scalar(255, 255, 255));
        cv::setMouseCallback(window_name, mouse_callback); // 调用鼠标回调函数
        while (true)
        {
            Mat img = image_original.clone(); // 拷贝空白图片,方便重复画图
            draw(img, g_line1, g_line2);      // 画图
            imshow(window_name, img);
            char c = waitKey(3);
            if (c == '1') // l1,l2与x轴平行
            {
                g_line1 = Vec4d(100, 300, 300, 300);
                g_line2 = Vec4d(500, 300, 700, 300);
            }
            else if (c == '2') // l1,l2与x轴垂直
            {
                g_line1 = Vec4d(400, 50, 400, 250);
                g_line2 = Vec4d(400, 350, 400, 550);
            }
            else if (c == '3') // l1,l2与x轴右倾斜
            {
                g_line1 = Vec4d(100, 500, 300, 400);
                g_line2 = Vec4d(500, 300, 700, 200);
            }
            else if (c == '4') // l1,l2与x轴左倾斜
            {
                g_line1 = Vec4d(100, 200, 300, 300);
                g_line2 = Vec4d(500, 400, 700, 500);
            }
            else if (c > 0 && (c < '1' || c > '4')) // 退出循环
            {
                break;
            }
        }
        return 0;
    }
    

    操作方法:
      鼠标点击两条直线的起点或终点并按住移动,由此可以修改直线。鼠标点击两条直线的中间点并按住移动,由此可以平移直线。
      键盘按住1234可选择对应的模式,画出不同角度下两条直线重合的情况。键盘按其它的键会退出程序。

    两条直线不重合时:
    两条直线不重合
    模式1:
    模式1
    模式2:
    模式2
    模式3:
    模式3
    模式4:
    模式4

    展开全文
  • 利用eigen库内矩阵运算函数,写了LinesPositionRelationship3D类。实现了确定三维空间任意直线位置关系并获得在平行和交错条件下的两直线距离的功能。该类是在确定空间圆柱轴线关系下的副产品。
  • 2019版高中数学第二章平面解析几何初步2.2直线的方程2.2.3第1课时直线相交平行与重合条件练习新人教B版必修2
  • 烹饪原料在加工过程中,损失最大的营养素是维生素,其中又以维生素C损失最大。谈谈你对ERP的认识。The forms of intercultural communication include: ___________ communication; interracial communication, ____...

    烹饪原料在加工过程中,损失最大的营养素是维生素,其中又以维生素C损失最大。

    谈谈你对ERP的认识。

    The forms of intercultural communication include: ___________ communication; interracial communication, __________ communication, _____________ communication.

    埃及纸草文书上记录了神庙向“swtjw”提供物品的情况,”swjtw“指代( )

    (84-86题共用题干)第84题:

    背景(六) 某施工企业与业主签订了某工程的施工承包合同。经监理工程师审核批准的施工进度计划如图

    二、根据以下资料,回答126-130题 A4744 B5397C9901 D13178

    从所给的四个选项中,选择最合适的一个填入问号处,使之呈现一定的规律性:()

    监理单位进行的工作不包括下列内容:()A.审核施工升降机安装、拆卸工程专项施工方案B.监督安装单位

    可以利用施工升降机的导轨架、横坚支撑、层站等悬挂较小的绳缆标语、旗帜等。

    工作时间内司机不得擅自离开施工升降机。当有特殊情况需离开时,应将施工升降机停到最高层,关闭电

    施工升降机主电缆线应直接接入一级配电箱。

    职工因工致残被坚定为一至四级的,应当退出生产,工作岗位,终止劳动关系,发给工商伤残抚恤证件。

    评估从事新工作的雇员的培训需求是相当简明的事情,其中培训需求评估的主要内容:A、评估新雇员

    1972年11月16日,联合国教科文组织大会第17届会议在()通过了《保护世界文化和自然遗产公约》。A、日

    浆膜下肌瘤、肌壁间肌瘤常表现为月经量过多,随肌瘤逐渐增大,经期延长。

    拓片传拓的对象主要是() A古代的器物 b刻石 c古字画 d古书A.aB.abcdC.bD.ab

    小儿眉间、鼻柱及唇周色青,属于()A、寒凝气滞B、瘀血内阻C、小儿惊风D、疼痛剧烈E、肝郁脾虚

    自动扶梯口的监控图像应能清晰显示上下人员的体貌特征。()

    《重点单位重要部位安全技术防范系统要求》(第9部分、零售商业)及《补充通知》中,对仓储式会员店的

    [单选,A1型题] 继发性腹膜炎毒性强的原因主要是因为感染菌为()。

    [问答题,简答题] 科技人员的根本任务是什么?

    [单选] 下列关于精神发育迟滞的描述不正确的是()

    [单选,A1型题] 下列中毒性细菌性痢疾的治疗措施,错误的是()。

    [判断题] 易燃易爆气体一旦溢漏,因其本身的化学性质,可能引起火灾、爆炸、中毒、灼伤、冻伤等事故。

    [单选] 在网络上信息传输速率的单位是()。

    [判断题] 行政决策不是领导人个人思考的结果,集体决策才是最完美的。

    [多选] 下列关于正当防卫和紧急避险的说法正确的是()

    [单选] 若模具闭合厚度大于注朔机允许的模具最大厚度时,则可采用()来调整,使模具闭合。

    [单选] 铣削时由于每个刀刃的切削厚度是变化的,所以使铣削总是处于()的工作状态,影响了加工精密。

    [单选] 精密成型磨削可以达到的外形尺寸精度是()?

    [单选] ()年。美国试制出世界第一台三坐标数控铣床。

    [单选] 现代化的精密机床的液压系统常用()泵。

    [单选] 螺纹有紧固、防松及传动作用,紧固联接通常用()螺纹。

    [单选] 钢经调质后所获组织为()。

    [单选] 键联接中因键强度不够而被破坏是由()引起的。

    [单选] “三个臭皮匠定格诸葛亮”、“一个好汉三个帮”。与此谚语内涵相符的选项是()

    [单选] 社会主义职业道德的核心是()

    [单选] 下列关于道德的说法中,正确的是()。

    [单选] 所谓享乐主义,其本质是()。

    展开全文
  • 背景介绍最近在水面无人艇(USV)模拟仿真中,用到了一些点和线的关系求解,本文主要讲述一下点确认直线,点到直线距离,直线的交点等问题的解决方法,并给出python程序。部分内容非原创,文中给出链接,需要者...

    背景介绍

    最近在水面无人艇(USV)模拟仿真中,用到了一些点和线的关系求解,本文主要讲述一下两点确认直线,点到直线距离,两条直线的交点等问题的解决方法,并给出python程序。部分内容非原创,文中给出链接,需要者可以参考。

    博客更新可参见github点线关系

    两点确定直线

    表达式定义

    空间直线的表达式有多种,比如一般式Ax+By+C=0、点斜式y-y0=k(x-x0)、截距式x/a+y/b=1、两点式:(y-y1)/(y1-y2)=(x-x1)/(x1-x2)等,它们具有彼此的约束条件,如下所示。

    由上可以看出来,一般式的适用范围最广,不需要单独做处理和判断,所以在计算机领域处理二维图像数据中一般式用的最多。

    已知直线上的两点P1(X1,Y1)和P2(X2,Y2),P1和P2两点不重合,对于AX+BY+C=0,则有:

    A=Y2-Y1

    B=X1-X2

    C=X2*Y1-X1*Y2

    python源代码

    def GeneralEquation(first_x,first_y,second_x,second_y):

    # 一般式 Ax+By+C=0

    # from http://www.cnblogs.com/DHUtoBUAA/

    A=second_y-first_y

    B=first_x-second_x

    C=second_x*first_y-first_x*second_y

    return A,B,C

    点到直线距离

    表达式定义

    设直线L的方程为Ax+By+C=0,点P的坐标为(x0,y0),则点P到直线L的距离为:

    d=\frac{\left | A\times x0+B\times y0+C \right |}{\sqrt{A^{2}+B^{2}}}

    博客园对Markdown插入数学公式支持不友好,可以转移到看github点线关系查看最新版。如果有博客园数学公式插入方法,欢迎留言指教。

    两条直线的交点

    表达式定义

    在已知直线两点的情况下,利用上面的直线一般式可以求得直线的参数A、B和C,那么两条直线的一般式表达可以列成二元一次方程组,其解即为两条直线的交点坐标。注意处理两条直线平行的特殊情况。

    根据二元一次方程的解,假设两条直线的参数分别为A1,B1,C1和A2,B2,C2,那么两条直线的交点可以表示为:

    x=\frac{C2\times B1-C1\times B2}{A1\times B2-A2\times B1}

    y=\frac{C1\times A2-C2\times A1}{A1\times B2-A2\times B1}

    python源代码

    def GetIntersectPointofLines(x1,y1,x2,y2,x3,y3,x4,y4):

    # from http://www.cnblogs.com/DHUtoBUAA/

    A1,B1,C1=GeneralEquation(x1,y1,x2,y2)

    A2, B2, C2 = GeneralEquation(x3,y3,x4,y4)

    m=A1*B2-A2*B1

    if m==0:

    print("无交点")

    else:

    x=(C2*B1-C1*B2)/m

    y=(C1*A2-C2*A1)/m

    return x,y

    程序运行结果:两直线交点为x=32.857142857142854,y=65.71428571428571,符合数学计算。部分内容参考自两条线段是否相交,计算交点公式。

    展开全文
  •  * 函数功能 : 求两直线的交点(参考了Qt里面两直线求交点的算法)  * 输入参数1: pt1 直线1的第1个点  * 输入参数2: pt2 直线1的第2点  * 输入参数3: pt3 直线2的第1个点  * 输入参数4: pt4 ...

    工程源码下载地址:https://download.csdn.net/download/cwj066/10667645

    struct QUICKSORT
    {
        int iIndex;
        float fAngle;

        QUICKSORT(int iIndex, float fAngle)
        {
            this->iIndex = iIndex;
            this->fAngle = fAngle;
        }
        QUICKSORT() {memset(this, 0, sizeof(*this));}
    };

    //定义点结构体
    struct myPoint
    {
        int x; //点的x坐标
        int y; //点的y坐标

        myPoint(){memset(this, 0, sizeof(*this));}
        myPoint(int x, int y)
        {
            this->x = x;
            this->y = y;
        }

        bool operator==(const myPoint &other) const
        {
            return (this->x == other.x && this->y == other.y);
        }
    };

    1:

    展开全文
  • 点间的距离》教案授课题目点间的距离公式授课类型新授课学习目标知识与技能掌握直角坐标系点间的距离,用坐标证明简单的几何问题。过程与方法通过点间距离公式的推导,能更充分体会数形结合的优越性。;。...
  • 怎样证明平行

    2020-12-19 07:37:26
    直线相交只有一个交点 4、在△abc中,∠a=50°,∠b、∠c的平分线交于o点, 则∠boc等于()a.65°b.115°c.80° d.50 5、条平行线被第三条直线所截,那么一组同旁内角的平分线 a.相互重合b.互相平行c.相互...
  • 黑龙江省大庆外国语学校高一数学必修二第二章《2.2 直线、平面平行的判定及其性质》单元测试5一、选择题1、若个平面互相平行,则分别在这个平行平面内的直线( )A.平行B.异面C.相交D.平行或异面2、下列结论中,...
  • 过不在一条直线上的三个点作圆时,只需由条线段的垂直平分线确定圆心即可,事实上,三条线段的垂直平分线交于一点。 3.任意一个三角形都有外接圆,而且有且只有一个外接圆。 豆姐温馨提醒:由于篇幅的限制,不能把...
  • 直线和线段相交平面相交直线-平面相交平面相交三个平面相交实现intersect2D_2Segments()inSegment()intersect3D_SegmentPlane()intersect3D_2Planes()参考文献几何图元的相交是许多计算机图形学和建模应用中的重要...
  • 直线方程的交点

    千次阅读 2019-02-09 13:20:27
    帮一位小伙伴写的作业 题目要求: python3代码实现: &quot;&quot;&... ## 条件约束: 1. 用户输入a,b,c,d,e,f来得到个方程的交点 2. 对于用户的输入进行错误异常处理 ...
  • 三维空间的直线是否相交

    千次阅读 2013-12-18 11:14:56
    直线是否相交? 第一眼看到想到了二维坐标系中的简化版,在二维的空间中,判断条线是否相交,可以分别对横坐标,纵坐标投影,并判断是否都有重合。投影的过程,其实就相当于维度的简化。因此,对于三维...
  • 问题:给出条线段,问线段是否相交?向量叉乘(行列式计算):向量a(x1,y1),向量b(x2,y2):首先我们要明白一个定理:向量a×向量b(×为向量叉乘),若结果小于0,表示向量b在向量a的顺时针方向;若结果大于0,...
  • 1.直线直线的位置关系1——平行但不重合 2.直线直线的位置关系2——重合 3.直线直线的位置关系3——相交 4.直线直线的位置关系4——异面 5. 两直线的夹角的定义 6. 两直线...
  • 三维空间直线距离计算
  • 总结图形学方法处理直线相交问题
  • 所谓几何, 最基本的当然就是坐标, 从坐标中我们可以知道位置和方向,比如:一个点就是一个位置,点确定一条直线,从某点指向另一点的有向线段所在的直线是一向量。要处理几何题,我们又不得不涉及到叉积和点积...
  • 方程的解即交点,无解时直线要么平行,要么重合。 设直线1方程 设直线2方程 当不为0有解。反之无解 现在不给方程,只给直线个点,还求交点。 一开始思路,直线1方程带入(x1,y1)和(x2,y2)。三个...
  • 百年病态集论的症结:几百年将直线段误为同一线段 黄小宁(通讯:广州市华南师大南区9-303 邮编510631) [摘要]将图片A放大为图片B∽A,A不能成为B的一部分;同样,将直线段A放大(拉伸)变为比A长的直线段...
  • 两直线重合直线平行 且不平行于向量 ③直线相交 三个向量共面但s1与s2不平行 四、直线与平面的关系,点和直线和平面的关系 1、直线与平面的关系: 设 , . 记s为l的方向向量 ;π的法向量为 (1)l在π上 s...
  • 如图所示,个三角形重合存在很多种情况,上图举出其中4个例子,本文要讲的是已知个三角形三个顶点坐标,求重叠部分最大三角形的顶点坐标; 虽然已知顶点坐标,位置关系已经确定,但是编程解决的是一类问题,...
  • 变形2.如图,是正方体的平面图...已知空间四边形ABCD各边长与对角线都相等,求异面直线AB与CD所成的角的大小.解:分别取AC、AD、BC的中点P、M、N,连结PM、PN,由三角形中位线性质知PN∥AB,PM∥CD,于是∠MPN就是异面直线A...
  • 直线射线线段的相交判断

    万次阅读 2017-06-29 15:37:36
    本文主要介绍计算机图形学中线型对象的一些几何关系判断,包括直线、射线和线段。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,435
精华内容 2,574
关键字:

两直线重合的条件