zoukankan      html  css  js  c++  java
  • poj 1269 Intersecting Lines 求直线交点 判断直线平行共线

    一、判断是否共线
          相当于判断三点是否共线,叉积等0是即为共线。
    二、判断是否平行
         设向量A=(a,b)
            向量B=(c,d)
      若向量A与B平行则
    a/c=b/d;
    三、求交点

    这里也用到叉积的原理。假设交点为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

    参考阅读:http://dev.firnow.com/course/3_program/c++/cppjs/20100528/206336.html

    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    #include<cmath>
    using namespace std;
    struct point
    {
    double x,y;
    };
    point inter(point u1,point u2,point v1,point v2)
    {
    point ret=u1;
    double t=((u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x))
            /((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x));
    ret.x+=(u2.x-u1.x)*t;
    ret.y+=(u2.y-u1.y)*t;
    return ret;
    }
    bool judge(point p1,point p2,point p3)
    {
    if((p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x)==0)
    return true;
    else 
    return false;
    }
     
    int main()
    {
    int cas;
    point p1,p2,p3,p4,ans;
    scanf("%d",&cas);
    printf("INTERSECTING LINES OUTPUT\n");
    while(cas--)
    {
    scanf("%lf%lf%lf%lf",&p1.x,&p1.y,&p2.x,&p2.y);
    scanf("%lf%lf%lf%lf",&p3.x,&p3.y,&p4.x,&p4.y);
    if(judge(p1,p2,p3)&&judge(p1,p2,p4))
    printf("LINE\n");
    else if((p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x)==0)
    printf("NONE\n");
    else
    {
    ans=inter(p1,p2,p3,p4);
    printf("POINT %.2f %.2f\n",ans.x,ans.y);
    }
    }
    printf("END OF OUTPUT\n");
    return 0;
    }
  • 相关阅读:
    单div绘制多元素图
    js笔试题系列之二——数组与对象
    JS设计模式——策略模式
    js笔试题系列之三——函数
    zepto.js中的Touch事件
    java定时任务之Scheduled注解
    汤姆大叔送书,咱也科学抢书
    Asp.net Mvc自定义客户端验证(CheckBox列表的验证)
    摆脱烂项目
    我的ORM发展史
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740227.html
Copyright © 2011-2022 走看看