SlideShare a Scribd company logo
~ 技術ひろば.net 勉強会版 ~




瀬尾佳隆 (y.seo@seosoft.jp)
 Microsoft MVP for Visual C#


            技術ひろば.net 2011年3月
                               1
   瀬尾 佳隆 (せお よしたか)
    ◦ MVP for Visual C# (Jan 2009 – Dec 2011)
    ◦ 最近は Silverlight と SharePoint がお友達
    ◦ でも、とってもよくハマる (泣)


    ◦   メール ・・・ y.seo@seosoft.jp
    ◦   Blog ・・・ http://yseosoft.wordpress.com/
    ◦   Twitter ・・・ http://twitter.com/seosoft
    ◦   Facebook ・・・ http://www.facebook.com/seosoft

    ◦ 個人事業主です(屋号は瀬尾ソフト)


                                                       2
   Silverlight でマルチタッチなアプリケーションを
    作る勘所を共有します
    ◦ Silverlight でのマルチタッチアプリケーション開発で
      ほんのちょっとだけ苦労する理由
    ◦ タッチ対応なしからマルチタッチマニピュレーションまで
      順を追って進めていきます

    ◦ 高校時代の数学をちょっとだけ思い出していただきます

   Developers Summit 2011 の MVP LT のネタを
    具体的なコードの紹介まで踏み込んでみます

                                           3
   プロローグ
   Step 0 : タッチ対応なし
   Step 1 : シングルタッチに対応してみる
   Step 2 : マルチタッチ対応の前に
   Step 3 : 座標変換クラスを用意する
   Step 4 : マルチタッチマニピュレーション

   まとめ



                               4
Silverlight はマルチタッチが
ちょっとだけ苦手




                       5
   マルチタッチマニピュレーション
    ◦ スマートフォンや iPad でお馴染みの
      「2本指で画面上のものを回したり拡大したりする 」
      アレのこと



   ということで、本題に戻ります




                                  6
   Silverlight ではマルチタッチサポートが少なめ
    ◦ タッチポイントは取れるが、
      マニピュレーションの API は持っていない
       ちなみに同じ Silverlight でも Windows Phone 7 は
        リッチな API を持ってます
                      WM_TOUCH      WM_GESTURE       Manipulation
                                                     & Inertia

    Win 32                  〇              ◎              〇

    Silverlight             〇              ×              ×

    WPF                     〇                    〇

                  http://msdn.microsoft.com/ja-jp/ff604678.aspx より
                                                                     7
   API がないなら自前で座標演算すればいい
    ◦ タッチポイントは取れるし
    ◦ Matrix クラスがあるし (これは後述)



   やってみると、想像したよりは難しくなかった!
    ◦ 「簡単だ」とは一言も言ってません




                               8
タッチイベントは自動的に
マウスイベントに昇格される




                9
   Windows アプリは、シングルタッチの範囲ならば、
    何もしなくても “タッチ対応” アプリでもある
    ◦ マウス操作できることはタッチ操作でもできる
    ◦ 1点目のタッチは OS 内部でマウスイベントに昇格される
      昇格が都合が悪ければ、アプリで止めることもできる
      実際、マニピュレーションには昇格は不都合

    ◦ ただし、マウス操作を前提としたアプリはポイントの領域が
      狭いことが多い
      タッチ操作できることと、タッチに最適化されているかどうかは
       別の話



                                       10
   写真を画面上に表示するアプリ
    ◦ マウス操作、タッチ操作で写真を移動します
    ◦ 最後には回したり大きくしたりするのが今日のゴール


   まずは実装しているのはマウスイベントだけのデモ
    ◦ タッチでも操作できることを一応確認しておきます
    ◦ この後のためにソースコードも簡単に見ておきます




                                 11
