zoukankan      html  css  js  c++  java
  • 判断线段之间的关系(D

    题目链接:https://vjudge.net/contest/276358#problem/D

    题目大意:每一次给你两条直线,然后问你这两条直线的关系(平行,共线,相交(输出交点))。

    具体思路:先判断共线,再去判断平行,其次是相交,这些都能通过叉积来判断。

    首先输入的是四个点,P1,P2,P3,P4.

    共线的话,我们线确定一条直线,P1,P2。然后我们看p1,p2,p3这三个点形成的两条线是不是为0,然后再去看p1,p2,p4形成的两条直线是不是也是0,如果都满足的话,就是共线。

    平行的话,就看这两条直线的叉积是不是0就可以了。

    共线的话,推公式就可以了。假设交点,然后就是两个两元表达式,就可以把交点求出来了。

    AC代码:

     1 #include<iostream>
     2 #include<stack>
     3 #include<stdio.h>
     4 #include<iomanip>
     5 #include<cmath>
     6 using namespace std;
     7 # define ll long long 
     8 const int maxn = 300+100;
     9 const double eps = 1e-8;
    10 int cal(int x1,int y1,int x2,int y2){
    11 return x1*y2-x2*y1;
    12 }
    13 int main(  )  {
    14     int T;
    15     int x1,y1,x2,y2;
    16     int x3,y3,x4,y4;
    17     double  a1,a2,b1,b2,c1,c2;
    18     scanf("%d",&T);
    19     printf("INTERSECTING LINES OUTPUT
    ");
    20     while(T--){
    21     scanf("%d %d %d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
    22     if(cal(x2-x1,y2-y1,x3-x1,y3-y1)==0&&cal(x2-x1,y2-y1,x4-x1,y4-y1)==0)  {
    23           printf("LINE
    ");
    24     }
    25     else if(cal(x2-x1,y2-y1,x4-x3,y4-y3)==0){
    26         printf("NONE
    ");
    27     }
    28     else {
    29         a1=y1-y2;
    30         a2=y3-y4;
    31         b1=x2-x1;
    32         b2=x4-x3;
    33         c1=x1*y2-x2*y1;
    34        c2=x3*y4-x4*y3;
    35         printf("POINT %.2lf %.2lf
    ",(c1*b2-c2*b1)/(a2*b1-a1*b2),(c1*a2-c2*a1)/(b2*a1-b1*a2));
    36     }
    37     }  
    38     printf("END OF OUTPUT
    ");
    39     return 0;
    40 }
  • 相关阅读:
    java 使用相对路径读取文件
    appium 使用过程问题踩坑-笔记
    CentOS下启动Tomcat
    jodis遇到的问题
    CentOS 7.0 防火墙
    sentinel
    keepalived
    在Tomat7上使用Redis保存Session
    Log4j 使用
    java路径问题
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10339422.html
Copyright © 2011-2022 走看看