Offer 收割程式設計練習賽 87B 方圓距離

2022-09-17 12:45:07 字數 1058 閱讀 6124

與座標軸平行的矩形和圓的位置關係。

分兩種情況。

此時答案為零。問題歸結為如何判斷圓與矩形交集不為空。

先排除矩形頂點在圓內或圓心在矩形內。

此時,若矩形與圓交集不為空,則必有矩形的某條邊穿過圓(「穿過圓」也可表述為「割圓」,「線段穿過圓」的確切定義為「線段與圓周有兩個交點」)。注意:這樣的邊可能不止一條。

問題歸結為如何判斷線段是否割圓。

矩形的左下頂點為 $(x_1, y_1)$,右上頂點為 $(x_2, y_2)$,圓心為 $(x, y)$,半徑為 $r$ 。

不失一般性,考慮矩形的底邊 $(x_1, y_1) , (x_2, y_1)$ 割圓的條件。

性質

在排除了矩形的某個頂點在圓內或圓心在矩形內的條件下,矩形的底邊上有點在圓內當且僅當

$x_1 < x < x_2$ 且 $|y - y_1| \le r$ 。

其餘邊的情形是類似的。

此時應當注意到:

矩形上距離圓周最近的點必然在邊界上。

矩形邊界上任意一點 $p$ 到圓周的最短距離為 $|pc| - r$,$|pc|$ 表示 $p$ 到圓心 $c$ 的距離。

問題歸結為求圓心 $c$ 到矩形邊界的最短距離,亦即點到線段的最短距離

備選的點(candidates)是圓心在四條邊所在的直線上的垂直投影(即垂足)與邊的端點。

如果「圓心在矩形的某條邊所在的直線上的垂直投影」落在這條邊上則此投影點是這條邊上的備選點,否則這條邊的兩端點是這條邊上的備選點。

(這一部分內容還在建設中)

首先假設我們想要的座標變換是乙個線性變換。

任取矩形的乙個頂點 $a$,作為此線性變換的不動點。設 $a$ 的座標為 $(x_a, y_a)$ 。

任取 $a$ 的乙個鄰點 $b$,使得 $\vec$ 是變換過後的 $x$ 軸正方向,亦即 $b$ 變換過後的座標為 $(x_a + |ab|, y_a)$,$|ab|$ 表示線段 $ab$ 的長度。

問題歸結為求點到線段的最短距離。

Offer收割 程式設計練習賽1

做了三題,題目都比較暴力。a題 題意 給你乙個三階的幻方,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。現在準備將乙個三階幻方中的一些陣列抹掉 0代替 交給你來進行還原,並且希望她能夠判斷出究竟是不是只有一組解。如果只有一組解,輸出該三階幻方...

Offer收割 程式設計練習賽7

比較容易想到是o n 2 的解決方案,遍歷n種刪除可能,每次遍歷o n 時間求總高度。前者優化比較困難,因而想辦法優化每次遍歷求高度的時間。由前往後遍歷,當刪除第i個時,先前的排版是連續的,從而通過計數器等累加方法可以求得已完整行的總高度presum,以及當前未完整行的w,h。include def...

Offer收割 程式設計練習賽26

題解 按照條件求解出最大的三角形和最小的三角形,然後求重心即可。這裡求解面積有兩種方法 海 式 p p a p b p c 將三角形的每一條邊求解出來,然後進行處理 用有向向量進行計算,如果設a x0,y 0 b x1,y 1 c x2,y 2 三點為三角形三個頂點,a 為有向面積,那麼2a x0 ...