Skip to main content

Module polygon

Module polygon 

Source
Expand description

多角形の幾何演算(面積・重心・点と辺の距離・内包判定)。

床領域・壁領域の検出とリビルド(crate::region_gencrate::region_rebuildcrate::wall_region_rebuild)、床の荷重分配(squid_n_load::floor)、 部材数量の拾い出しが同じ式を必要とするため、ここを唯一の実装とする。

2 次元の関数は座標系を問わない(床は全体 XY、壁は構面の局所 (s, z)、 断面は局所 (y, z) で使う)。長さは mm、面積は mm² を単位とする。

§面積の 3 種

多角形の面積には投影面積と真の面積があり、用途で使い分ける。

  • signed_areaarea — 2 次元多角形のシューレース公式。
  • area_xy — 3 次元の頂点を全体 XY 平面へ投影した面積。床は水平面内にあるため、 床の荷重分配はこちらを使う(分配が見る面積と一致させる)。
  • area_3d — 3 次元の頂点が張る平面上での真の面積(Newell の公式)。 傾いた壁・シェルの自重はこちらを使う。投影面積は傾きのぶんだけ小さく出るため、 自重に投影面積を用いると重量を過小評価する危険側になる。

Constants§

BOUNDARY_TOL_MM
辺上とみなす、点から辺までの距離の上限 [mm]。

Functions§

area
多角形の面積 [mm²](絶対値。頂点の周り方に依らない)。
area_3d
平面多角形(3 次元座標、頂点が同一平面上と仮定)の面積 [mm²]。
area_xy
3 次元の頂点を全体 XY 平面へ投影した多角形の面積 [mm²]。
bounding_box
点群の境界ボックス (最小の角, 最大の角)。空の点群は原点に潰れた箱を返す。
centroid
多角形の面積重心。
contains_by_ray_crossing
レイキャスト(偶奇則)だけで内包を判定する。BOUNDARY_TOL_MM の帯を一切見ない。
contains_excluding_boundary
p が多角形の内部にあるか。辺上(BOUNDARY_TOL_MM 以内)は内部に含めない。
contains_including_boundary
p が多角形の内部または辺上(BOUNDARY_TOL_MM 以内)にあるか。
on_boundary
p が多角形の辺上(頂点を含む)にあるか。辺までの距離が BOUNDARY_TOL_MM 以内を辺上とする。頂点が 2 個未満なら偽。
point_segment_dist
p から線分 ab までの距離 [mm]。
point_segment_dist_sq
p から線分 ab までの距離の 2 乗 [mm²]。
signed_area
多角形の符号付き面積 [mm²](シューレース公式。反時計回りが正)。頂点が 3 個未満なら 0。