洛谷 P1355 神秘大三角

2021-07-28 06:52:02 字數 2175 閱讀 4436

**

判斷乙個點與已知三角形的位置關係。

若點在三角形內(不含邊界),輸出1;

若點在三角形外(不含邊界),輸出2;

若點在三角形邊界上(不含頂點),輸出3;

若點在三角形頂點上,輸出4。

非常簡單,只要你會

1.讀入,因為有括號,所以我只能先用字串讀,然後慢慢轉成數字。這一步注意,不要忘記資料裡有三位數,要打好相應的**

2.特判點是不是在三角形的頂點上

3.用叉積公式計算點與三角形的每條邊的關係,

叉積公式:

(1)m=0,則點在三角形邊上。

(2)每一次計算完一條邊的m都要判斷m與0的大小關係有無變化,若有變化則點在三角形外

(3)所有邊都判斷完後,就直接輸出1

注意,1和2的順序絕不能調換,因為假如上一次m大於0,而這一次m等於0,此時若先2,上一次m<>這一次m,程式就會判斷點在三角形外

幾個比較容易錯的

(10,10)

(30,40)

(30,10)

(20,25) 答案是3

(1,1)

(3,4)

(1,2)

(2,3) 答案是3

(1,1)

(3,4)

(2,1)

(2,3) 答案是2

var

aa,bb,cc,i,j:longint;

a:array[1..4,1..2]of longint;

s:string;

function

m(x0,y0,x1,y1,x2,y2:longint):longint;

begin

m:=((x1-x0)*(y2-y0))-((x2-x0)*(y1-y0));

if m<0

then

exit(-1);

if m>0

then

exit(1);

end;

begin

for j:=1to4

dobegin

readln(s);

i:=2;

while ido

if s[i-1]='('

then

while s[i]<>','

dobegin

a[j,1]:=a[j,1]*10+ord(s[i])-48;

inc(i);

endelse

if s[i-1]=','

then

while s[i]<>')'

dobegin

a[j,2]:=a[j,2]*10+ord(s[i])-48;

inc(i);

endelse inc(i);

end;

for i:=1to3

doif (a[4,1]=a[i,1])and(a[4,2]=a[i,2]) then

begin writeln('4');exit;end;

aa:=m(a[1,1],a[1,2],a[2,1],a[2,2],a[4,1],a[4,2]);

if aa=0

then

begin writeln('3');exit;end;

bb:=m(a[2,1],a[2,2],a[3,1],a[3,2],a[4,1],a[4,2]);

if bb=0

then

begin writeln('3');exit;end;

if aa<>bb then

begin writeln('2');exit;end;

cc:=m(a[3,1],a[3,2],a[1,1],a[1,2],a[4,1],a[4,2]);

if cc=0

then

begin writeln('3');exit;end;

if aa<>cc then

begin writeln('2');exit;end;

writeln('1');

end.

洛谷P1355 神秘大三角

題目描述 判斷乙個點與已知三角形的位置關係。輸入輸出格式 輸入格式 前三行 每行乙個座標,表示該三角形的三個頂點 第四行 乙個點的座標,試判斷該點與前三個點圍成三角形的位置關係 詳見樣例 所有座標值均為整數。輸出格式 若點在三角形內 不含邊界 輸出1 若點在三角形外 不含邊界 輸出2 若點在三角形邊...

神秘大三角 洛谷P1355 叉積)

判斷乙個點與已知三角形的位置關係。輸入格式 前三行 每行乙個座標,表示該三角形的三個頂點 第四行 乙個點的座標,試判斷該點與前三個點圍成三角形的位置關係 詳見樣例 所有座標值均為整數。輸出格式 若點在三角形內 不含邊界 輸出1 若點在三角形外 不含邊界 輸出2 若點在三角形邊界上 不含頂點 輸出3 ...

洛谷 P1355 神秘大三角 計算幾何基礎

p1355 神秘大三角 題目提供者yeszy 標籤 福建省歷屆夏令營 難度 普及 提高 題目描述 判斷乙個點與已知三角形的位置關係。輸入輸出格式 輸入格式 前三行 每行乙個座標,表示該三角形的三個頂點 第四行 乙個點的座標,試判斷該點與前三個點圍成三角形的位置關係 詳見樣例 所有座標值均為整數。輸出...