12
13
積極的にタッチイベントを処理
まずはオブジェクトの移動から




                 14
   タッチ操作の意味は、アプリケーションごとに異なる
    ◦ フリック操作で、大きな領域の移動やページ移動の意味
    ◦ 原点の表示位置が固定されたグラフでは、
      シングルタッチを拡大率の変更と考えてもよい
    ◦ シングルタッチ=オブジェクトの移動 が一般的(?)


   今回の Step 0 のデモではオブジェクトの移動と
    考えるのが自然
    ◦ 今回は、「シングルタッチはオブジェクト移動」として続けます




                                      15
   1点目のタッチイベントを自前でハンドリング
    ◦ 自動的にマウスイベントに昇格されるのを止める
    ◦ コードは定型的




                               16
   OS からのタッチ入力は Static な Touch クラスが受け取る
    (FrameReported イベント)
   マウスイベントへの昇格を止めるには
    SuspentMousePromotionUntilTouchUp メソッド
   タッチポイントは:
    ◦ プライマリ(1点目のポイント)・・・GetPrimaryTouchPoint
    ◦ すべてのポイント(プライマリも含む)・・・GetTouchPoints




                                               17
18
Matrix クラスと高校時代の “行列”




                        19
   いよいよ回転と拡大
   Silverlight はマニピュレーション用 API を
    持っていない(前述)

   が、座標変換に使う Matrix クラスがある
    ◦ これを使ってみましょう
   Matrix と言うくらいなので、行列 です
    ◦ 高校時代の数学でやったアレ




                                    20
   System.Windows.Media.Matrix クラス
    ◦ public Matrix(double m11, double m12,double
      m21, double m22, double offsetX, double
      offsetY)
    ◦ これを
      UIElement.RenderTransform.MatrixTransform
      に代入します

                             m11, m22 ・・・ X, Y 方向の拡大率
                             m12, m21 ・・・ 傾斜

                             ※第3列は (0, 0, 1) 固定なので、
                             Matrix クラスでは指定しない
                             (アフィン変換行列)
   行列の積
   行列の積




例えば、1行1列の値は、
1つめの行列の1行目 と 2つめの行列の1列目
の各要素ごとの積を足したもの
   平行移動


   拡大(縮小)


   回転




      こんなものだと思って、覚えて(覚えたふりして)ください
Matrix クラスを実際に利用して
座標変換メソッド群




                     25
   例
    ◦ 北東に (約) 1.4km 進むのは、東に 1km、北に 1km
      進むのと同じ
    ◦ 自動車のドリフトは、移動の座標変換と回転の座標変換の
      掛け合わせ
   回転の行列、拡大の行列、移動の行列を用意して、
    順に掛け合わせれば任意の座標変換ができる
    ◦ 厳密には、任意の「平面上の」座標変換と言うべき(?)
      数学的にはこれを満たす行列のことを「アフィン変換行列」と
       言うそうです




                                         26
B’

         A        B

    A’



A が A’ に、B が B’ に、それぞれ移動したとする



                                27
B’

      A        B

 A’


B に対する A と A’ の角度の差が回転角、
距離の比が拡大率と考える
A に対する B と B’ についても同様

                           28
中心




見た目に似ていても、
どこを中心にするかで座標変換は異なる

                     29
   Static な座標変換クラス (Manipulation クラス)
    ◦ メソッドは 5つ
      拡大、回転、平行移動、行列の積、点の座標変換




                                         30
31
32
   行列の積 ABC の表現、どちらが読みやすい?
    ◦ Multiply(C, Multiply(A, B));
    ◦ A.Multiply(B).Multiply(C);                   こう
                                                   書ける
   拡張メソッドを使うと・・・
    ◦ public static Matrix Multiply(this Matrix m, …);



   本当にちょっとした内容ですみません

                                                         33
34
35
36
座標変換を駆使(?)して
オブジェクトを操作する




               37
38
39
40
41
実は、この部分にはバグがあります。
割り算の分母が 0 になると・・・

今回はコードの単純化のためにあえてこのままで
                         42
