(57)【特許請求の範囲】
【請求項１】
タッチ検知入力表面とディスプレイとを含むコンピューター・デバイスで実行される方法であって、該方法が、前記タッチ検知表面を介してのマルチタッチ入力を用いて操作されるオブジェクトの前記ディスプレイにおける現実的な動きを与え、前記方法が、
１つ以上のコンタクトをマルチタッチ入力デバイスから除去することによって、ユーザーが、前記コンピューター・デバイスで実行しているアプリケーションのアプリケーション・オブジェクトを解放したことを判定するステップであって、前記アプリケーション・オブジェクトが前記ディスプレイに表示される、ステップと、
前記判定の後、現慣性処理期間、前記アプリケーション・オブジェクトの動きのシミュレーションを処理するために前記コンピューター・デバイスで実行している慣性アプリケーション・プログラミング・インターフェースＡＰＩを呼び出すステップであって、前記慣性ＡＰＩが、前記コンピューター・デバイスにおける任意のアプリケーションにより呼び出し可能なアプリケーション独立プラットフォームを提供し、前記慣性ＡＰＩが、前記アプリケーション・オブジェクトのタイプには関係なく、慣性オブジェクトの動きをシミュレートする、ステップと、
前記アプリケーションが、前記判定後に前記慣性ＡＰＩが生成する慣性イベントを受け取るステップであって、前記慣性イベントが、シミュレートした慣性に基づいて、前記オブジェクトの操作を記述する、ステップと、
前記アプリケーション・オブジェクトを変更しそれにしたがって前記アプリケーション・オブジェクトを前記ディスプレイに表示することによって、前記アプリケーションのコンテキストにおいて、前記操作の効果に基づいて、受け取った慣性イベントを扱うステップと、
を含む、方法。
【請求項２】
請求項１記載の方法であって、更に、ユーザーが前記オブジェクトを解放したと判定した後に、ユーザーが前記オブジェクトを解放する前に、前記オブジェクトの動きを扱っていた操作プロセッサーに基準を渡すことによって、前記慣性システムを初期化するステップを含む、方法。
【請求項３】
請求項１または２に記載の方法であって、更に、ユーザーが前記オブジェクトを解放したと判定した後に、ユーザーが前記オブジェクトを解放したときの当該オブジェクトの状態を記述する１つ以上のパラメータを渡すことによって、前記慣性システムを初期化するステップを含む、方法。
【請求項４】
請求項１から３のいずれかに記載の方法において、前記慣性イベントを受け取るステップが、前記アプリケーション・オブジェクトの２Ｄアフィン変換を記述する情報を受け取るステップを含む、方法。
【請求項５】
請求項１から４のいずれかに記載の方法において、前記慣性イベントによって記述される前記操作が、回転操作、平行移動操作、および拡縮操作の内少なくとも１つを含む、方法。
【請求項６】
請求項１から５のいずれかに記載の方法において、前記受け取った慣性イベントが回転であり、前記受け取った慣性イベントを扱うステップが、ディスプレイ上において前記アプリケーション・オブジェクトを回転させるステップを含む、方法。
【請求項７】
請求項１から６のいずれかに記載の方法であって、更に、前記慣性処理期間の長さを決定するタイマーを設定するステップを含み、前記アプリケーションが前記タイマーの始動毎に前記慣性ＡＰＩを呼び出す、方法。
【請求項８】
請求項７記載の方法であって、更に、前記シミュレーションが完了したという指示を前記慣性ＡＰＩから受け取り、前記指示が受け取られたときに前記タイマーを終了させるステップを含む、方法。
【請求項９】
請求項１から８のいずれかに記載の方法において、前記慣性イベントを受け取るステップが、ＣＯＭイベント・インターフェースを通じて通知を受け取るステップを含む、方法。
【請求項１０】
命令がエンコードされたコンピューター読み取り可能記憶媒体であって、前記命令が、方法によりディスプレイとタッチ検知入力表面とを含むコンピューター・デバイスを制御して、前記タッチ検知表面を介してのマルチタッチ入力によって既に動かされたアプリケーション・オブジェクトの前記ディスプレイにおける動きをシミュレートし、前記アプリケーション・オブジェクトが、前記コンピューター・デバイスで実行しているアプリケーションの一部分であり、前記方法が、
ユーザーが、前記タッチ検知入力表面とのコンタクトを止めることにより前記アプリケーション・オブジェクトを解放したことに対応する前記アプリケーション・オブジェクトの状態を与える１つ以上の初期シミュレーション・パラメータを受け取るステップと、
前記初期シミュレーション・パラメータに基づいて、前記アプリケーション・オブジェクトの慣性をシミュレートするために、計算を実行するシミュレーション・エンジンを初期化するステップと、
現シミュレーション期間の指示を受け取るステップと、
前記シミュレーション・エンジンが、前記初期パラメータ、前記シミュレーション・エンジンによる任意の前の慣性シミュレーション、および任意の前のシミュレーション期間以来の経過時間に基づいて、前記アプリケーション・オブジェクトの慣性の動きをシミュレートするステップと、
前記アプリケーション・オブジェクトの現在の動きを記述する変換情報を、前記アプリケーションに送るために慣性イベントを始動するステップであって、前記アプリケーション・オブジェクトが、前記変換情報にしたがって前記ディスプレイに表示される、ステップと、
を含む、コンピューター読み取り可能記憶媒体。
【請求項１１】
請求項１０記載のコンピューター読み取り可能記憶媒体において、前記シミュレーション・エンジンが、ユーザーが前記アプリケーション・オブジェクトにタッチしたことによってこのアプリケーション・オブジェクトの動きを開始した後に、前記アプリケーション・オブジェクトのために、現実的な減速挙動をシミュレートする、コンピューター読み取り可能記憶媒体。
【請求項１２】
請求項１０または１１に記載のコンピューター読み取り可能記憶媒体において、前記シミュレーション・エンジンが、前記アプリケーション・オブジェクトがディスプレイ上において他のエレメントと重なり合ったときに、前記アプリケーション・オブジェクトのために、現実的な弾性挙動をシミュレートする、コンピューター読み取り可能記憶媒体。
【請求項１３】
請求項１０から１２のいずれかに記載のコンピューター読み取り可能記憶媒体において、前記現シミュレーション期間がシミュレーションを前に動かすことになっているという指示を受け取るステップが、前記アプリケーションからシミュレーション処理機能へのコールを受け取るステップを含む、コンピューター読み取り可能記憶媒体。
【請求項１４】
請求項１０から１３のいずれかに記載コンピューター読み取り可能記憶媒体であって、更に、前記シミュレーションが完了したか否か判定するステップと、前記シミュレーションが完了しているとき、前記アプリケーションに、前記シミュレーションが完了したことを伝えるステップとを含む、コンピューター読み取り可能記憶媒体。
【発明の詳細な説明】
【従来技術】
【０００１】
[0001]  タブレットＰＣ、またはペン・コンピューターは、ノートブック型または板状モバイル・コンピューターであり、タッチ・スクリーンまたはグラフィクス・タブレット／スクリーン混成技術を装備し、ユーザーが、キーボードやマウスの代わりに、スタイラス、ディジタル・ペン、または指先でコンピューターを動作させることを可能にする。タブレットＰＣは、一層自然な入力形態を提供する。これは、スケッチや手書きが、特にコンピューターの初心者にとって、キーボードやマウスよりも遙かになじみのある入力形態であるからである。また、身体的にタイプ入力することができない人々が電子世界と対話することを可能にするタブレットＰＣの追加機構を利用することができるので、タブレットＰＣの方が近づきやすい(accessible)と言うことができる。
【０００２】
[0002]  マルチ−タッチ（またはマルチタッチ(multitouch)）とは、コンピューター・ユーザーが複数の指または入力デバイス（例えば、スタイラス）を用いてグラフィカル・アプリケーションを制御することを可能にする１組の対話技法を指す。マルチタッチの実施態様は、大抵の場合、タッチ・ハードウェア（例えば、画面、表、壁等）、および複数の同時タッチ入力を認識するソフトウェアを含む。マルチタッチは、一度に１つのタッチ・ポイントしか認識しない従前からのタッチ・スクリーン（例えば、コンピューター・タッチパッド、ＡＴＭ、ショッピング・キオスク(shopping kiosk)）とは、対照的な位置を取る。マルチタッチ・ハードウェアは、熱、指の圧力、ハイ・キャプチャー・レート・カメラ(high capture rate camera)、赤外線光、光学的取り込み、同調電磁誘導、超音波受信機、変換マイクロフォン、レーザー距離計、陰影取り込み(shadow capture)、および他のメカニズムを用いて、タッチを検知することができる。マルチタッチ・インターフェース用に多くのアプリケーションが存在しており、アプリケーション設計者やユーザーがなおも一層多くのものを提案しつつある。一部の使用は、個人主義的である（例えば、Microsoft Surface、Apple iPhone、HTC Diamond）。新たな入力方法として、マルチタッチは新たなユーザー体験の枠組みの可能性を提供する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]  アプリケーションは、マルチタッチ・ハードウェアから情報を受信するアプリケーション・ソフトウェア用インターフェースがないと、マルチタッチ・ハードウェアを用いることができない。生憎、各マルチタッチ・ハードウェアは、それ自体の企業固有のインターフェースを含み、アプリケーション著作者は、ハードウェア・デバイスと動作するソフトウェアを書くためには、そのハードウェアの特定的な知識を有していなければならない。例えば、マルチタッチ・ハードウェア供給業者は、カーネル・モード・ドライバーおよびユーザー・モード・アプリケーション・インターフェースを提供することができ、これらを通じて、ユーザー・モード・ソフトウェア・アプリケーションがマルチタッチ・ハードウェアと通信して、タッチ情報を受信することができる。アプリケーション著作者は、ユーザー・モード・アプリケーション・インターフェースと通信するソフトウェアを書くが、アプリケーション著作者のソフトウェアは、そのマルチタッチ・ハードウェアとでなければうまく動作しない。異なるマルチタッチ・ハードウェア・デバイスを用いるコンピューター・ユーザーは、このアプリケーション著作者が、コンピューター・ユーザーのデバイスと正しく動作する異なるバージョンのソフトウェアを生成しなければ、このアプリケーション著作者のソフトウェアを用いることができない。このため、アプリケーション著作者にとって可能性のある市場が非常に限定され、マルチタッチ対話処理をサポートするアプリケーションを書く動機が減少し、最多数のアプリケーションが利用できる最も普及しているデバイスのコストが高止まりする。
【０００４】
[0004]  他の問題は、アプリケーションが、マルチタッチ・ハードウェアから受け取ったタッチ入力に基づいて、ユーザーの意図を判定することの難しさである。タッチ入力は、ハードウェアが任意の所与の時点においてタッチ入力を検知した座標のリストとして受け取られることがある。各アプリケーションは、この座標を解釈し、ユーザーの意図を判定するためのソフトウェアを含まなければならない。加えて、ユーザーの意図は、実際に受け取ったタッチ入力を超えて広がる可能性がある。ユーザーは、仮想オブジェクトが物理的世界において行うように振る舞うことを期待するかもしれない。例えば、ユーザーは、彼／彼女の指をはじくことによって、ファイルをデスクトップの一方側から他方側に「投げる」ことができると期待するかもしれない。この種の動きは、現在のマルチタッチ・アプリケーションではサポートされない。現在のマルチタッチ・アプリケーションであれば、ユーザーが彼／彼女の指を画面の一方側から他方側までずっとドラッグすることを予期するであろう。１つのアプリケーションがこの種の動きに対するサポートを備えていても、他のアプリケーションはその恩恵を得ることができず、したがって、アプリケーション著作者は、同じ機能を彼らのアプリケーションに提供するためには、最初のアプリケーション著作者の作業を繰り返さなければならない。
【課題を解決するための手段】
【０００５】
[0005]  慣性システムは、アプリケーションが種々のマルチタッチ・ハードウェア・デバイスから受け取る入力を拡大してオブジェクトの実世界の挙動をシミュレートするための共通プラットフォームおよびアプリケーション・プログラミング・インターフェース（ＡＰＩ）を提供する。アプリケーションによって受け取られる操作は、マルチタッチ・ハードウェアとのコンタクトの動きに基づく、オブジェクトの動きだけを記述する。しかしながら、自然に動かすためには、オブジェクトは、弾性や減速というような、物理的特性も呈さなければならない。ユーザーがオブジェクトから全てのコンタクトを引き上げると、慣性システムは、追加の操作イベントをアプリケーションに供給し、ユーザーがなおもコンタクトしてオブジェクトを動かしているかのように、アプリケーションがイベントを扱うことができる。しかしながら、慣性システムは、実際に、オブジェクトの挙動のシミュレーションに基づいて、イベントを発生する。ユーザーがオブジェクトを動かして他のオブジェクトの中にいれると、慣性システムは、これらのオブジェクトの境界特性に基づいて、操作イベントを送る。このように、慣性システムは、ユーザーがマルチタッチ・ハードウェアを用いて操作するアプリケーション・オブジェクトに、より現実的な動きを与え、ＡＰＩはアプリケーションを跨がって一貫性のある感覚を操作に与える。  
【０００６】
[0006]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために用いられることを意図するのでもない。
【図面の簡単な説明】
【０００７】
【図１】図１は、一実施形態における、慣性システムのコンポーネントを示すブロック図である。
【図２】図２は、一実施形態における、慣性システムの典型的な動作環境、およびコンポーネント間のデーター流を示すデーター・流れ図である。
【図３】図３は、一実施形態において、ユーザー・タッチによって操作されるアプリケーション・オブジェクトを示す表示図である。
【図４】図４は、一実施形態において、操作イベントを扱うために慣性システムを用いるマルチタッチ・アプリケーションの入力ループ処理を示す流れ図である。
【図５】図５は、一実施形態において、慣性システムがタッチ入力を受け取ったときの、本システムの処理を示す流れ図である。
【図６】図６は、一実施形態において、慣性イベントを処理するために慣性システムを用いるマルチタッチ・アプリケーションの処理を示す流れ図である。
【図７】図７は、一実施形態において、慣性処理システムのシミュレーション・コンポーネントの処理を示す流れ図である。
【発明を実施するための形態】
【０００８】
[0014]  慣性システムは、オブジェクトの実世界挙動をシミュレートするために、種々のマルチタッチ・ハードウェア・デバイスから請け取った入力をアプリケーションが拡大するための共通プラットフォームおよびＡＰＩを提供する。例えば、実世界オブジェクトは、通例、ユーザーがそれらを押すのを止めたときに動くのを中止せず、むしろ何らかの慣性を呈し、摩擦がこれらを減速させ最終的に停止に至るまで、動き続ける。実施形態によっては、タッチ入力が、最初に、１つ以上のコンタクトの動きを操作として解釈するプロセスを経る場合もある。操作は、個々のタッチ入力よりも直接的にユーザーの意図にマップし、複数のタッチ・コンタクト(touch contact)を用いて、オブジェクトの基本的な変換に対するサポートを追加する。アプリケーションは、操作を用いて、複数のオブジェクト（例えば、写真）の同時回転、サイズ変更、および平行移動をサポートすることができる。操作は、回転、拡縮（例えば、ズーム）、および平行移動（例えば、パンニング）情報を含む二次元（２Ｄ）アフィン変換(affine transform)として記述することができる。
【０００９】
[0015]  マルチタッチ・ハードウェアの各タッチを、コンタクトと呼ぶ。例えば、ユーザーがマルチタッチ・ハードウェア上に彼／彼女の指を設定し、彼／彼女の指を回し、そして彼／彼女の指を引き上げると、この一連のイベントが１つのコンタクトとなる。例えば、ユーザーが２つのコンタクトを、互いに近づくように、または遠ざかるように動かすと、本システムはユーザーがオブジェクトを拡縮している（例えば、拡大または縮小）していると判定することができる。別の例として、ユーザーが複数のコンタクトを円運動で動かすと、本システムはこの動きをオブジェクトの回転として解釈することができる。各アプリケーションは、異なる関連性があるオブジェクトを定めることができるので、本システムのインスタンス（操作プロセッサーと呼ぶ）を、ユーザーが当該アプリケーション内においてタッチ入力を用いて操作することができる各オブジェクトにアタッチ(attach)するのは、アプリケーション次第である。例えば、写真ブラウジング・アプリケーションは操作プロセッサーを表示された各写真にアタッチすることができるので、ユーザーはこの写真をぐるぐると動かしたり、写真の倍率を変更したり、写真を回転させたりすることができる。
【００１０】
[0016]  アプリケーションによって扱われる操作は、コンタクトの動きに基づくオブジェクトの動きだけを記述する。しかしながら、自然に動かすためには、オブジェクトは、弾性や減速というような、物理的特性も呈した方がよい。ユーザーが全てのコンタクトをオブジェクトから引き上げると、慣性システムは追加の操作イベントをアプリケーションに供給して、ユーザーがまだタッチによってオブジェクトを動かしているかのように、アプリケーションがこのイベントを扱うことができるようにする。しかしながら、慣性システムは、オブジェクトの挙動のシミュレーションに基づいて、実際にイベントを発生する。例えば、オブジェクトがある速度を特定の方向に有する間にユーザーがコンタクトを引き上げると、慣性システムは、オブジェクトがその方向に動いており、オブジェクトが減速するに連れて時と共に遅くなることを示すイベントを送り続ける。ユーザーが、画面のエッジのような、他のオブジェクトの中にオブジェクトを動かすと、慣性システムは、これらのオブジェクトの境界特性に基づいて操作イベントを送る。例えば、アプリケーション著作者が２つのオブジェクトを弾性があると定めた場合、これら２つのオブジェクトは、ユーザーがこれらのオブジェクトを動かして衝突させると、互いに弾むことができる。このように、慣性システムは、ユーザーがマルチタッチ・ハードウェアを用いて操作するアプリケーション・オブジェクトに、一層現実的な動きを与え、ＡＰＩはアプリケーションを跨がって一貫性のある感覚を操作に与える。
【００１１】
[0017]  図１は、一実施形態における、慣性システムのコンポーネントを示すブロック図である。慣性システム１００は、ハードアウェア・インターフェース１１０，１つ以上の操作プロセッサー１２０、入力変換コンポーネント１３０、シミュレーション・コンポーネント１４０、およびアプリケーション・インターフェース１５０を含む。これらのコンポーネントの各々について、ここで更に詳しく説明する。
【００１２】
[0018]  ハードウェア・インターフェース１１０は、ハードウェアと通信して、タッチ・コンタクトおよび動きを受け取る。ハードウェア・インターフェース１１０は、様々なサブコンポーネントを含むことができ、これらが協同してタッチ入力情報を提供する。例えば、オペレーティング・システムは、マルチタッチ・ハードウェアの製造業者に共通のドライバー・モデルを提供し、彼らの個々のハードウェアについてのタッチ情報を提供することができる。オペレーティング・システムは、このモデルを通じて受信したタッチ情報をウィンドウ・メッセージ（例えば、本明細書において記載するWM_TOUCH）に変換し、これらのメッセージをアプリケーションに渡すことができる。このために、ハードウェア・インターフェース１１０は、ハードアウェア、ハードウェア・ドライバー、およびオペレーティング・システム・レイヤの協調を伴うこともあり得る。その結果、慣性システムに宛てた一連のメッセージが発生して、特定のコンタクト（例えば、指のタッチ）、およびそのコンタクトの経時的な協調を特定する。例えば、オペレーティング・システムは、新たなコンタクトがマルチタッチ・ハードウェア上において指定されたときにメッセージを供給し、コンタクトが動く度にメッセージを供給し、そしてこのコンタクトがマルチタッチ・ハードウェアから離れるように引き上げられたときにメッセージを供給することができる。
【００１３】
[0019]  １つ以上の操作プロセッサー１２０が、入力変換コンポーネント１３０を用いて、個々のアプリケーション・オブジェクトと関連のある各コンタクトの動きを解釈する。操作プロセッサー１２０は、ユーザーが複数のコンタクトを用いて１つのアクションを実行していることを判定することができる。例えば、ユーザーは、一方の手の５本の指全てで写真にタッチし、彼／彼女の手を捻ってこの写真を回転させる意図を示すことができる。操作プロセッサー１２０は、ユーザーが彼／彼女の手を回転するに連れて、５つの別々のコンタクト（指１本につき１つずつ）、および各コンタクトの座標変化を受け取る。操作プロセッサー１２０は、各コンタクトが同じオブジェクトを握っており、同じ回転を実行していることを判定することができる。本システムは、ユーザーがオブジェクトを回転させたことをアプリケーションに伝えるが、アプリケーションは、ユーザーがこの回転を実行するために、２本、５本、または任意の特定数の指あるいは他のコンタクトを用いたか否かについては無視することができる。これによって、アプリケーションの著作が大幅に簡略化される。何故なら、アプリケーション著作者は、アプリケーションに関連するタイプの操作を扱うことができ、マルチタッチ・ハードウェアから受け取った各低レベル・タッチ入力の意味を解釈するために、それを慣性システムに委ねることができるからである。
【００１４】
[0020]  操作プロセッサー１２０は、入力変換コンポーネント１３０を用いて、受け取った種々のコンタクトの動きの意味を、１つずつまたは纏めて、判定する。例えば、ユーザーが２本の指で写真を操作しており、２つの対応する入力コンタクトが生じた場合、操作プロセッサー１２０は入力変換コンポーネント１３０を用いて、これら２つのコンタクト間における相対的な動きの意味を判定する。２つのコンタクトが離れるように動く場合、入力変換コンポーネント１３０は、ユーザーがオブジェクトを拡縮してオブジェクトのサイズを変更していると判定することができる。２つのコンタクトが回転する場合、入力変換コンポーネント１３０は、ユーザーがオブジェクトを回転させていると判定することができる。２つのコンタクトが双方とも特定の方向にスライドする場合、入力変換コンポーネント１３０は、ユーザーがオブジェクトを新たな位置にパンニングしていると判定することができる。各タイプの動きについて別々に論じたが、ユーザーは同時に３つのタイプの動き全てを行うことができ、入力変換プロセッサーは全体的な変換をアプリケーションに報告できることに注目されたい。例えば、ユーザーは、１回の動きで、オブジェクトを回転させ、拡縮し、そしてパンニングすることができる。
【００１５】
[0021]  シミュレーション・コンポーネント１４０は、ユーザーがオブジェクトのタッチを止めた後に、アプリケーション・オブジェクトの連続する動きを、そのオブジェクトについて定められた初期化パラメータおよび制約に基づいてシミュレーションする。アプリケーションは、そのオブジェクトと関連のある操作プロセッサー１２０の最終状態によって、シミュレーション・コンポーネント１４０を初期化することができる。また、アプリケーションは、どのようにオブジェクトの境界が振る舞うかというような、オブジェクトの種々の特性を定めることもできる。シミュレーション・コンポーネント１４０は、物理的現象に基づく技法を用いて、ユーザーがオブジェクトを解放した後ある期間だけオブジェクトの挙動をシミュレートする。例えば、シミュレーション・コンポーネント１４０は、ユーザーがオブジェクトを動かしている間にアプリケーションによって受け取られた操作イベントと同じ形態で、アプリケーションへの通知を送出(fire)し続けることができる。次いで、アプリケーションは、どのアクション（ユーザーのアクションまたは物理的アクション）がオブジェクトを動かしたかに関するのではなく、オブジェクトの動きに対する反応に照準を合わせることができる。尚、仮想オブジェクトの同等の物理的挙動をソフトウェアでシミュレートする周知の技法が多数あることは、当業者に認められよう。
【００１６】
[0022]  アプリケーション・インターフェース１５０は、アプリケーションと通信して、情報を受信し、操作変換をアプリケーションに供給する。アプリケーション・インターフェース１５０は、初期化情報をアプリケーションから受け取る。初期化情報は、どのタイプの変換をアプリケーション・オブジェクトが、個々のオブジェクトおよび関連のある操作プロセッサーに対してサポートしているか指定することができ、そしてユーザーがもはやオブジェクトを動かしていないときに、シミュレーション・コンポーネント１４０のための初期化データーを指定することができる。例えば、あるアプリケーション・オブジェクトは、拡縮小をサポートするが、回転はサポートできない。初期化情報は、オブジェクトの軸心を指定することもできる。慣性システムは、アプリケーション・インターフェースを通じて、操作変換をアプリケーションに供給する。例えば、慣性システムが低レベル・タッチ入力を受け取り、この低レベル・タッチ入力をシステムが認識済みの変換（例えば、回転）と解釈すれば、本システムは、アプリケーションに操作について通知するイベントを始動する。アプリケーションは、この操作変換を処理して、この変換に基づいてオブジェクトを変更する。例えば、ユーザーがオブジェクト回転させた場合、アプリケーションが次にオブジェクトを表示するときに用いるために、アプリケーションは、オブジェクトの新たな方位を格納することができる。他の例として、ユーザーが解放した後に、シミュレーション・コンポーネント１４０の計算に基づいて、オブジェクトが回転し続ける場合、アプリケーションは、このオブジェクトの新たな方位を格納することができる。
【００１７】
[0023]  本システムが実装されている計算機は、中央処理ユニット、メモリー、入力デバイス（例えば、キーボードおよびポインティング・デバイス）、出力デバイス（例えば、ディスプレイ・デバイス）、および記憶デバイス（例えば、ディスク・ドライブ）を含むことができる。メモリーおよび記憶デバイスは、本システムを実現するコンピューター実行命令でエンコードすることができるコンピューター読み取り可能媒体であり、これは、命令を含むコンピューター読み取り可能媒体を意味する。加えて、データー構造およびメッセージ構造を、通信リンクにおける信号のような、データー送信媒体を通じて、格納または送信することができる。インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、二点間ダイアル・アップ接続、セル・フォン・ネットワーク等というような、種々の通信リンクを用いることができる。
【００１８】
[0024]  本システムの実施形態は、種々の動作環境において実現することができる。種々の動作環境には、パーソナル・コンピューター、サーバ・コンピューター、ハンドヘルドまたはラップトップ・コンピューター、マルチプロセッサー・システム、マイクロプロセッサー・ベース・システム、プログラマブル消費者電子機器、ディジタル・カメラ、ネットワークＰＣ、ミニコンピューター、メインフレーム・コンピューター、以上のシステムまたはデバイスの内任意のものを含む分散型計算環境等が含まれる。コンピューター・システムは、セル・フォン、パーソナル・ディジタル・アシスタント、スマート・フォン、パーソナル・コンピューター、プログラマブル消費者電子機器、ディジタル・カメラ等であってもよい。
【００１９】
[0025]  本システムは、１つ以上のコンピューターまたは他のデバイスによって実行される、プログラム・モジュールのような、コンピューター実行可能命令という一般的なコンテキストで説明することができる。一般に、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データー構造などを含み、特定のタスクを実行するか、または特定の抽象データー・タイプを実装する。通例、プログラム・モジュールの機能は、所望に応じて、種々の実施形態において組み合わせること、または分散することができる。
【００２０】
[0026]  図２は、一実施形態における、慣性システムの典型的な動作環境、およびコンポーネント間におけるデーター流を示す、データー流れ図である。マルチタッチ・ハードウェア・デバイスが、ハードウェア・インターフェースを通じて、入力２１０を生成する。例えば、ハードウェアは、ハードウェア製造業者によって提供されたソフトウェア・ドライバーを通じて、入力２１０をオペレーティング・システムに送ることができる。ハードウェア・インターフェースは、入力イベント２２０をアプリケーション２３０に供給する。例えば、アプリケーション２３０がマルチタッチ・ユーザー入力およびレジスタをサポートし、マルチタッチ・ユーザー入力に関するメッセージを受信することを、オペレーティング・システムに伝えることができる。アプリケーション２３０は、低レベルタッチ入力情報を入力変化２４０として受け取り、この入力変化２４０を操作システム２５０に転送する。例えば、入力変化２４０は、各コンタクトの現在の位置を示す１組の座標および他の動き特性を用いて、ハードウェアとの１つ以上のタッチ・コンタクトの各動きを記述することができる。操作システム２５０は、入力変化２４０を解釈し、ユーザーが表示されているオブジェクトにおいて実行しているより高いレベルの操作を示す１つ以上の操作イベント２６０をアプリケーション２３０に通知する。例えば、コンタクトの動きが、ユーザーがオブジェクトを回転させようとしていることを示す場合、操作イベント２６０は回転の度数を示す。
【００２１】
[0027]  ユーザーがオブジェクトを動かし終えると（例えば、アプリケーションが、オブジェクトにタッチしている各コンタクトがタッチ・ハードウェアから除去されたことの通知を受け取ったとき）、アプリケーション２３０は、初期化情報２７０を慣性システム２８０に送る。慣性システム２８０は、オブジェクトの次の位置を決定し、ユーザーがオブジェクトを移動させていたときに操作システム２５０が供給した操作イベント２６０と同様の慣性イベント２９０を供給する。また、アプリケーション２３０は、周期的に慣性システム２８０をコールして、オブジェクトの次の位置を慣性イベント２９０を通じて提供するために、駆動タイマーも設ける。アプリケーション２３０は、操作イベントと同様に、慣性イベントを処理する。
【００２２】
[0028]  図は、アプリケーションが最初にタッチ入力を受け取り、このタッチ入力を操作システムおよび慣性に渡すことを示すが、実施形態によっては、これらのシステムがタッチ入力を直接ハードウェア・インターフェースから受け取り、このタッチ入力を解釈し、解釈した操作イベントをアプリケーションに供給する場合もある。同様に、アプリケーションは、別の慣性システム２８０が、ユーザーがオブジェクトをタッチによって動かすのを止めた後に慣性イベントを供給することを知らなくてもよく、代わりに、ユーザーがオブジェクトを動かしている間およびオブジェクトが慣性に基づいて動いているときに１つのインターフェースからイベントを受け取ってもよい。これは、結果的に同様の機能を設けるが、入力の処理に対してアプリケーションに与える制御が少ない、代わりのアーキテクチャを表す。例えば、アプリケーションは、システムが個々の操作プロセッサーを取り付ける個々のアプリケーション・オブジェクトを定めることができなくてもよい。ＲＴＳプラグインは、本システムに合わせたこの代わりのアーキテクチャの一例である。
【００２３】
[0029]  図３は、一実施形態において、ユーザー・タッチによって操作されるアプリケーション・オブジェクトを示す表示図である。アプリケーションは、多くのこのようなオブジェクトに対するタッチ入力を同時に表示し受け取ることができる。例えば、オペレーティング・システム・シェル・アプリケーションが、ユーザーのコンピューター・デスクトップに格納されている１つ以上の文書オブジェクトを表示することができる。ディスプレイ３１０において、文書オブジェクト３２０は、ユーザーのデスクトップにあり、ユーザーがタッチを用いてリサイクル・ビン３３０までドラッグしたい文書を表す。ユーザーは、文書オブジェクト３２０の弾き動作(flicking motion)を実行すると、その結果、システムは、第１操作位置３４０、第２操作位置３５０、および第３操作位置３６０を処理する。ユーザーが最初に１本以上の指（即ち、コンタクト）で文書オブジェクト３２０にタッチしたときに、アプリケーションは第１操作位置３４０を受け取る。アプリケーションは、ユーザーが彼／彼女の指を画面を横切るように滑らすと、第２操作位置３５０を受け取る。アプリケーションは、ユーザーが彼／彼女の指を画面から持ち上げたときに、第３操作位置を受け取る。矢印３６５は、文書オブジェクト３２０の動きのベクトルを表す。
【００２４】
[0030]  慣性がないと、文書オブジェクト３２０は第３操作位置３６０で止まってしまうが、これはユーザーが意図したものではないと思われる。慣性システムは、ユーザーがまだ文書オブジェクト３２０にタッチしこれを動かしているかのように、ユーザーが文書オブジェクト３２０を解放したときの文書オブジェクト３２０の速度に基づいて、追加の操作位置をアプリケーションに供給する。アプリケーションが慣性システムを初期化して、この慣性システムの処理機能を最初にコールしたときに、アプリケーションは第１の慣性に基づく操作位置３７０を受け取る。アプリケーションが慣性システムの処理機能をコールし続けると、アプリケーションは第２の慣性に基づく操作位置３８０を受け取る。文書オブジェクト３２０の最終操作位置３８０はリサイクル・ビン３３０上にあるので、アプリケーションは２つのオブジェクト間におけるコンタクトを処理する（例えば、文書オブジェクト３２０をリサイクル・ビン３３０の中に入れることによって）。図示した例では、慣性システムが文書オブジェクト３２０の動きを減速しても、文書オブジェクト３２０は、開始時の文書オブジェクト３２０のユーザーの動きの高い初期速度に基づいて、ディスプレイ３１０を横切ってかなりの距離にわたってなおも動くことができる。
【００２５】
[0031]  図４は、一実施形態において、操作イベントを扱うために慣性システムを用いるマルチタッチ・アプリケーションの入力ループ処理を示す流れ図である。ブロック４１０において、アプリケーションは、低レベル・タッチ入力を受け取る。例えば、オペレーティング・システムまたは慣性システムのインスタンスが、マルチタッチ・ハードウェアからタッチ・コンタクト情報を受け取り、このタッチ・コンタクト情報をアプリケーションに転送する。ブロック４２０において、アプリケーションは、入力に該当するオブジェクトを特定する。例えば、アプリケーションは、受け取った入力の座標を、アプリケーションによって表示されている各アプリケーション・オブジェクトの座標と比較することによって、受け取った入力の座標とヒットするか検査することができる。タッチ入力が、表示されているアプリケーション・オブジェクトの境界以内にある場合、アプリケーションは、このタッチ入力がそのオブジェクトに該当すると判定する。ブロック４３０において、アプリケーションは、慣性システム（図５参照）を呼び出すために、受け取ったタッチ入力、および特定したアプリケーション・オブジェクトについての情報を、操作ＡＰＩに送る。例えば、アプリケーションはアプリケーション・オブジェクト毎に数値識別子を作り、タッチ入力がそのオブジェクトに対応する毎に、数値識別子を慣性システムに渡すことができる。
【００２６】
[0032]  ブロック４４０において、アプリケーションは、特定したアプリケーション・オブジェクトの１つ以上の操作を記述する操作イベントを、慣性システムから受け取る。例えば、アプリケーションは、アプリケーション・オブジェクトの２Ｄアフィン変換を記述するイベントを受け取ることができる。尚、図示の簡素化のために、ブロック４４０はブロック４３０の後に続けて描かれていることを記しておく。実際には、アプリケーションは、慣性システムがアプリケーションに操作イベントを通知する前に、多くのタッチ入力イベントを受け取ることができる。タッチ入力イベントと操作イベントとには、必ずしも１対１のマッピングがある訳ではない。操作イベントは低レベルタッチ入力のより高いレベルの解釈を表すので、複数のタッチ入力が１つの操作イベントを構成する場合もある。ブロック４５０において、アプリケーションは、受け取った操作イベントを扱う。例えば、受け取った操作イベントが回転である場合、アプリケーションは画面上でアプリケーション・オブジェクトを回転させ、このアプリケーション・オブジェクトが再度表示されたときに用いるために、このアプリケーション・オブジェクトの新たな位置を格納することができる。慣性システムは、特定のマルチタッチ・ハードウェア・デバイスに特定的なステップを実行することから、アプリケーションを解放し、あるいはどのハードウェア・デバイスがマルチタッチ入力を供給しているのかを知ることからもアプリケーションを解放する。加えて、慣性システムは、個々のコンタクトの動きを処理することから、アプリケーションを解放し、アプリケーションがアプリケーション・オブジェクト・レベルで変換を処理することに集中することを可能にする。
【００２７】
[0033]  ブロック４６０において、アプリケーションは次のタッチ入力を待つ。例えば、アプリケーションは、次のメッセージがアプリケーションのメッセージ・キューに配信されるのを待つMicrosoft WindowsのGetMessageのような、オペレーティング・システムが提供するメッセージＡＰＩをコールすることができる。判定ブロック４７０において、アプリケーションが次のタッチ入力を受け取ると、アプリケーションはブロック４１０に戻ってこの入力を処理する。それ以外の場合、アプリケーションはブロック４６０に戻って、更に別の入力を待ち続ける。アプリケーションが閉じるとき、アプリケーションは入力ループ（図示せず）から出る。
【００２８】
[0034]  図５は、一実施形態において、システムがタッチ入力を受け取ったときの慣性システムの処理を示す流れ図である。ブロック５０５において、本システムは、タッチ入力を、このタッチ入力が関連付けられているアプリケーション・オブジェクトを特定する情報と共に受け取る。例えば、タッチ入力は、１つ以上のタッチ・コンタクトの座標または他の位置情報を含むことができ、アプリケーション・オブジェクト情報は、マルチタッチ・ハードウェア上に表示されているオブジェクトの内タッチ入力が上にある個々のオブジェクトに、アプリケーションが割り当てた識別子を含むことができる。ブロック５１０において、システムは、アプリケーション・オブジェクトと関連のある操作プロセッサーを特定する。判定ブロック５２０において、システムが前に操作プロセッサーをアプリケーション・オブジェクトと関連付けていない場合、システムはブロック５３０に進む。それ以外の場合、システムはブロック５４０に進む。ブロック５３０において、システムは操作プロセッサーを作成し、それをアプリケーション・オブジェクトと関連付け、次いでブロック５４０に進む。
【００２９】
[0035]  判定ブロック５４０において、受け取ったタッチ入力が、アプリケーションが新たなコンタクト（例えば、着地イベント）を受け取ったことを示す場合、システムはブロック５５０に進み、それ以外の場合、システムはブロック５６０に進む。例えば、ユーザーは、画面上のオブジェクトと指との初期コンタクトを行うこと、または別の指（即ち、コンタクト）を前にタッチしたオブジェクト上に置くことができる。ブロック５５０において、システムは、新たなコンタクトを、操作プロセッサーと関連のあるコンタクトのリストに追加し、次いでブロック５６０に進む。判定ブロック５６０において、タッチ・コンタクトが取り除かれた（例えば、タッチ・アップ・イベント(touch up event)という通知をアプリケーションが受け取ったことを、受け取ったタッチ入力が示す場合、システムはブロック５７０に進み、それ以外では、システムはブロック５８０に進む。例えば、ユーザーは１本以上の指を、前にタッチしたオブジェクトから持ち上げることもある。ブロック５７０において、システムは、操作プロセッサーと関連のあるコンタクトのリストから、このコンタクトを除去し、次いでブロック５８０に進む。ブロック５８０において、システムはこのタッチ入力を処理して、このタッチ入力によって表される任意の操作を決定する。例えば、タッチの動きが回転操作または平行移動操作を示すことができ、一方タッチ・コンタクトの除去が、操作の完了を示すことができる。ブロック５９０において、システムは、操作イベントを始動して、この操作を記述する変換情報をアプリケーションに送る。例えば、システムは、オブジェクトの回転角度をアプリケーションに与えることができる。ブロック５９０の後、これらのブロックは終了する。
【００３０】
[0036]  図６は、一実施形態において、慣性イベントを処理するために慣性システムを用いるマルチタッチ・アプリケーションの処理を示す流れ図である。ブロック６１０において、アプリケーションは、ユーザーがオブジェクトを解放したと判定する。例えば、図４のブロック４５０における操作イベントの扱いに続いて、アプリケーションは、操作が完了したことの指示、またはユーザーがアプリケーション・オブジェクトにタッチしていた全てのコンタクトを引き上げたことの指示を受け取ることもあり得る。ブロック６２０において、アプリケーションは慣性システムを初期化する。例えば、アプリケーションは、オブジェクトの動きや他の初期化情報を扱っていた操作プロセッサーに、参照を渡すことができる。ブロック６３０において、アプリケーションは、慣性システムの慣性処理期間を計る(drive)タイマーを設定する。例えば、アプリケーションは、１００ミリ秒毎に始動するタイマーを設定して、オブジェクトの次の動き増分(movement increment)を処理することができる。ブロック６４０において、アプリケーションは慣性システムの処理機能（図７参照）をコールする。例えば、慣性システムは、最後のシミュレーション期間以降の期間について、シミュレーションを実行する時間であることを慣性システムに伝えるためにアプリケーションがコールする「処理」機能を設けることができる。
【００３１】
[0037]  ブロック６５０において、アプリケーションは、シミュレートした慣性に基づいて、オブジェクトの操作（例えば、回転、平行移動、および／または拡縮）を記述する１つ以上の慣性イベントを受け取る。例えば、オブジェクトが特定の方向に移動していた場合、アプリケーションは、その方向における平行移動操作を記述する慣性イベントを受け取ることがある。他の例として、ユーザーがオブジェクトを解放したときにそのオブジェクトが拡大していた場合、アプリケーションは、走査操作を記述する慣性イベントを受け取ることがある。尚、図示の簡略化のために、ブロック６５０がブロック６４０の後に続いて描かれていることを記しておく。実際には、アプリケーションは、慣性システムがアプリケーションに慣性イベントを通知する前に、慣性処理機能を数回コールすることもある。コールと処理機能および慣性イベントには必ずしも１対１のマッピングがある訳ではない。一方、慣性システムは、処理機能への１回のコールの後、アプリケーションに複数の慣性イベントを通知することができる。
【００３２】
[0038]  ブロック６６０において、アプリケーションは、特定のアプリケーションのコンテキストにおける操作の意味（例えば、効果）に基づいて、受け取った慣性イベントを扱う。例えば、受け取った慣性イベントが回転である場合、アプリケーションは、画面上でアプリケーション・オブジェクトを回転させ、アプリケーションがこのアプリケーション・オブジェクトを再度表示したときに用いるために、このアプリケーション・オブジェクトの新たな位置を格納することができる。判定ブロック６７０において、慣性イベントが完了した場合、これらのステップは終了する。そうでなければ、システムはブロック６８０に進む。慣性システムは、特定のシミュレートした操作が完了したことを、プロセス機能からの戻り値として、またはアプリケーションに与えられる通知を通じて（コンポーネント・オブジェクト・モデル（ＣＯＭ）イベント・インターフェースを通じて）、アプリケーションに伝えることができる。ブロック６８０において、アプリケーションは、タイマーの次の始動を待ち、次いでブロック６４０に戻って、慣性システム処理機能をコールする。
【００３３】
[0039]  図７は、一実施形態における、慣性処理システムのシミュレーション・コンポーネントの処理を示す流れ図である。ブロック７１０において、このコンポーネントが初期シミュレーション・パラメータを受け取る。例えば、アプリケーションまたは走査プロセッサーが、ユーザーがオブジェクトにタッチするのを止めたときにおけるアプリケーション・オブジェクトの最終状態を与えることができる。ブロック７２０において、本コンポーネントは、物理的現象に基づいて計算を実行するシミュレーション・エンジンを初期化して、パラメータに基づいてオブジェクトの挙動を判定する。例えば、シミュレーション・エンジンは、ユーザーのタッチ入力によって動き始めたアプリケーション・オブジェクトに対して、現実的な減速または弾性挙動を与えることができる。ブロック７３０において、本コンポーネントはアプリケーションからプロセス・コールを受ける。アプリケーションまたは他のコンポーネントは、規則的な間隔で処理機能を繰り返しコールしてシミュレーションを先に動かすことによって、シミュレーション・プロセスを駆動する。また、シミュレーション・コンポーネントは内部でタイマーを発生することもできる。
【００３４】
[0040]  ブロック７４０において、本コンポーネントは、初期パラメータ、任意の前の処理、および最後のプロセス・コール以来の経過時間に基づいて、オブジェクトの動きをシミュレートする。また、プロセス・コールは、アプリケーションがシミュレーションを用いたい時刻を示すタイムスタップも供給することができる。これによって、アプリケーションはリアル・タイム以外でもアプリケーション挙動をシミュレートすることが可能になる（例えば、アプリケーションの検査またはデバッグのため）。判定ブロック７５０において、動きが完了した場合、本コンポーネントはブロック７６０に進む。それ以外の場合、本コンポーネントはブロック７７０に進む。本コンポーネントは、オブジェクトがなおも動いているか否か、またはオブジェクトの動きがあるしきい値以下になったか否かというような、要因に基づいて、動きが完了したことを判定することができる。ブロック７６０において、本コンポーネントは、次の慣性イベントに完了フラグをセットする。ブロック７７０において、本コンポーネントは、慣性イベントを始動して、現在の動きを記述する変換情報を（例えば、操作として）アプリケーションに送る。例えば、システムは、オブジェクトの回転角度をアプリケーションに与えることができる。ブロック７７０の後、これらのステップは完了する。
【００３５】
[0041]  実施形態によっては、慣性システムがアプリケーションからオブジェクト制約を受けることもある。例えば、アプリケーションがオブジェクトの弾性、摩擦係数（どのようにオブジェクトが減速するか決定するため）、オブジェクトの境界特性などを定めることができる。例えば、アプリケーション著作者が、動かされてウィンドウ・エッジにぶつかったオブジェクトが、ユーザーがこれらを解放したときに、このウィンドウ・エッジから跳ね返るように、ユーザーが動かすことができる剛性オブジェクト、および弾力性のあるアプリケーション・ウィンドウ・エッジを定めることができる。  
【００３６】
[0042]  実施形態によっては、慣性システムが、ユーザーがオブジェクトをタッチ入力で操作していたときに、オブジェクトの動きを追跡していた操作システムから初期オブジェクト状態情報を受け取ることもある。例えば、操作システムは、各オブジェクトの現在の位置、オブジェクトのこれまでの動き、オブジェクトの線速度および角速度等を追跡することができる。アプリケーション著作者は、慣性システムを初期化するために、操作の出力を慣性システムに供給することができるので、慣性システムは、オブジェクトのしかるべき物理的性質および特性に基づいて、オブジェクトの過去の動きを円滑に続け、その速度を低下させることができる。
【００３７】
[0043]  実施形態によっては、慣性システムが、オブジェクトの動きに関する制限をアプリケーションから受ける場合もある。例えば、アプリケーション著作者が、ユーザーが一旦オブジェクトを解放した際にこのオブジェクトが動くことができる距離に上限を定めることができる。別の例として、アプリケーションは、ユーザーが一旦オブジェクトを解放した際に、このオブジェクトがどのように動くことができるかについて上限を定めることができる。これらおよびその他の制限によって、アプリケーション著作者は慣性システムを調節し、アプリケーションによって操作されるオブジェクトのタイプに適するように、そしてユーザーのこのアプリケーションとの体験を向上させることができる。
【００３８】
[0044]  実施形態によっては、動きが予め定められたしきい値未満のオブジェクトには、慣性システムが追加の動きを与えない場合もある。このしきい値は、アプリケーションによって設定可能としてもよい。例えば、慣性システムは、特定のオブジェクト線形速度または角速度を有することができ、この速度未満では、ユーザーがオブジェクトを解放した後、システムはオブジェクトの動きを継続しない。ユーザーがオブジェクトを解放したときに、このオブジェクトが非常に速く動いていない場合、ユーザーは、オブジェクトが留まり、動き続けないことを予期する場合がある。このしきい値によって、アプリケーションまたは慣性システムの著作者は、相応しいユーザー体験を与える操作の後、動きのレベルを決定することが可能になる。
【００３９】
[0045]  実施形態によっては、慣性システムが、アプリケーションから、動きを増分的にシミュレートする命令を受け取る場合もある。例えば、慣性システムは、アプリケーションが慣性システムにシミュレーション全体の一部を実行するように命令するためにコールする「処理」または「作業実行」(DoWork)機能を設けることができる。慣性システムは、アプリケーションがタイマーをセットするかまたはそれ以外で周期的にこの機能をコールして、慣性システムに自然なタイムラインにしたがって経時的に動きをシミュレートさせることを予期する(expect)こともある。アプリケーションは、アプリケーションがこの機能をコールする頻度を変化させることによって、慣性システムが供給する操作イベントの特性に作用することができる。他の実施形態では、慣性システムは、内部タイマーを用いて、各オブジェクトが動きを停止するまで（例えば、減速または他のシミュレートした力によって）、規則的なスケジュールで操作イベントを供給する。
【００４０】
[0046]  実施形態によっては、慣性システムがメッセージ・ベース・オペレーティング・システムの一部となることもあり、システムは、オペレーティング・システムがハードウェアから受け取るタッチ入力に関するメッセージを受け取る。例えば、マウス・メッセージに対するWM_MOUSEMOVEと同様の枠具備を用いて、Microsoft Windowsの今後のバージョンは、マルチタッチ・ハードウェアから受け取った低レベル・タッチ動き情報を含む、WM_TOUCHメッセージを供給することもできる。また、オペレーティング・システムは、WM_TOUCHDOWN（新たなコンタクトがマルチタッチ・ハードウェアによって行われたとき）、WM_TOUCHMOVE（既存のコンタクトが動くとき）、およびWM_TOUCHUP（マルチタッチ・ハードウェアからコンタクトが持ち上げられたとき）のような、粒度が更に細かいメッセージを供給することもできる。WM_TOUCHに関するメッセージを受け取ったアプリケーションは、慣性システムを呼び出し、解釈および処理のために、このメッセージを慣性システムに渡すことができる。次いで、アプリケーションは、受け取った低レベル・タッチ動き情報に基づいて、ユーザーが意図する操作の慣性システムの解釈を表す、より高いレベルのイベントを受け取る。
【００４１】
[0047]  実施形態によっては、慣性システムがリアル・タイム・スタイラスのような特殊ハードウェアから、低レベル・タッチ動き情報を受け取ることもある。例えば、Microsoft Tablet PC Software Development Kit（ＳＤＫ：マイクロソフト・タブレットＰＣソフトウェア開発キット）は、リアル・タイム・スタイラス（ＲＴＳ）コンポーネントを設けており、アプリケーション著作者はこのコンポーネントを、フック(hook)を用いて拡張することができる。ＲＴＳフックは、ＲＴＳハードウェアから入力を受け取り、この受け取った入力に対して処理を実行することができる。慣性システムは、フックを供給することができ、アプリケーションはこのフックをＲＴＳコンポーネントに挿入して、ＲＴＳおよびその他の入力を自動的に処理して、本明細書において説明するようにアプリケーション・オブジェクトを操作することができる。ＲＴＳフックは、慣性システムが入力を受け取るための異なる方法を提供するが、慣性システムは、入力を解釈し、前述のように入力によって暗示される操作を記述するイベントを、アプリケーションに対して始動する。ユーザーは、スタイラスおよびタッチ入力の組み合わせを用いることもできる。例えば、ユーザーは、スタイラスを用いてオブジェクトを描き、次いで彼／彼女の指を用いてこのオブジェクトを回転させることができる。
【００４２】
[0048]  実施形態によっては、慣性システムが、共通ユーザー・インターフェースを提供するためにアプリケーションが呼び出すことができる共通制御部の一部である場合もある。Microsoft Windowsは、リスト、ツリー、ボタン等を表示するために共通制御部を備えている。同様に、慣性システムは、本明細書において説明したようにアプリケーション・オブジェクトを操作するマルチタッチ・ベース制御部を設けることもできる。例えば、システムは、ユーザーが１つ以上のオブジェクトを表示しこれらのオブジェクトを操作することを可能にする分散制御部(scatter control)を設けることができる。分散制御部は、低レベル・タッチ入力の処理を扱い、入力を特定のアプリケーション・オブジェクトと関連付ける。そして、アプリケーションはこの制御部からのイベントを受け取って、アプリケーション・オブジェクトの操作を扱う。例えば、この制御部が、ユーザーがオブジェクトのサイズを変更したことを示すと、アプリケーションはオブジェクトの新しいサイズを格納することができる。
【００４３】
[0049]  実施形態によっては、慣性システムが、本明細書において説明した処理を三次元で実行する場合もある。本明細書では、二次元のマルチタッチ・ハードウェアについて説明しているが、本明細書において説明したシステムの処理は、三次元において座標移動を行うためのハードウェアが利用可能であれば、等しく三次元（３Ｄ）操作にも応用できることは、当業者には認められよう。例えば、圧力を検出してまたはカメラを用いて、ユーザーの指の３Ｄの動きを検出するハードウェアがあれば、三次元の動きの座標を慣性システムに供給することができ、次いで、慣性システムは複数の３Ｄ方向におけるオブジェクトの操作（例えば、回転、拡縮、および平行移動）を記述する３Ｄ変換を生成することができる。
【００４４】
[0050]  以下の表は、オブジェクトのユーザー・タッチに基づく動きにしたがって、慣性に基づく移動をアプリケーション・オブジェクトに与えるために、慣性システムがアプリケーションに提供する１つのＡＰＩを定める。
【００４５】
【表１−１】
0005475792.tif 000002
【００４６】
【表１−２】
0005475792.tif 000003
【００４７】
【表１−３】
0005475792.tif 000004
【００４８】
[0051]  上の表では、慣性システムは、ユーザーの動きに基づいて、アプリケーションが前にイベントを受け取っていた同じインターフェースにおいて、リストに示されるイベントを供給することができる。
【００４９】
[0052]  以上のことから、本明細書では、例示の目的のために慣性システムの特定的な実施形態について説明したが、本発明の主旨や範囲から逸脱することなく、種々の変更を行うことができることは認められよう。例えば、マルチタッチ操作のコンテキストで本システムについて説明したが、本システムは、シミュレーションが極普通に用いられるゲームやその他の分野というような、他のコンテキストにおいて用いることができる慣性のシミュレーションも行う。したがって、本発明は、添付した特許請求の範囲によって限定されることを除いては、限定されないものとする。
【図１】
0005475792.tif 000005
【図２】
0005475792.tif 000006
【図３】
0005475792.tif 000007
【図４】
0005475792.tif 000008
【図５】
0005475792.tif 000009
【図６】
0005475792.tif 000010
【図７】
0005475792.tif 000011