一道基本的計算幾何題

2022-06-01 15:24:10 字數 1781 閱讀 1560

題目大意:

兩個人在座標系內,可以通過鏡子的反射來看到對方,但是會有一堵牆阻擋,問兩個人能否看到對方

若兩個人與鏡子共線,則鏡子不會阻擋兩個人的視線。而給出的鏡子和牆不會相交

思路:看到只有兩種情況

第一種 兩個人直接看到

第二種 兩個人直接通過鏡子看到

對於這種情況,我們直接判斷他們是否在鏡子一側,他們與對方對稱點連成的線段與鏡子相交且不與牆相交,這五個東西即可

但是這種情況看上去不符合第二種的判斷但其實是可以看到的,但是如果這種情況就直接看到了,哪還需要什麼鏡子。。。

tat跪了兩個點不知道為什麼 本蒟蒻很無奈

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include

11 #include12

#define inf 2147483611

13#define ll long long

14#define maxn 101010

15using

namespace

std;

16 inline int

read()

1721

while(isdigit(ch))

22return x*f;23}

24struct

node

25a,b,vb,va,m1,m2,w1,w2;

28double mult(node a,node b,node c)//

叉積 29

32bool intct(node a,node b,node c,node d)//

判兩線段是否相交

3342

intmain()

43//

是否能直接看到

49double a=m2.y-m1.y,b=m1.x-m2.x,c=m2.x*m1.y-m1.x*m2.y;//

求鏡子所在直線

50if(a*a.x+b*a.y+c==0&&a*b.x+b*b.y+c==0&&!inw) //

判斷鏡子與兩個人是否共線

51 vb.x=b.x-2*a*(a*b.x+b*b.y+c)/(a*a+b*b);//

求兩個人的翻折點座標

52 vb.y=b.y-2*b*(a*b.x+b*b.y+c)/(a*a+b*b);

53 va.x=a.x-2*a*(a*a.x+b*a.y+c)/(a*a+b*b);

54 va.y=a.y-2*b*(a*a.x+b*a.y+c)/(a*a+b*b);

55 node minf1,minf2;minf1.x=-10101.0,minf2.x=10101.0

;56 minf1.y=(c-a*minf1.x)/b,minf2.y=(c-a*minf2.x)/b;

57if(!intct(a,b,minf1,minf2)&&intct(a,vb,m1,m2)&&intct(b,va,m1,m2)&&!intct(a,vb,w1,w2)&&!intct(va,b,w1,w2))

58//

是否在鏡子同側 點與另乙個人的翻折點是否會穿過鏡子 兩個人的光路是否會穿過牆

59 printf("no"

);60 }

view code

一道簡單的幾何變換

一道簡單的幾何變換 執行時限 1000 ms 單次執行時限 1000 ms 記憶體限制 64 mb 總提交 68次 通過 7次 judge by case 題目描述 小光最近在學習幾何變換,老師給他留了乙個作業,在二維平面上有n個點 x,y 老師給了m個幾何變換對n個點進行操作,要求小光輸出變換後的...

一道演算法題

兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...

一道演算法題

1.上午主要做了對翻譯任務的劃分,下午把 翻譯完畢。2.明天要講的演算法題 對乙個集合,求出其連續元素組成的子集中,和最大的子集 我對這道題的理解是 1 若集合中最小值大於0,意味著所有的都大於0,則最大的子集和,為所有值加起來 2 若集合中最大值小於0,意味著所有的都小於0,則最大的子集和,為集合...