43
   Silverlight はマルチタッチがちょっとだけ苦手
   Matrix クラスを使うと、Silverlight でも
    マルチタッチマニピュレーションを実現できる
    ◦ MSDN Magazine 2010年3月号で詳しく解説 されてい
      ます
      http://msdn.microsoft.com/ja-jp/magazine/ee336121.aspx


   ちょっとだけ高校時代の数学の復習が必要かも




                                                                44
   Silverlight でのマルチタッチ サポートの詳細
    ◦ http://msdn.microsoft.com/ja-
      jp/magazine/ee336026.aspx
   理系なら知っておきたい 数学の基本ノート
    [線形代数編]
    ◦ 佐々木 隆宏 著、中経出版

   タッチデバイスを持っていないけど試してみたい人
    ◦ MultiTouchVista をどうぞ
      http://multitouchvista.codeplex.com/
      PC にマウスを2個繋げてマルチタッチをエミュレート
      名前に Vista と付いていますが、Windows 7 対応


                                              45
46

More Related Content

Similar to Silverlightで作るマルチタッチアプリケーション 2

Making of ユニティちゃんステージデモ in ComicMarket 86
Making of ユニティちゃんステージデモ in ComicMarket 86Making of ユニティちゃんステージデモ in ComicMarket 86
Making of ユニティちゃんステージデモ in ComicMarket 86
小林 信行
 
【DL輪読会】A Path Towards Autonomous Machine Intelligence
【DL輪読会】A Path Towards Autonomous Machine Intelligence【DL輪読会】A Path Towards Autonomous Machine Intelligence
【DL輪読会】A Path Towards Autonomous Machine Intelligence
Deep Learning JP
 
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
Kazuki Shibata
 
microservicesとSRE (第2回 SRE Lounge)
microservicesとSRE (第2回 SRE Lounge)microservicesとSRE (第2回 SRE Lounge)
microservicesとSRE (第2回 SRE Lounge)
Yosuke Tomita
 
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポートSmartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポートMasaru Kimura
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
 
Modeling by Verb
Modeling by VerbModeling by Verb
Modeling by Verb
ChangeVision
 
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
Satoshi Maemoto
 
スマートフォン対応、気をつけたいトラブル JavaScript編
スマートフォン対応、気をつけたいトラブル JavaScript編スマートフォン対応、気をつけたいトラブル JavaScript編
スマートフォン対応、気をつけたいトラブル JavaScript編
Hiroaki Wakamatsu
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTURE Project
 
Smartphone workshop kansai #9
Smartphone workshop kansai #9Smartphone workshop kansai #9
Smartphone workshop kansai #9Yutaka Tsumori
 
UX on HTML5 x Touch UI
UX on HTML5 x Touch UIUX on HTML5 x Touch UI
UX on HTML5 x Touch UI
dsuke Takaoka
 
第2回 Android勉強会
第2回 Android勉強会第2回 Android勉強会
第2回 Android勉強会
fujikunn
 
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
Ryuma Tsukano
 
JAWS-UG クラウド専業SIer(CIer)になってみた結果
JAWS-UG クラウド専業SIer(CIer)になってみた結果JAWS-UG クラウド専業SIer(CIer)になってみた結果
JAWS-UG クラウド専業SIer(CIer)になってみた結果
Serverworks Co.,Ltd.
 
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
UI&UX / 重要なのは、毎日さわって嬉しい UI UX! UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
Akiko Ohtsuka
 
Interactive UI with UniRx
Interactive UI with UniRxInteractive UI with UniRx
Interactive UI with UniRx
Yuto Iwashita
 
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~Yoshitaka Kawashima
 
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII
 
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
youten (ようてん)
 

Similar to Silverlightで作るマルチタッチアプリケーション 2 (20)

Making of ユニティちゃんステージデモ in ComicMarket 86
Making of ユニティちゃんステージデモ in ComicMarket 86Making of ユニティちゃんステージデモ in ComicMarket 86
Making of ユニティちゃんステージデモ in ComicMarket 86
 
