#author("2026-07-20T10:22:11+09:00","default:kyo-in","kyo-in")
#author("2026-07-20T10:22:25+09:00","default:kyo-in","kyo-in")
**機械学習による図形描画 [#e2875e85]
機械学習の結果を基に,図形の描画を行う.

今回は,推定結果から楕円と四角どちらかを描画する.

#ref(../第5回/shapepredict.gif,50%);


**図形の推定 [#ab8dd1e6]
前回は文字で推定結果を表示したが,そこで対応する図形をMainCanvasに追加すればよい.

       private void MainCanvas_PointerReleased(object sender, PointerRoutedEventArgs e)
       {
           //drawingStrokeがnullでなければ,描き終わったことを示すためnullにしておく
           if (drawingStroke != null)
           {
               if (strokePredictModel != null)
               {
                   var predEngine = mlContext.Model.CreatePredictionEngine<StrokeData, StrokePredict>(strokePredictModel);
                   var result = predEngine.Predict(GetStrokeData(drawingStroke));
                   if (result.Prediction)
                   {
                       AddMessage("Ellipse");
                       //ここにストロークの位置,大きさで楕円をキャンパスに追加
                   }
                   else
                   {
                       AddMessage("Rect");
                       //ここにストロークの位置,大きさで四角形をキャンパスに追加
                   }
               }
 
               drawingStroke = null;
           }
       }

**ストロークの位置,大きさ [#qd8de941]
 Path.Data.Bounds
によりRect型で取得できる
 var rect = drawingStroke.Data.Bounds;
 //rect.X //ストロークを囲う矩形の左上X座標
 //rect.Y //ストロークを囲う矩形の左上Y座標
 //rect.Width  //ストロークを囲う矩形の横幅
 //rect.Height //ストロークを囲う矩形の縦幅

**図形の生成 [#v12fd481]
楕円はWindows.UI.Xaml.Shapes.Ellipse,四角形はWindows.UI.Xaml.Shapes.Rectangleを使用する.

 var ellipse = new Windows.UI.Xaml.Shapes.Ellipse {
     Stroke = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0)),
     StrokeThickness = 1
 };
 ellipse.Width = 100;
 ellipse.Height = 100;
 MainCanvas.Children.Add(ellipse);
 Canvas.SetLeft(ellipse, 50);
 Canvas.SetTop(ellipse, 50);

**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼミ(森谷)」の「第6回」へ,完成させた課題のソリューションフォルダをZIP圧縮し,ファイルを以下の名前でアップロードしてください.

ファイル名:XXFIXXX_6th.zip(例:18FI999_6th.zip)

''提出締め切り:6月10日(水) 23:59''
''提出締め切り:7月22日(水) 23:59''

BOXアップロードフォルダの招待メールが来ていない方は森谷までメール連絡ください.

*任意課題 [#k5aba3e3]

ストロークの色や太さを変更できる,図形補間のオンオフ,画像の保存など,独自の機能を実装せよ.

ヒント:Shapeクラスの図形もXAMLからUI上に配置し,イベントを持たせることが可能である.

 <Ellipse x:Name="PenColorBlack" Margin="10, 10, 10, 10" Fill="Black" Width="20" Height="20" RelativePanel.Below="PredictModeSwitch" PointerPressed="PenColorBlack_PointerPressed"></Ellipse>
 <Ellipse x:Name="PenColorGreen" Margin="10, 10, 10, 10" Fill="LimeGreen" Width="20" Height="20" RelativePanel.Below="PredictModeSwitch" RelativePanel.RightOf="PenColorBlack" PointerPressed="PenColorGreen_PointerPressed"></Ellipse>

#ref(../第5回/advance.gif,50%);

**課題提出方法 [#r54a0cd6]
招待されているBoxアップロードフォルダ「情報メディア基礎ゼミ(森谷)」の「第6回」へ,完成させた課題のソリューションフォルダをZIP圧縮し,ファイルを以下の名前でアップロードしてください.

ファイル名:XXFIXXX_6th_advance.zip(例:18FI999_6th_advance.zip)

''提出締め切り:7月22日(水) 23:59''

BOXアップロードフォルダの招待メールが来ていない方は森谷までメール連絡ください.

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS