考慮乙個二維平面,攝像機在(0,0)(0,0)的位置,初始時平面上沒有障礙物。現在執行qq次操作,操作有兩種(假設這是第ii次操作,1≤i≤q1≤i≤q):
1、給定x0,y0,x1,y1(x0
2、給定向量(x,y)(x,y),會有乙個動點從攝像機所在的(0,0)(0,0)位置出發,以(x,y)(x,y)所指的方向前進,直到碰到第乙個障礙物為止。
對於第2種操作,輸出最先碰到的障礙物的編號。若不會碰到任何障礙物,輸出0。
輸入檔案第一行乙個正整數qq,表示操作總數。
接下來的qq行,每行第乙個正整數opiopi為操作種類(保證為1或2)。如果為1,則接下來四個正整數x0,y0,x1,y1(x0
輸出檔案包含rr行(rr為第2種操作的總數),每行乙個正整數,表示第乙個碰到的障礙物編號。
10
1 3 3 10 4
1 4 2 5 6
2 6 2
1 2 8 4 10
1 0 6 3 9
2 5 2
2 8 6
2 2 9
2 4 7
1 5 7 10 10
122
50
樣例2
樣例解釋
在9次操作之後,平面的一部分如圖所示(箭頭為所有第2種操作詢問的路線)。
資料範圍
對於30% 的資料:q≤1000q≤1000。
對於另外30% 的資料:0≤x0,y0,x1,y1,x,y≤2000≤x0,y0,x1,y1,x,y≤200。
對於100% 的資料:q≤105,0≤x0,y0,x1,y1,x,y≤109,x0
noip2018模擬-南外
題解:乙個障礙物可以擋住乙個範圍以內的斜率,依照這個,我們可以以斜率為下標建立乙個線段樹,裡面維護的是斜率為k第乙個遇到的障礙物編號。然而我們可能交乙個障礙物於側面或者下面,所以要把橫縱座標分開維護,開兩個線段樹維護,具體實現比較繁瑣,**實現能力有待提高。。。。。。。
#include#include#include#include#include#define eps 1e-6
using namespace std;
typedef double db;
mapdk;
struct nodes[100005];
struct nodetre1[1200005],tre2[1200005];
//1 x 2 y
int q,tot,cnt,iid,mx,my;double xl[500005],vv;
void build(int k,int l,int r)
void update1(int k,int l,int r,int v,int id)
int mid=tre1[k].l+tre1[k].r>>1;
if(l<=mid)update1(k*2,l,r,v,id);
if(r>mid)update1(k*2+1,l,r,v,id);
}void update2(int k,int l,int r,int v,int id)
int mid=tre2[k].l+tre2[k].r>>1;
if(l<=mid)update2(k*2,l,r,v,id);
if(r>mid)update2(k*2+1,l,r,v,id);
}void ask1(int k,int t)
void ask2(int k,int t)
int main()
else
}sort(xl+1,xl+1+tot);
for(int i=1;i<=tot;++i)if(!dk[xl[i]])dk[xl[i]]=++cnt;
build(1,1,cnt);
for(int i=1;i<=q;++i)
if(!s[i].y0)
}else
double t=dk[atan2(s[i].y0,s[i].x0)];
int iid1,iid2;double xx,kk=(db)s[i].y0/s[i].x0;
vv=1e18;iid=0;ask1(1,t);
iid1=iid;xx=(db)vv;
vv=1e18;iid=0;ask2(1,t);
iid2=iid;
if(!iid1||!iid2)
int ans;
vv/=kk;
/*if(vv-xx>-eps)ans=iid1;
else if(xx-vv>-eps)ans=iid2;
else ans=max(iid1,iid2);*/
if(vv>xx||(fabs(vv-xx)iid2)) ans=iid1;
else ans=iid2;
printf("%d\n",ans);}}
}
光線追蹤(raytracing)
考慮乙個二維平面,攝像機在 0,0 0,0 的位置,初始時平面上沒有障礙物。現在執行qq次操作,操作有兩種 假設這是第ii次操作,1 i q1 i q 1 給定x0,y0,x1,y1 x0 2 給定向量 x,y x,y 會有乙個動點從攝像機所在的 0,0 0,0 位置出發,以 x,y x,y 所指的...
光線追蹤(raytracing)
考慮乙個二維平面,攝像機在 0,0 0,0 的位置,初始時平面上沒有障礙物。現在執行qq次操作,操作有兩種 假設這是第ii次操作,1 i q1 i q 1 給定x0,y0,x1,y1 x0 2 給定向量 x,y x,y 會有乙個動點從攝像機所在的 0,0 0,0 位置出發,以 x,y x,y 所指的...
實現光線追蹤
參考文章 作者正大三,剛好選修到計算機圖形學這門課,基於興趣,便試著實現全域性光照的效果,由此,寫下此篇文章。所謂光線追蹤,是指從眼睛出發,經過影象平面每一畫素,投射光線到場景中,求該光線與場景中幾何圖形的最近交點,然後求該交點的顏色屬性,並將該顏色值記錄下來,再根據相交點的材質判斷性地進行反射 折...