光線追蹤(raytracing)

2021-09-10 22:31:19 字數 2082 閱讀 5071

考慮乙個二維平面,攝像機在(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模擬-南外

好題。我一看是計算幾何,就方了,

結果是道線段樹。。。

橫縱座標分開處理

把所有有用的點按斜率離散化,於是一段線段就變成了一段區間。

那麼修改操作就是區間取max

查尋出x,y的最小值然後取較小的(先碰到)

注意判x, y為0的情況

本題奇技淫巧:

線段樹不下傳標記,查詢時每層取max(ccj線段樹?orz)

把x=x*k化為y來比較而不是y=y/k 避免精度**

double 開 long double 避免精度**

或者用atan2

#include#include#include#include#include#include#include#define maxn 400005

#define db long double

#define inf 2e9

using namespace std;

int q,n,x,y,top,li,ri,pl,ansx,xid,ansy,yid;

db xl[maxn],kk,k1,k2,k3;

struct nodes[maxn];

mapls;

struct notree[maxn*2][2];

bool cmp(db aa,db bb)

void build(int k,int l,int r)

void add(int k,int val,int id,int p)return;

}int mid=tree[k][p].l+tree[k][p].r>>1;

if(li<=mid)add(k*2,val,id,p);

if(ri>mid)add(k*2+1,val,id,p);

}void ask(int k)

db chu(int y,int x)

int main()

else

}sort(xl+1,xl+top+1,cmp);int tot=0;

for(int i=1;i<=top;i++)

//cout}}

}return 0;

}

posted @

2018-10-27 21:12

liankewei 閱讀(

...)

編輯收藏

光線追蹤(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 所指的...

3994 光線追蹤(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 光線追蹤演算法

實際上叫反向光線追蹤 backward raytracing 因為計算是從camera開始發射光線,而不是從光源發射光線。反向光線追蹤步驟 1 camera的膠片被分成離散的網格 即畫素點 我們的目標是確定每乙個畫素點的顏色值。2 對於每乙個畫素,從camera位置追蹤一條光線,指向該畫素點 3 對...