【DL輪読会】A Path Towards Autonomous Machine Intelligence
【DL輪読会】A Path Towards Autonomous Machine Intelligence【DL輪読会】A Path Towards Autonomous Machine Intelligence
【DL輪読会】A Path Towards Autonomous Machine Intelligence
 
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
 
microservicesとSRE (第2回 SRE Lounge)
microservicesとSRE (第2回 SRE Lounge)microservicesとSRE (第2回 SRE Lounge)
microservicesとSRE (第2回 SRE Lounge)
 
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポートSmartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポート
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 
Modeling by Verb
Modeling by VerbModeling by Verb
Modeling by Verb
 
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
Tokyo MotionControl Network tech cafe 「誰もがつまづく3D認識の世界」
 
スマートフォン対応、気をつけたいトラブル JavaScript編
スマートフォン対応、気をつけたいトラブル JavaScript編スマートフォン対応、気をつけたいトラブル JavaScript編
スマートフォン対応、気をつけたいトラブル JavaScript編
 
ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介ADVENTUREの他のモジュール・関連プロジェクトの紹介
ADVENTUREの他のモジュール・関連プロジェクトの紹介
 
Smartphone workshop kansai #9
Smartphone workshop kansai #9Smartphone workshop kansai #9
Smartphone workshop kansai #9
 
UX on HTML5 x Touch UI
UX on HTML5 x Touch UIUX on HTML5 x Touch UI
UX on HTML5 x Touch UI
 
第2回 Android勉強会
第2回 Android勉強会第2回 Android勉強会
第2回 Android勉強会
 
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
 
JAWS-UG クラウド専業SIer(CIer)になってみた結果
JAWS-UG クラウド専業SIer(CIer)になってみた結果JAWS-UG クラウド専業SIer(CIer)になってみた結果
JAWS-UG クラウド専業SIer(CIer)になってみた結果
 
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
UI&UX / 重要なのは、毎日さわって嬉しい UI UX! UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
UI&UX / 重要なのは、毎日さわって嬉しい UI UX!
 
Interactive UI with UniRx
Interactive UI with UniRxInteractive UI with UniRx
Interactive UI with UniRx
 
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
 
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
 
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
 

More from Yoshitaka Seo

言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
Yoshitaka Seo
 
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Yoshitaka Seo
 
AI-900 ポイント解説
AI-900 ポイント解説AI-900 ポイント解説
AI-900 ポイント解説
Yoshitaka Seo
 
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
Yoshitaka Seo
 
AIの見方、AIとの付き合い方
AIの見方、AIとの付き合い方AIの見方、AIとの付き合い方
AIの見方、AIとの付き合い方
Yoshitaka Seo
 
Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類
Yoshitaka Seo
 
誰もが AI を使う時代、作る時代
誰もが AI を使う時代、作る時代誰もが AI を使う時代、作る時代
誰もが AI を使う時代、作る時代
Yoshitaka Seo
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
Yoshitaka Seo
 
API ペタペタしただけのお手軽 感情分析アプリ
API ペタペタしただけのお手軽 感情分析アプリAPI ペタペタしただけのお手軽 感情分析アプリ
API ペタペタしただけのお手軽 感情分析アプリ
Yoshitaka Seo
 
Machine Learning studio で構造化データから予測分析 (LT版)
Machine Learning studio で構造化データから予測分析 (LT版)Machine Learning studio で構造化データから予測分析 (LT版)
Machine Learning studio で構造化データから予測分析 (LT版)
Yoshitaka Seo
 
BIerのためのAI入門
BIerのためのAI入門BIerのためのAI入門
BIerのためのAI入門
Yoshitaka Seo
 
構造化データをツールで簡単に分析
構造化データをツールで簡単に分析構造化データをツールで簡単に分析
構造化データをツールで簡単に分析
Yoshitaka Seo
 
