题目描述
判断一个点与已知三角形的位置关系。
输入输出格式
输入格式:
前三行:每行一个坐标,表示该三角形的三个顶点
第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系
(详见样例)
所有坐标值均为整数。
输出格式:
若点在三角形内(不含边界),输出1;
若点在三角形外(不含边界),输出2;
若点在三角形边界上(不含顶点),输出3;
若点在三角形顶点上,输出4。
输入输出样例
输入样例#1:
(0,0) (3,0) (0,3) (1,1)
输出样例#1:
1
var
x,y:array[1..4] of longint;
i,j,k,l,n,m,x0,y0:longint;
procedure init;
var
s,ss:string;
i,len,k:longint;
begin
for i:=1 to 4 do
begin
readln(s);
delete(s,1,1);
k:=pos(',',s);
ss:=copy(s,1,k-1);
val(ss,x[i]);
delete(s,1,k);
len:=length(s);
ss:=copy(s,1,len-1);
val(ss,y[i]);
end;
x0:=x[4];
y0:=y[4];
end;
procedure main;
var
i,j,k,max,ans:longint;
s1,s2,s3:longint;
begin
for i:=1 to 3 do
if (x0=x[i]) and (y[i]=y0) then
begin
writeln('4');
exit;
end;
ans:=abs((x[2]-x[1])*(y[3]-y[1])-(x[3]-x[1])*(y[2]-y[1]));
s1:=abs((x[1]-x0)*(y[2]-y0)-(x[2]-x0)*(y[1]-y0));
s2:=abs((x[1]-x0)*(y[3]-y0)-(x[3]-x0)*(y[1]-y0));
s3:=abs((x[2]-x0)*(y[3]-y0)-(x[3]-x0)*(y[2]-y0));
if (s1=0) or (s2=0) or (s3=0) then
begin
writeln('3');
exit;
end;
max:=s1+s2+s3;
if ans=max then writeln('1');
if max>ans then writeln('2');
end;
begin
init;
main;
end.