首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

幾何演算法:判斷直線段是否構成封閉怪獸陷阱(原點包含性判定)

     編輯:程式設計疑難解答

問題描述

給定 n 條線段(n ≤ 100),端點座標整數範圍 [-50, 50],怪獸固定在原點 (0,0)。線段不經過原點,任意兩線段最多一交點,無三線段共點,交點距離 > 1e-5。判斷這些線段是否圍成封閉區域將原點包住(無縫隙)。

核心思路:射線法判斷點在多邊形內

  1. 將所有線段視為平面圖的邊,計算所有交點,構建平面圖的 DCEL(雙連邊表)或簡化的邊結構。
  2. 從原點向任意方向(如 +X 軸)發射射線,統計射線與所有線段的交點數。
  3. 若交點數為奇數 → 原點在封閉區域內 → 輸出 "yes";偶數 → "no"。

關鍵細節處理

  • 線段相交判定:向量叉積法,排除共線重疊(題目保證最多一交點)。
  • 射線與線段交點計算:參數方程求解,注意端點邊界情況(射線通過端點時避免重複計數)。
  • 數值穩定性:座標範圍小,double 精度足夠;題目保證交點距離 > 1e-5,無退化情況。

複雜度分析

  • 線段對檢查相交:O(n²) = 10⁴ 量級,極快。
  • 射線掃描:O(n) 每條線段檢查一次。
  • 總體 O(n²) 完全滿足限制。

參考實作

完整 AC 代碼與幾何模板可參考:CSDN 題解

怪獸陷阱示意圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved