質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

2296閲覧

[Visual Stadio2019]100個の点群からの凸包を生成したい

GReBan

総合スコア5

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

1グッド

0クリップ

投稿2021/11/10 17:34

###わからないこと
プログラムで平面上にランダムに100個の点を表示させて、その凸包を描画するプログラムを作成したいが、色々と調べて言葉としてはわかるものの、プログラムの部分でどのように実現させればいいかわからない。

###現在の解釈
凸包の領域は、辺を半時計回りに廻った場合、常に各辺の左側になる。
⇒ある点が凸包内部にあるか判断ができる。

x成分が最高値の点を出す。

その点から各点へのベクトルのうち、y軸方向と最も角度が小さいものを探す。

辺と各点へのベクトルのうち角度が小さいものを探して繰り返せばできる?

###サンプルコード
現在課されたお題にサンプルコードが上がったので記載しておきます。

C#

1using FK_CLI; 2using System; 3 4 5namespace Kadai5_1 6{ 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 // ウィンドウの生成 12 var window = new fk_AppWindow(); 13 window.Size = new fk_Dimension(600, 600); 14 window.BGColor = new fk_Color(1.0, 1.0, 1.0); 15 window.TrackBallMode = true; 16 window.Open(); 17 18 // 点群配列作成 19 var posArray = new fk_Vector[100]; 20 var point = new fk_Point(); 21 for (int i = 0; i < 100; i++) 22 { 23 // x,y成分を -25~25までのランダムに設定する。 24 posArray[i] = new fk_Vector(fk_Math.DRand(-25.0, 25.0), fk_Math.DRand(-25.0, 25.0), 0.0); 25 // point変数に頂点を追加 26 point.PushVertex(posArray[i]); 27 } 28 29 // 点群表示用モデルの準備 30 var pointModel = new fk_Model(); 31 pointModel.Shape = point; 32 pointModel.PointColor = new fk_Color(0.0, 0.0, 0.0); 33 pointModel.PointSize = 2.0; 34 window.Entry(pointModel); 35 36 // 線分群表示用モデルの準備 37 var line = new fk_Line(); 38 var lineModel = new fk_Model(); 39 lineModel.Shape = line; 40 lineModel.LineColor = new fk_Color(0.0, 0.0, 1.0); 41 window.Entry(lineModel); 42 43 44 45 // 両端点の位置ベクトルを指定して線分を追加 46 for (int i = 1; i < posArray.Length; i++) 47 { 48 line.PushLine(posArray[0], posArray[i]); 49 } 50 51 while (window.Update() == true) 52 { 53 } 54 } 55 } 56}
TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

現在の解釈

素朴な実装は、それでいいんじゃないですかね?(私は数学はからっきしですが^^;

意味は分かるがコードが思いつかないということだったら、↓に擬似コードがあります。C#に翻訳することも容易かと思います。
ギフト包装法 - Wikipedia


そもそも日本語で検索しても、いくつかは見つかりました。
凸包 アルゴリズム C# - Google 検索

日本語では物足りない場合は、英語で検索してください。
Convex hull algorithm C# - Google 検索

各アルゴリズムの説明・詳細なベンチマーク・C#実装時の注意点等、非常によい記事だと思います。
Fast and improved 2D Convex Hull algorithm and its implementation in O(n log h) - CodeProject

投稿2021/11/10 21:26

TN8001

総合スコア9851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GReBan

2021/11/11 05:11

たくさんの参考ページありがとうございます! 英語での検索はしてなかったので、参考にさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問