zoukankan      html  css  js  c++  java
  • POJ1269求两个直线的关系平行,重合,相交

    依旧是叉积的应用

    判定重合:也就是判断给定的点是否共线的问题——叉积为0

     if(!cross(p1,p2,p3) && !cross(p1,p2,p4))printf("LINE
    ");
    

    因为给的是整数所以用非号来判断

    平行也好说,就用高中知识就行了

     else if((x1 - x2) * (y3 - y4) == (y1 - y2) * (x3 - x4))printf("NONE
    ");
    

     接下来就是求交点了,设焦点为x,那么p1,p2,x共线,p3,p4,x共线对应的叉积为零,这样得出两个不等式二元一次不等式,即可求出x的具体坐标(x.x,x.y) 演草纸在哪~~

    引用一下吧

    如何求出交点?这里也用到叉积的原理。假设交点为p0(x0,y0)。则有:

    (p1-p0)X(p2-p0)=0

    (p3-p0)X(p2-p0)=0

    展开后即是

    (y1-y2)x0+(x2-x1)y0+x1y2-x2y1=0

    (y3-y4)x0+(x4-x3)y0+x3y4-x4y3=0

    将x0,y0作为变量求解二元一次方程组。

    假设有二元一次方程组

    a1x+b1y+c1=0;

    a2x+b2y+c2=0

    那么

    x=(c1*b2-c2*b1)/(a2*b1-a1*b2);

    y=(a2*c1-a1*c2)/(a1*b2-a2*b1);

    因为此处两直线不会平行,所以分母不会为0。

    《我当然也在演草纸上写了,还是很好明白的,大佬写的很详细》

    double a1 = p1.y-p2.y;
    double b1 = p2.x-p1.x;
    double c1 = p1.x*p2.y-p2.x*p1.y;
    double a2 = p3.y-p4.y; double b2 = p4.x-p3.x; double c2 =p3.x*p4.y-p4.x*p3.y; double x = (c1*b2-c2*b1)/(a2*b1-a1*b2); double y = (a2*c1-a1*c2)/(a1*b2-a2*b1); printf("POINT %.2f %.2f ", x, y);
  • 相关阅读:
    var 和 let 的区别
    js初步认识变量
    弹性布局
    盒模型
    多重样式优先级深入概念
    层叠机制--比较特殊性
    anroid抓包工具tcpdump的用法
    linux find grep组合使用
    Protect Broadcast 保护广播
    android:exported 属性详解
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/8540581.html
Copyright © 2011-2022 走看看