チャットボットの自然言語処理
チャットボットの自然言語処理チャットボットの自然言語処理
チャットボットの自然言語処理
Yoshitaka Seo
 
Custom Visionを活用するためのTips
Custom Visionを活用するためのTipsCustom Visionを活用するためのTips
Custom Visionを活用するためのTips
Yoshitaka Seo
 
Machine Learning Serviceを使ってみよう
Machine Learning Serviceを使ってみようMachine Learning Serviceを使ってみよう
Machine Learning Serviceを使ってみよう
Yoshitaka Seo
 
Bot Framework Emulator はこんなにすごい
Bot Framework Emulator はこんなにすごいBot Framework Emulator はこんなにすごい
Bot Framework Emulator はこんなにすごい
Yoshitaka Seo
 
VS Code Tools for AI の紹介
VS Code Tools for AI の紹介VS Code Tools for AI の紹介
VS Code Tools for AI の紹介
Yoshitaka Seo
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
Yoshitaka Seo
 
QnA Maker 逆入門
QnA Maker 逆入門QnA Maker 逆入門
QnA Maker 逆入門
Yoshitaka Seo
 
PowerApps アプリ開発入門
PowerApps アプリ開発入門PowerApps アプリ開発入門
PowerApps アプリ開発入門
Yoshitaka Seo
 

More from Yoshitaka Seo (20)

言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
 
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
 
AI-900 ポイント解説
AI-900 ポイント解説AI-900 ポイント解説
AI-900 ポイント解説
 
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
 
AIの見方、AIとの付き合い方
AIの見方、AIとの付き合い方AIの見方、AIとの付き合い方
AIの見方、AIとの付き合い方
 
Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類
 
誰もが AI を使う時代、作る時代
誰もが AI を使う時代、作る時代誰もが AI を使う時代、作る時代
誰もが AI を使う時代、作る時代
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
API ペタペタしただけのお手軽 感情分析アプリ
API ペタペタしただけのお手軽 感情分析アプリAPI ペタペタしただけのお手軽 感情分析アプリ
API ペタペタしただけのお手軽 感情分析アプリ
 
Machine Learning studio で構造化データから予測分析 (LT版)
Machine Learning studio で構造化データから予測分析 (LT版)Machine Learning studio で構造化データから予測分析 (LT版)
Machine Learning studio で構造化データから予測分析 (LT版)
 
BIerのためのAI入門
BIerのためのAI入門BIerのためのAI入門
BIerのためのAI入門
 
構造化データをツールで簡単に分析
構造化データをツールで簡単に分析構造化データをツールで簡単に分析
構造化データをツールで簡単に分析
 
チャットボットの自然言語処理
チャットボットの自然言語処理チャットボットの自然言語処理
チャットボットの自然言語処理
 
Custom Visionを活用するためのTips
Custom Visionを活用するためのTipsCustom Visionを活用するためのTips
Custom Visionを活用するためのTips
 
Machine Learning Serviceを使ってみよう
Machine Learning Serviceを使ってみようMachine Learning Serviceを使ってみよう
Machine Learning Serviceを使ってみよう
 
Bot Framework Emulator はこんなにすごい
Bot Framework Emulator はこんなにすごいBot Framework Emulator はこんなにすごい
Bot Framework Emulator はこんなにすごい
 
VS Code Tools for AI の紹介
VS Code Tools for AI の紹介VS Code Tools for AI の紹介
VS Code Tools for AI の紹介
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
 
QnA Maker 逆入門
QnA Maker 逆入門QnA Maker 逆入門
QnA Maker 逆入門
 
PowerApps アプリ開発入門
PowerApps アプリ開発入門PowerApps アプリ開発入門
PowerApps アプリ開発入門
 

Recently uploaded

TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 

Recently uploaded (8)

TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 

