POJ P1269 Intersecting Lines

题目大意:

给出N个询问,每个询问给出分别2条直线中的2个点,判断是否相交,平行,亦或者共线。

-1000≤x,y≤1000
1≤N≤10

题解:

A是A了,不过自己还不是很清楚,先放着,高中了再来深入探究,先记着公式跟推理过程

传送门

代码:

var
    a,b,a1,b1,c1,a2,b2,c2:double;
    x1,x2,x3,x4:double;
    y1,y2,y3,y4:double;
    i,n:longint;

function display(a1,b1,a2,b2,a0,b0:double):double;
begin
    exit((a1-a0)*(b2-b0)-(a2-a0)*(b1-b0));
end;

begin
    readln(n);
    writeln('INTERSECTING LINES OUTPUT');
    for i:=1 to n do
       begin
            readln(x1,y1,x2,y2,x3,y3,x4,y4);
            if (display(x1,y1,x2,y2,x3,y3)=0) and
               (display(x1,y1,x2,y2,x4,y4)=0)
               then writeln('LINE')
               else if (x2-x1)*(y4-y3)-(x4-x3)*(y2-y1)=0
                       then writeln('NONE')
                       else begin
                                 a1:=y1-y2;
                                 b1:=x2-x1;
                                 c1:=x1*y2-x2*y1;
                                 a2:=y3-y4;
                                 b2:=x4-x3;
                                 c2:=x3*y4-x4*y3;
                                 a:=(b1*c2-b2*c1)/(a1*b2-a2*b1);
                                 b:=(a2*c1-a1*c2)/(a1*b2-a2*b1);
                                 writeln('POINT ',a:0:2,' ',b:0:2);
                            end;
       end;
    writeln('END OF OUTPUT');
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值