poj 2398 叉積判斷點位置

2021-06-15 06:52:08 字數 1408 閱讀 1669

今天起開始進攻計算幾何題目~

第一題……rumtime了2次(某變數下標出錯),wa了1次(輸出排序出錯……)鬱悶,我明明都已經很仔細檢查**了。

題目貌似有點長,我稍微解釋一下。

題意是在乙個箱子裡面加n個木板把箱子隔成幾個空間,之後有m個玩具隨機落入這幾個空間裡面。(木板不相交)

最後統計有t個玩具的空間有多少個(t>0)

題解:由於題目說了木板不相交的,所以直接根據木板上面或下面的x座標排序就可以得到從左到右的 空間的 右邊木板的座標。

為了遍歷方便,我們直接將箱子左邊界作為第乙個木板,箱子右邊界作為第二個木板,之後對m中的每乙個點進行一次遍歷尋找其所在子區間就可以。

統計完之後就是為了按要求輸出對資料進行一些處理。不多解釋。

[cpp]view plain

copy

#include 

#include 

#include 

#include 

#include 

using

namespace

std;  

const

intmx = 2000;  

struct

po  

}point[mx];  

intcross(po o, po p)

//叉乘

intcheck(po p,

intnum)

//查詢某一點在哪乙個子區間

}  struct

pa//用於處理最後輸出的結構體

}sec[mx];  

intbox[mx];

//統計子空間有多少玩具的陣列

intmain()  

sort(point+1, point+1+n);  

point[0].x1 = point[0].x2 = l.x1;//左邊界作為第一塊木板

point[0].y1 = l.y1;  

point[0].y2 = r.y1;  

point[n+1].x1 = point[n+1].x2 = r.x1;//右邊界作為最後一塊木板

point[n+1].y1 = l.y1;  

point[n+1].y2 = r.y1;  

po a;  

for(

inti=1; i<=m; i++)  

intnum = 0;  

for(

inti=0; i<=n; i++)  

}  sort(sec+1, sec+m);  

printf("box\n"

);  

for(

inti=1; i<=num; i++)  

}  return

0;  

}  

叉積判斷點在多邊形內外 poj2318

計算幾何中長遇到的問題 判斷特定點是否在平面多邊形內部。向量叉積是一種方法,用於凸多邊形。優角 角度值大於180度小於360度。凸多邊形 沿著多邊形的一邊做一條直線,如果剩下所有的部分都在直線的同側,那麼稱這是乙個凸多邊形,凸多邊形是沒有優角的 判斷 連線第i條邊的第乙個端點和測試點成向量u,再連線...

叉積判斷線段 直線相交 POJ3304

給你n個線段的兩端座標 問是否存在一條直線 所有線段在這條直線上的投影有共同點 存在一條直線 所有線段在這條直線上的投影有共同點 有一條線能穿過所有線段 這兩條直線剛好 暴力列舉所有端點 直線與線段相交 叉積 判斷一次就夠啦 線段與線段相交 twice include include include...

poj3304(叉積判斷直線和線段相交)

題意 求是否能找到一條直線,使得n條線段在該直線的投影有公共點。思路 如果存在這樣的直線,那麼在公共投影點作直線的垂線,顯然該垂線會經過所有直線,那麼原題轉換為求是否有經過所有線段的直線。如果存在這樣的直線,那麼該直線一定能通過平移和旋轉之後經過所有線段中的兩個端點,那麼我們列舉所有兩兩線段的端點作...