• poj 1269


    水题。判断两条直线位置关系。

    考虑平行的情况,那么 四边形的面积会相等,重合的话,四边形的面积相等且为0.

    除去这两种就一定有交点。

     1 #include <cstdio>
     2 #include <cmath>
     3 #define db double
     4 using namespace std;
     5 const db eps=1e-6;
     6 const db pi = acos(-1);
     7 int sign(db k){
     8     if (k>eps) return 1; else if (k<-eps) return -1; return 0;
     9 }
    10 int cmp(db k1,db k2){return sign(k1-k2);}
    11 struct point{
    12     db x,y;
    13     point operator + (const point &k1) const{return (point){k1.x+x,k1.y+y};}
    14     point operator - (const point &k1) const{return (point){x-k1.x,y-k1.y};}
    15     point operator * (db k1) const{return (point){x*k1,y*k1};}
    16     point operator / (db k1) const{return (point){x/k1,y/k1};}
    17 };
    18 db dot(point k1,point k2){
    19     return k1.x*k2.x+k1.y*k2.y;
    20 }
    21 db cross(point k1,point k2){
    22     return k1.x*k2.y-k1.y*k2.x;
    23 }
    24 int inmid(db k1,db k2,db k3){return sign(k1-k3)*sign(k2-k3)<=0;}
    25 int inmid(point k1,point k2,point k3){//k3在[k1,k2]
    26     return inmid(k1.x,k2.x,k3.x)&&inmid(k1.y,k2.y,k3.y);
    27 }
    28 point getLL (point k1,point k2,point k3,point k4){//两直线交点
    29     db w1=cross(k1-k3,k4-k3),w2=cross(k4-k3,k2-k3);
    30     return (k1*w2+k2*w1)/(w1+w2);
    31 }
    32 bool onS(point k1,point k2,point q){//q在[k1,k2]
    33     return inmid(k1,k2,q)&&sign(cross(k1-q,k2-k1))==0;
    34 }
    35 int checkLL(point k1,point k2,point k3,point k4){//求两条直线是否 (平行||重合)
    36     return cmp(cross(k3-k1,k4-k1),cross(k3-k2,k4-k2))==0;
    37 }
    38 struct Line{
    39     point p[2];
    40 };
    41 
    42 db xl,yl,x2,y2;
    43 int n;
    44 point p[5];
    45 int main(){
    46     scanf("%d",&n);
    47     printf("INTERSECTING LINES OUTPUT
    ");
    48     while (n--){
    49         for(int i=1;i<=4;i++){
    50             scanf("%lf%lf",&p[i].x,&p[i].y);
    51         }
    52         if(checkLL(p[1],p[2],p[3],p[4])){
    53             if(sign(cross(p[1]-p[3],p[2]-p[3]))==0){
    54                 printf("LINE
    ");
    55             } else{
    56                 printf("NONE
    ");
    57             }
    58         } else{
    59             point tmp = getLL(p[1],p[2],p[3],p[4]);
    60             printf("POINT %.2f %.2f
    ",tmp.x,tmp.y);
    61         }
    62     }
    63     printf("END OF OUTPUT
    ");
    64 }
    View Code
  • 相关阅读:
    LeetCode 788. Rotated Digits
    LeetCode 606. Construct String from Binary Tree
    LeetCode 13. Roman to Integer
    LeetCode 387. First Unique Character in a String
    LeetCode 520. Detect Capital
    LeetCode 557. Reverse Words in a String III
    RSA加密算法及其与SpringMVC集成
    用phantomjs 进行网页整页截屏
    redis应用场景
    MQ产品比较-ActiveMQ-RocketMQ
  • 原文地址:https://www.cnblogs.com/MXang/p/10425370.html
Copyright © 2020-2023  润新知