###わからないこと
プログラムで平面上にランダムに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}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/11 05:11