Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ch19-smallest-enclosing-circle: 平面上の点群に対し最小包含円を求めるアルゴリズムの実装 #1272

Merged
merged 20 commits into from
Nov 18, 2024

Conversation

Appbird
Copy link
Contributor

@Appbird Appbird commented Nov 13, 2024

このPull Requestは、Siv3Dチャレンジ ch19-smallest-enclosing-circle のもと、平面上の点群に対して最小包含円を求める関数SmallestEnclosingCircleをOpenSiv3Dに実装するものです。開発リポジトリは Appbird/siv3d-smallest-enclosing-circle に存在します。実装やテストの詳細に関してはこちらのリポジトリに設置されたREADME.mdを参照してください。

Important

このPull RequestはSiv3Dライブラリのビルド可否を確認していません。
そのため、ビルドを行えるかのチェックが追加で必要です。

Authors

(敬称略)

  • あぷりばーど
  • Nachia
  • Luke256
  • ラクラムシ
  • polyester
  • sasa

このPull Requestで追加されるもの

以下、名前空間s3dusingしているものとして説明します。

Siv3D/includes/Siv3D/Geometry2D.hppに追加されるもの

  • 名前空間Geometry2D上で、関数SmallestEnclosingCircleの宣言
    • 以下のオーバーロードは全て、与えられた点群に対し最小包含円Circleを返します。
    • a) 3点の場合
      • [[nodiscard]] Circle (const Vec2& p0, const Vec2& p1, const Vec2& p2)
    • b) 4点の場合
      • [[nodiscard]] Circle (const Vec2& p0, const Vec2& p1, const Vec2& p2, const Vec2& p3, double tolerance = 1e-8)
    • c) 一般の点数の場合:乱数生成器と許容誤差を指定可能
      • SIV3D_CONCEPT_URBG [[nodiscard]] Circle (Array<Vec2> points, double tolerance, URBG&& urbg)
    • d) 一般の点数の場合:許容誤差を省略可
      • SIV3D_CONCEPT_URBG [[nodiscard]] Circle (const Array<Vec2>& points, URBG&& urbg, double tolerance = 1e-8)
    • e) 一般の点数の場合(許容誤差・乱数生成器を省略可能)
      • [[nodiscard]] Circle (const Array<Vec2>& points, double tolerance = 1e-8)

Siv3D/includes/Geometry2D.ippに追加されるもの

  • 名前空間detail上で、関数inline bool Contains(const Circle& c, const Vec2& p, const double tolerance = 1e-8)の定義
    • cに点pが含まれているかを判定する補助関数です。
  • 名前空間Geometry2D上で、1.で宣言した関数1-c, 1-dの定義
    • この二つの関数には、引数の乱数生成器に対してテンプレートパラメータが付けられているため、cpp上で定義していません。

Siv3D/src/Siv3D/Geometry2D/SivGeometry2D.cppに追加されるもの

  • 名前空間Geometry2D上で、1.で宣言した関数1-a, 1-b, 1-eの定義。

ヘッダ体裁修正、const Array<Vec2>& → Array<Vec2>
スタイル更新、const Array<Vec2>& → Array<Vec2>
スタイル更新
@Reputeless
Copy link
Member

ToDo

Siv3D/include/Siv3D/Geometry2D.hpp Outdated Show resolved Hide resolved
Siv3D/include/Siv3D/Geometry2D.hpp Outdated Show resolved Hide resolved
Siv3D/include/Siv3D/detail/Geometry2D.ipp Outdated Show resolved Hide resolved
@Reputeless
Copy link
Member

Reputeless commented Nov 17, 2024

  • 11/17 実装会での依頼事項: 他の許容値を扱う関数との一貫性のため「未満」ではなく「以下」にできないか。テストして問題なさそうであれば実装とコメントを修正。

Appbird and others added 3 commits November 18, 2024 08:17
コメントに合わせ「許容誤差以下」であれば円に含まれていると判定するように修正。
@Reputeless Reputeless merged commit 458bec9 into Siv3D:v6_develop Nov 18, 2024
2 checks passed
@Reputeless
Copy link
Member

Merged. Great work!

@Reputeless
Copy link
Member

初コミットだったので、遅くなりましたがこちらご案内します。


◆ 初めて Siv3D にコミットした方へのご案内

コミッタの方の名前を AUTHORS に記載します。
表示する名前をお知らせください。特に希望が無い場合は GitHub プロフィールの ID が使われます。

◆ Organization への招待について

OpenSiv3D 本体および Siv3D ドキュメントのリポジトリにコミットをした方、その他顕著な貢献をされた方には、GitHub の Siv3D Organization メンバー への招待が送られます。
招待を受諾し、上記ページで自身のメンバー参加表示設定を「Public」に変更すると、GitHub の自身のプロフィールページに Siv3D のアイコンが表示されます。「Private」のままだと、自身と他のメンバーにしかアイコンは表示されません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

3 participants