题目大意:
给出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.