Silverlightで作るマルチタッチアプリケーション 2

  • 1. ~ 技術ひろば.net 勉強会版 ~ 瀬尾佳隆 (y.seo@seosoft.jp) Microsoft MVP for Visual C# 技術ひろば.net 2011年3月 1
  • 2. 瀬尾 佳隆 (せお よしたか) ◦ MVP for Visual C# (Jan 2009 – Dec 2011) ◦ 最近は Silverlight と SharePoint がお友達 ◦ でも、とってもよくハマる (泣) ◦ メール ・・・ y.seo@seosoft.jp ◦ Blog ・・・ http://yseosoft.wordpress.com/ ◦ Twitter ・・・ http://twitter.com/seosoft ◦ Facebook ・・・ http://www.facebook.com/seosoft ◦ 個人事業主です(屋号は瀬尾ソフト) 2
  • 3. Silverlight でマルチタッチなアプリケーションを 作る勘所を共有します ◦ Silverlight でのマルチタッチアプリケーション開発で ほんのちょっとだけ苦労する理由 ◦ タッチ対応なしからマルチタッチマニピュレーションまで 順を追って進めていきます ◦ 高校時代の数学をちょっとだけ思い出していただきます  Developers Summit 2011 の MVP LT のネタを 具体的なコードの紹介まで踏み込んでみます 3
  • 4. プロローグ  Step 0 : タッチ対応なし  Step 1 : シングルタッチに対応してみる  Step 2 : マルチタッチ対応の前に  Step 3 : 座標変換クラスを用意する  Step 4 : マルチタッチマニピュレーション  まとめ 4
  • 6. マルチタッチマニピュレーション ◦ スマートフォンや iPad でお馴染みの 「2本指で画面上のものを回したり拡大したりする 」 アレのこと  ということで、本題に戻ります 6
  • 7. Silverlight ではマルチタッチサポートが少なめ ◦ タッチポイントは取れるが、 マニピュレーションの API は持っていない  ちなみに同じ Silverlight でも Windows Phone 7 は リッチな API を持ってます WM_TOUCH WM_GESTURE Manipulation & Inertia Win 32 〇 ◎ 〇 Silverlight 〇 × × WPF 〇 〇 http://msdn.microsoft.com/ja-jp/ff604678.aspx より 7
  • 8. API がないなら自前で座標演算すればいい ◦ タッチポイントは取れるし ◦ Matrix クラスがあるし (これは後述)  やってみると、想像したよりは難しくなかった! ◦ 「簡単だ」とは一言も言ってません 8
  • 10. Windows アプリは、シングルタッチの範囲ならば、 何もしなくても “タッチ対応” アプリでもある ◦ マウス操作できることはタッチ操作でもできる ◦ 1点目のタッチは OS 内部でマウスイベントに昇格される  昇格が都合が悪ければ、アプリで止めることもできる  実際、マニピュレーションには昇格は不都合 ◦ ただし、マウス操作を前提としたアプリはポイントの領域が 狭いことが多い  タッチ操作できることと、タッチに最適化されているかどうかは 別の話 10
  • 11. 写真を画面上に表示するアプリ ◦ マウス操作、タッチ操作で写真を移動します ◦ 最後には回したり大きくしたりするのが今日のゴール  まずは実装しているのはマウスイベントだけのデモ ◦ タッチでも操作できることを一応確認しておきます ◦ この後のためにソースコードも簡単に見ておきます 11
  • 12. 12
  • 13. 13
  • 15. タッチ操作の意味は、アプリケーションごとに異なる ◦ フリック操作で、大きな領域の移動やページ移動の意味 ◦ 原点の表示位置が固定されたグラフでは、 シングルタッチを拡大率の変更と考えてもよい ◦ シングルタッチ=オブジェクトの移動 が一般的(?)  今回の Step 0 のデモではオブジェクトの移動と 考えるのが自然 ◦ 今回は、「シングルタッチはオブジェクト移動」として続けます 15
  • 16. 1点目のタッチイベントを自前でハンドリング ◦ 自動的にマウスイベントに昇格されるのを止める ◦ コードは定型的 16
  • 17. OS からのタッチ入力は Static な Touch クラスが受け取る (FrameReported イベント)  マウスイベントへの昇格を止めるには SuspentMousePromotionUntilTouchUp メソッド  タッチポイントは: ◦ プライマリ(1点目のポイント)・・・GetPrimaryTouchPoint ◦ すべてのポイント(プライマリも含む)・・・GetTouchPoints 17
  • 18. 18
  • 20. いよいよ回転と拡大  Silverlight はマニピュレーション用 API を 持っていない(前述)  が、座標変換に使う Matrix クラスがある ◦ これを使ってみましょう  Matrix と言うくらいなので、行列 です ◦ 高校時代の数学でやったアレ 20
  • 21. System.Windows.Media.Matrix クラス ◦ public Matrix(double m11, double m12,double m21, double m22, double offsetX, double offsetY) ◦ これを UIElement.RenderTransform.MatrixTransform に代入します m11, m22 ・・・ X, Y 方向の拡大率 m12, m21 ・・・ 傾斜 ※第3列は (0, 0, 1) 固定なので、 Matrix クラスでは指定しない (アフィン変換行列)
  • 22. 行列の積
  • 23. 行列の積 例えば、1行1列の値は、 1つめの行列の1行目 と 2つめの行列の1列目 の各要素ごとの積を足したもの
  • 24. 平行移動  拡大(縮小)  回転 こんなものだと思って、覚えて(覚えたふりして)ください
  • 26. 例 ◦ 北東に (約) 1.4km 進むのは、東に 1km、北に 1km 進むのと同じ ◦ 自動車のドリフトは、移動の座標変換と回転の座標変換の 掛け合わせ  回転の行列、拡大の行列、移動の行列を用意して、 順に掛け合わせれば任意の座標変換ができる ◦ 厳密には、任意の「平面上の」座標変換と言うべき(?)  数学的にはこれを満たす行列のことを「アフィン変換行列」と 言うそうです 26
  • 27. B’ A B A’ A が A’ に、B が B’ に、それぞれ移動したとする 27
  • 28. B’ A B A’ B に対する A と A’ の角度の差が回転角、 距離の比が拡大率と考える A に対する B と B’ についても同様 28
  • 30. Static な座標変換クラス (Manipulation クラス) ◦ メソッドは 5つ  拡大、回転、平行移動、行列の積、点の座標変換 30
  • 31. 31
  • 32. 32
  • 33. 行列の積 ABC の表現、どちらが読みやすい? ◦ Multiply(C, Multiply(A, B)); ◦ A.Multiply(B).Multiply(C); こう 書ける  拡張メソッドを使うと・・・ ◦ public static Matrix Multiply(this Matrix m, …);  本当にちょっとした内容ですみません 33
  • 34. 34
  • 35. 35
  • 36. 36
  • 38. 38
  • 39. 39
  • 40. 40
  • 41. 41
  • 43. 43
  • 44. Silverlight はマルチタッチがちょっとだけ苦手  Matrix クラスを使うと、Silverlight でも マルチタッチマニピュレーションを実現できる ◦ MSDN Magazine 2010年3月号で詳しく解説 されてい ます  http://msdn.microsoft.com/ja-jp/magazine/ee336121.aspx  ちょっとだけ高校時代の数学の復習が必要かも 44
  • 45. Silverlight でのマルチタッチ サポートの詳細 ◦ http://msdn.microsoft.com/ja- jp/magazine/ee336026.aspx  理系なら知っておきたい 数学の基本ノート [線形代数編] ◦ 佐々木 隆宏 著、中経出版  タッチデバイスを持っていないけど試してみたい人 ◦ MultiTouchVista をどうぞ  http://multitouchvista.codeplex.com/  PC にマウスを2個繋げてマルチタッチをエミュレート  名前に Vista と付いていますが、Windows 7 対応 45
  • 46. 46