#author("2023-06-26T11:09:09+09:00","default:kyo-in","kyo-in") #author("2023-07-03T11:03:34+09:00","default:kyo-in","kyo-in") **フィルタリング [#b84a6863] **前回の課題 [#v2b15f98] 前回の課題が自力で解けなかった者は引き続き取り組む. #ref(../第2回/drawstroke.gif,50%); **課題3_1 [#ldec6b6c] ストロークを全て消去するクリアボタンを実装する. ヒント: MainCanvas.Children.Clearメソッドで,MainCanvasに登録されたShapeを全て削除できる. #ref(./kadai3_1.gif,50%); **課題3_2 [#je2f8eb2] 右クリックでストロークを1つ削除する. ヒント: マウスの右クリックであるかどうかは,PointerPoint.Properties.IsRightButtonPressedで判断できる.ただし,これは名前の通り押されていた場合trueになるので,PointerReleaseイベントでは常にfalseである.PointerReleaseイベントで右クリックかどうか判断したい場合はPointerPressedイベントで右クリックだったのか情報を記録しておく必要がある. 実装方法は色々存在するが,例えばPathGeometry.Bounds.Containsメソッドは引数に与えられたPoint型の座標が図形内にあるかどうかboolを返すメソッドである. MainCanvas.Children.Removeメソッドで引数に指定されたインスタンスをリストから削除できる. MainCanvasのChildrenに追加されているPathクラスの一覧(リスト)は var canvasstrokes = MainCanvas.Children.OfType<Windows.UI.Xaml.Shapes.Path>(); で取得できる. #ref(./kadai3_3.gif,50%); **課題3_3 [#b5fe379c] 移動平均フィルタを実装する. ヒント: PolyLineSegment.Pointsにストロークを構成する点が登録されている. 移動平均フィルタはストロークを構成するある点(Piとする)があった時,前後n個の点との平均を取り,その値でPiの座標値を置き換え,その処理をストロークを構成する点全体に適用することでストロークを滑らかにする. 例えばnが3であれば,フィルタ適用後の点Pi'=(Pi-1 + Pi + Pi+1)/3となる.ストローク最初の方の点と,最後の方の点では,インデックス範囲外を参照しないよう注意する. #ref(./kadai3_2.gif,50%); **課題提出方法 [#r54a0cd6] 招待されているBoxアップロードフォルダ「情報メディア基礎ゼミ(森谷)」へ,完成させた課題のソリューションフォルダをZIP圧縮し,ファイルを以下の名前でアップロードしてください. ファイル名:XXFIXXX_3rd.zip(例:18FI999_3rd.zip) ''提出締め切り:6月30日(金) 23:59'' BOXアップロードフォルダの招待メールが来ていない方は森谷までメール連絡ください. //2023/5/22課題:課題3_3を実装したものを提出。 2023/7/3課題:課題3_3を実装したものを提出。 //ファイル名:XXFIXXX_4th.zip(例:18FI999_4th.zip) ファイル名:XXFIXXX_4th.zip(例:18FI999_4th.zip) //''提出締め切り:5月26日(金) 23:59'' ''提出締め切り:7月7日(金) 23:59''