p1560.pas

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· PAS 代码 · 共 98 行

PAS
98
字号
PROGRAM p1560;

TYPE
        Pointtype=record
                x,y,k           :Extended;
        end;

VAR
        part,p                  :Integer;
        a,b                     :PointType;

PROCEDURE Change(var a,b:PointType);
var
        temp                    :Pointtype;
begin
temp:=a;
a:=b;
b:=temp;
end;

PROCEDURE make(var t:PointType);
begin
if (t.k<=90) then t.k:=90-t.k
        else
if (t.k<=180) then t.k:=270-t.k
        else
if (t.k<=270) then t.k:=270-t.k
        else
        t.k:=450-t.k;
end;

PROCEDURE Out(x:Extended);
begin
if (x<0)and(abs(x)<0.000049) then write('0.0000')
        else write(round(x*10000)/10000:0:4);
end;

PROCEDURE Main;
var
        ans_x,ans_y             :Extended;
begin
//with a do writeln(x:0:0,' ',y:0:0,' ',k:0:0);
//with b do writeln(x:0:0,' ',y:0:0,' ',k:0:0);
make(a);
make(b);



a.k:=a.k/180*pi;
b.k:=b.k/180*pi;



if (a.k>=pi) then a.k:=a.k-pi;
if (b.k>=pi) then b.k:=b.k-pi;



if (abs(a.k-pi/2) > abs(b.k-pi/2)) then change(a,b);



if abs(a.k-pi/2)<0.00001 then
        begin

        ans_x:=a.x;
        ans_y:=sin(b.k)/cos(b.k) *(ans_x-b.x)+b.y;
        end else
        begin
        a.k:=sin(a.k)/cos(a.k);
        b.k:=sin(b.k)/cos(b.k);



        ans_x:=(b.y-a.y+a.x*a.k-b.x*b.k)/(a.k-b.k);
        ans_y:=ans_x * a.k - a.x * a.k + a.y;
        end;

out(ans_x);
write(' ');
out(ans_y);
writeln;
end;

BEGIN
assign(output,'p.out');
rewrite(output);
assign(input,'p.in');
reset(input);
readln(part);
for p:=1 to part do
        begin
        with a do readln(x,y,k);
        with b do readln(x,y,k);
        Main;
        end;
close(output);
END.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?