昔、作っていたYouTubeExploreを改造して何か役に立つアプリケーションを作りたいなと思ったのですが、Visual StudioでProject名を変更する方法が分からないのでググってみました。
やり方を知ってれば簡単ですが、すぐに忘れてしまうと思うのでメモっておきます。
①Visual StudioのSolution Explorerでプロジェクト名を変更します。
②Projのファイル(*.sln)とその隣にあるフォルダ名を変更
③Projのファイル(*.sln)をワードパットで開き、以下の部分を新しいフォルダ名に書き換える。
管理人の「1000gou」が趣味の範囲で集めた情報や日記を投稿しています。 非IT系のエンジニアですが、独学で身に着けたプログラミングスキルを使って何か面白いことができればいいなと思っています。
2016年5月24日火曜日
2015年5月25日月曜日
Javascript使っているすごいサイト
Javascriptでどこまでできるか調べるために、Javascriptで出来ているすごいサイトを探索中。そのなかで、YouTubeExplorerに使えそうな技術を使っているサイトを見つけました。以下のサイトを見ているとhtml + css + javascriptでYouTubeExplorerが作れそうな気がしてきました。
ウェブ広告の会社だと思いますが、アニメーションがすごく滑らかですが、Javascriptで作られているらしい。WORKSで写真を紐でぶら下げて、ブラブラさせているページがありますが、写真の位置をJavascriptで制御しているみたいですが、この技術はYouTubeExplorerに使えそう。
何の会社だろう?ホームページとして面白いので参考にリンクを貼っときます。このページのアニメーションもJavascriptだそうです。
Javascript 勉強中
本日よりJavascript の勉強中です。その中で分かったことを箇条書き。
- Javascriptは昔使っていたJavaに物凄く似ている ・・・ あたりまえか?
- Visual StudioでHTMLとJavascriptの編集ができる ・・・ 結構使いやすいかも
- Google ChromeでF12を押すと、ページのソースが見れるし、Javascriptのエラーも見える
- D3というデータ可視化のライブラリ?がかなりいけているらしい ・・・とりあえずいじってみます。
- D3の日本語版チュートリアル発見 ⇒ 「D3 チュートリアル」
- D3 チュートリアルやっているときにいきなり、文字化けでエラーが起こるが対処法は「srcタグの中で<script charset="utf-8" src="d3.js"></script>という感じでcharsetを指定する(情報元)」
HTML5 + Javascript
クロスプラットホーム アプリケーションの本命は HTML5 + Javascript らしい。少し意外な気もするがとりあえずJavascriptを勉強することにしました。
2015年5月24日日曜日
Google Chrome で Silverlight が使えなくなる
YouTubeExplorer のネット版(ウェブブラウザーで実行できるバージョン)をSilverlightで作成しようと思い情報をあつめていたところ、SilverlightはGoogle Chromeで実行できなくなることがわかりました(情報元)。また、マイクロソフトも Silverlight ではなく HTML5 を今後の主流として考えているという情報もあります。
Visual Studio で Silverlight アプリケーション開発するのは簡単そうだったので、結構いいと思ったんだけどな。他の手段を探さねば。
Visual Studio で Silverlight アプリケーション開発するのは簡単そうだったので、結構いいと思ったんだけどな。他の手段を探さねば。
つながりを可視化するアプリケーション
YouTubeExplorer開発の参考にするため、同じようなアプリケーションがないか探してみたところ、すごいのを見つけました。それは産総研がつくっている、Songriumです。プログラミング技術とデザインが素晴らしいというか異次元のレベルで、SF映画に出てきそう。
ほかにはニコグラフというアプリケーションがあり、これは私が作ろうとしているアプリケーションのイメージがそのままです。世の中には同じことを考えている人っているんですね、しかもこのクォリティを超えるものを作れる気がしない。
そして、これらを使ってみた感想ですが、このクォリティのアプリケーションでも、ユーザーとして使った時に、ツールとしてどこが優れているのかが全く分からない。。。そもそも、つながりを可視化するというツールというコンセプト自体が間違っているのかな?
ほかにはニコグラフというアプリケーションがあり、これは私が作ろうとしているアプリケーションのイメージがそのままです。世の中には同じことを考えている人っているんですね、しかもこのクォリティを超えるものを作れる気がしない。
そして、これらを使ってみた感想ですが、このクォリティのアプリケーションでも、ユーザーとして使った時に、ツールとしてどこが優れているのかが全く分からない。。。そもそも、つながりを可視化するというツールというコンセプト自体が間違っているのかな?
2011年7月15日金曜日
KHR3-HVを制御するソフト作成②
暑いせいか、なぜかやる気が出ないですがせっかくKHR3-HVを購入したので少しずつでも進めないとな。そういうわけで、KHR3-HVを制御するソフトの開発環境について検討してみました。
結論
Visual C# + .Net Framework 2.0 + DirectX9.0 + SlimDX
理由
プログラムを手軽に行いたいので .Net は必須です。そうなると3Dライブラリの選択肢としては、Managed DirectX, Windows API Code Pack for Microsoft .NET Framework, SlimDXの3つが考えられます。しかしManaged DirectXは開発終了のため却下。また、Windows API Code Pack for Microsoft .NET FrameworkはDirectX10の対応でありWindowsXP非対応のため却下。そういう理由で残ったSlimDXに決定です。あとはSlimDXのサンプルコードがVisual C#で作成のでVisual C#にします。
メモ
Visual C++でも.Netを使用可能。
CLR (Common Language Runtime) の略。マイクロソフトによる.NET Frameworkの動作環境の1つ。
Visual C# 2008 対応フレームワーク (.Net Framework 2.0, 3.0, 3.5)。
Visual C# 2010 対応フレームワーク (.Net Framework 2.0, 3.0, 3.5, 4.0)
Windowsのバージョン別 .Net Framework対応表
SlimDX Homepage
SlimDX と C# で学ぶ DirectX
結論
Visual C# + .Net Framework 2.0 + DirectX9.0 + SlimDX
理由
プログラムを手軽に行いたいので .Net は必須です。そうなると3Dライブラリの選択肢としては、Managed DirectX, Windows API Code Pack for Microsoft .NET Framework, SlimDXの3つが考えられます。しかしManaged DirectXは開発終了のため却下。また、Windows API Code Pack for Microsoft .NET FrameworkはDirectX10の対応でありWindowsXP非対応のため却下。そういう理由で残ったSlimDXに決定です。あとはSlimDXのサンプルコードがVisual C#で作成のでVisual C#にします。
メモ
Visual C++でも.Netを使用可能。
CLR (Common Language Runtime) の略。マイクロソフトによる.NET Frameworkの動作環境の1つ。
Visual C# 2008 対応フレームワーク (.Net Framework 2.0, 3.0, 3.5)。
Visual C# 2010 対応フレームワーク (.Net Framework 2.0, 3.0, 3.5, 4.0)
Windowsのバージョン別 .Net Framework対応表
SlimDX Homepage
SlimDX と C# で学ぶ DirectX
2011年7月1日金曜日
時間がない!
最近やりたいことがたくさんあるのに時間が足りません。
とりあえず、整理のためにやりたいことを箇条書き。
①ロボット関連
KHR-3HVを購入し組み立ては完了しました。その後モーションを作成しているのですが、思ったよりも難しいです。おそらくここが最初の壁で、初心者の中の何割かは、モーション作成で挫折するんだろうな。KHR-3HVのモーション作成ソフトである『HeartToHeart4』は直感的でわかりやすいですが、マニュアルを読まなくてもわかるというレベルではないです。まあ、やってることがそれなりに複雑なので、マニュアルを読まないでも使いこなせるというのは難しいでしょうが。
モーションを作るときにつまずく原因はロール、ピッチ、ヨーといわれてもピンとこないこと、サーボをどれだけ動かしたらどういう姿勢になるかが想像できないことでしょうか。こればっかりは慣れの問題なので時間がかかりそうです。 ということで(どういうこと?)、現在の課題はモーション作成です。
②YouTubeExplorerバージョンアップ
方針はシンプル イズ ベスト。Visal Basicの勉強もかねていたので、いろいろ機能を追加しましたがよく考えると必要ない機能もあるな。そもそも、私がフリーソフトに求める性能は、多機能性よりも直感的に操作が出来ること。やっぱり物作りの基本は、自分よいと思うものを作ることなので方針転換して余分な贅肉をそぎ落としたいです。
③ドライブ
以前の日記でコンパクトカー試乗日記を書いていましたが、最終的に スイフト を購入しました。理由はハンドリングのよさと足回りとボディの剛性がよいので、山行って走ると楽しそうだから。ただCVTのシフトマップを燃費に振りすぎて、加速性 特に出足のもたつきはものすごく気になりました。しかし、スポーツモードというオーバードライブみたいなモードがあり、これにするとかなりリニアリティが改善されます。高回転側にシフトするので、燃費はかなり悪化するでしょうが、山にドライブに行ったときぐらい燃費が悪化してもいいかと思い、スイフト購入に踏み切りました。ちなみに納車は先々週でしたので、ドライブに行きたくてしょうがないです。
④おいしいものが食べたい
来週、結婚記念日です。うちはまだ子供がいないので、結婚記念日は奮発しておいしいものを食べにいく予定です。ステーキかイタリアンがいいな~。クルマでドライブついでに、おいしいもの食べるというのがベストです。箱根とかいい店ないかな?
⑤フットサル
最近、ロボット観戦に時間が奪われてまったくボールを蹴っていないです。私の場合、フットサルぐらいしか運動していないので、それがなくなると体力が低下が著しいです。せめて週1ぐらいではボール蹴りたいな。
⑥本業のための勉強と仕込み
転職して5年ようやく少しずつわからなかったことがわかるようになってきたので、すごく面白い。特に昔から興味があった分野(アルゴリズム関連:回帰とか探索とか)を使えば大幅な能率アップが見込めそう。さすがにこの分野を会社で勉強すると目の前の仕事がこなせなくなるので、家で勉強と仕込みが必要。
とりあえず、整理のためにやりたいことを箇条書き。
①ロボット関連
KHR-3HVを購入し組み立ては完了しました。その後モーションを作成しているのですが、思ったよりも難しいです。おそらくここが最初の壁で、初心者の中の何割かは、モーション作成で挫折するんだろうな。KHR-3HVのモーション作成ソフトである『HeartToHeart4』は直感的でわかりやすいですが、マニュアルを読まなくてもわかるというレベルではないです。まあ、やってることがそれなりに複雑なので、マニュアルを読まないでも使いこなせるというのは難しいでしょうが。
モーションを作るときにつまずく原因はロール、ピッチ、ヨーといわれてもピンとこないこと、サーボをどれだけ動かしたらどういう姿勢になるかが想像できないことでしょうか。こればっかりは慣れの問題なので時間がかかりそうです。 ということで(どういうこと?)、現在の課題はモーション作成です。
②YouTubeExplorerバージョンアップ
方針はシンプル イズ ベスト。Visal Basicの勉強もかねていたので、いろいろ機能を追加しましたがよく考えると必要ない機能もあるな。そもそも、私がフリーソフトに求める性能は、多機能性よりも直感的に操作が出来ること。やっぱり物作りの基本は、自分よいと思うものを作ることなので方針転換して余分な贅肉をそぎ落としたいです。
③ドライブ
以前の日記でコンパクトカー試乗日記を書いていましたが、最終的に スイフト を購入しました。理由はハンドリングのよさと足回りとボディの剛性がよいので、山行って走ると楽しそうだから。ただCVTのシフトマップを燃費に振りすぎて、加速性 特に出足のもたつきはものすごく気になりました。しかし、スポーツモードというオーバードライブみたいなモードがあり、これにするとかなりリニアリティが改善されます。高回転側にシフトするので、燃費はかなり悪化するでしょうが、山にドライブに行ったときぐらい燃費が悪化してもいいかと思い、スイフト購入に踏み切りました。ちなみに納車は先々週でしたので、ドライブに行きたくてしょうがないです。
④おいしいものが食べたい
来週、結婚記念日です。うちはまだ子供がいないので、結婚記念日は奮発しておいしいものを食べにいく予定です。ステーキかイタリアンがいいな~。クルマでドライブついでに、おいしいもの食べるというのがベストです。箱根とかいい店ないかな?
⑤フットサル
最近、ロボット観戦に時間が奪われてまったくボールを蹴っていないです。私の場合、フットサルぐらいしか運動していないので、それがなくなると体力が低下が著しいです。せめて週1ぐらいではボール蹴りたいな。
⑥本業のための勉強と仕込み
転職して5年ようやく少しずつわからなかったことがわかるようになってきたので、すごく面白い。特に昔から興味があった分野(アルゴリズム関連:回帰とか探索とか)を使えば大幅な能率アップが見込めそう。さすがにこの分野を会社で勉強すると目の前の仕事がこなせなくなるので、家で勉強と仕込みが必要。
YouTubeExploer 雑誌『IP!』に掲載されるっす。
以前この日記でも少し触れたYouTubeExploereの雑誌への掲載が実現します(しました?)!
掲載される雑誌は『IP!』というフリーソフトを紹介する雑誌です。私はあまり読んだことはありませんが、コンビニで売っているのを見たことがあるので、それなりに発行部数のある雑誌だと思います。
記事には、紹介文と実行時の画面のスクリーンショットがあります。ということはYouTubeExploereが私のPC以外でも動くということがはじめて確認できました。
すこしやる気が出てきたような気が、久しぶりにYouTubeExploerのバージョンアップでもしようかな?
掲載される雑誌は『IP!』というフリーソフトを紹介する雑誌です。私はあまり読んだことはありませんが、コンビニで売っているのを見たことがあるので、それなりに発行部数のある雑誌だと思います。
記事には、紹介文と実行時の画面のスクリーンショットがあります。ということはYouTubeExploereが私のPC以外でも動くということがはじめて確認できました。
すこしやる気が出てきたような気が、久しぶりにYouTubeExploerのバージョンアップでもしようかな?
↓掲載される IP! 8月号↓
↓P.121でYouTubeExploerが紹介されています!↓
2011年5月27日金曜日
YouTubeExploereがベクターへ登録された。
本日VectorよりメールがありYouTubeExploereが公開になるそうです。
初の公開なので少しうれしいです。
ということで、とりあえず検索かけてみましたが、見つからず。。。。
メール到着の時点では、まだ公開されていないこともあるとのこと。
とりあえずのんびり待ちますか。
→→→
先ほど確認したら、こちらで公開されていました。 祝 初公開!
ただ、ソフト詳細説明が変だし、ReadMeの中に誤字を発見。。。まあ、いっか。
初の公開なので少しうれしいです。
ということで、とりあえず検索かけてみましたが、見つからず。。。。
メール到着の時点では、まだ公開されていないこともあるとのこと。
とりあえずのんびり待ちますか。
→→→
先ほど確認したら、こちらで公開されていました。 祝 初公開!
ただ、ソフト詳細説明が変だし、ReadMeの中に誤字を発見。。。まあ、いっか。
2011年5月25日水曜日
YouTubeExplorerが雑誌に掲載されるかも
最近は仕事が忙しいです。
しかも、8月に車検切れでおそらくもう車検は通らないので、車選びのため土日はディーラーへ行っています。 ということで、日記の更新は久々です。というか家でPCを開くこと自体久々のような気が。。
という前置きはおいといて本題へ。
YouTubeExplorerが雑誌に掲載されるかも。
確定ではないですが、某PC雑誌?(フリーソフトがたくさん紹介されている雑誌)のかたより、YouTubeExplorer を掲載してもよいですかという旨のメールが来ていました。当然断る理由がないので二つ返事でO.K.というか是非お願いしたいと回答しておきました。
しかも、8月に車検切れでおそらくもう車検は通らないので、車選びのため土日はディーラーへ行っています。 ということで、日記の更新は久々です。というか家でPCを開くこと自体久々のような気が。。
という前置きはおいといて本題へ。
YouTubeExplorerが雑誌に掲載されるかも。
確定ではないですが、某PC雑誌?(フリーソフトがたくさん紹介されている雑誌)のかたより、YouTubeExplorer を掲載してもよいですかという旨のメールが来ていました。当然断る理由がないので二つ返事でO.K.というか是非お願いしたいと回答しておきました。
2011年5月15日日曜日
.ini ファイル
YouTubeExploere Version0.0.3へのアップデートへ向けてこつこつ改良開始。
本日は .ini ファイルを作成してウィンドウのサイズや大きさ, コントロールの情報を保存し、次回起動時に前回終了時を再現できるようにしました。
まず、イニシャルファイルの読み書き方法を調べたところ こちら のようにWindows APIを使用するようです。。。がなんだか難しそう。
とりあえず、テキストファイルで ラベル=値 という形で書いとて後は独自路線で行った方が楽そうだな。
方針 :
値の読み込みは
テキストファイルをStringに読み込み ⇒ =でspilitする ⇒ ハッシュテーブルに保存
⇒ ハッシュテーブルから変数に読み込みという形でいけそう。
でもって、値の書き出しは。。そのまま書き出せばいいじゃん。
方針が決まれば次にサンプルコードを探そう。
①文字コードを指定してテキストファイルを読み込む
②文字列から一行ずつ読み込む
③.NET TIPS ハッシュテーブル(連想配列)を使うには?
④文字コードを指定してテキストファイルに書き込む
大体イメージがつかめたら、後はサンプルコードをコピペで組み合わせて。。。
うまくいきました。謎の変数が大量にありみずらいですが作成したVisual Basic 2010 コードを載せておきます。
Visual Basicはインターネットにあるサンプルコードを組み合わせるだけですぐに動くし、日本語の変数が使えるしすごく便利です。
因みに私は、いちいちコメントを確認するのが面倒なので、最初から変数を見れば意味がわかるように日本語の変数を多様しています。
Public Sub イニシャルファイルを書き込み()
'Shift JISで書き込む
'書き込むファイルが既に存在している場合は、上書きする
Dim sw As New System.IO.StreamWriter(".\YouTubeExplorer.ini", False, System.Text.Encoding.GetEncoding("shift_jis"))
'イニシャルファイルへ書き込む
sw.Write("メインウィンドウ幅=" & CStr(Width) & vbCrLf)
sw.Write("メインウィンドウ高=" & CStr(Height) & vbCrLf)
sw.Write("メインウィンドウTop=" & CStr(Me.Top) & vbCrLf)
sw.Write("メインウィンドウLeft=" & CStr(Me.Left) & vbCrLf)
'閉じる
sw.Close()
End Sub
Public Sub イニシャルファイルを読み込み初期値をセット()
Dim sr As System.IO.StreamReader
'------イニシャルファイルを開き文字列へ保存
Try
sr = New System.IO.StreamReader(".\YouTubeExplorer.ini", System.Text.Encoding.GetEncoding("shift_jis"))
Catch ex As System.Exception
Return
End Try
Dim テキスト As String
Dim 行 As String
テキスト = sr.ReadToEnd()
'閉じる
sr.Close()
'-------一行ずつハッシュテーブルに保存する--------------
Dim rs As New System.IO.StringReader(テキスト)
Dim tmp As Object
Dim ht As Hashtable = New Hashtable
'ストリームの末端まで繰り返す
While rs.Peek() > -1
'一行読み込んで表示する
行 = rs.ReadLine()
tmp = Split(行, "=")
ht(tmp(0)) = tmp(1)
End While
rs.Close()
'------ハッシュテーブルに保存した値をセットする----------
Width = CInt(ht("メインウィンドウ幅"))
Height = CInt(ht("メインウィンドウ高"))
Top = CInt(ht("メインウィンドウTop"))
Left = CInt(ht("メインウィンドウLeft"))
End Sub
本日は .ini ファイルを作成してウィンドウのサイズや大きさ, コントロールの情報を保存し、次回起動時に前回終了時を再現できるようにしました。
まず、イニシャルファイルの読み書き方法を調べたところ こちら のようにWindows APIを使用するようです。。。がなんだか難しそう。
とりあえず、テキストファイルで ラベル=値 という形で書いとて後は独自路線で行った方が楽そうだな。
方針 :
値の読み込みは
テキストファイルをStringに読み込み ⇒ =でspilitする ⇒ ハッシュテーブルに保存
⇒ ハッシュテーブルから変数に読み込みという形でいけそう。
でもって、値の書き出しは。。そのまま書き出せばいいじゃん。
方針が決まれば次にサンプルコードを探そう。
①文字コードを指定してテキストファイルを読み込む
②文字列から一行ずつ読み込む
③.NET TIPS ハッシュテーブル(連想配列)を使うには?
④文字コードを指定してテキストファイルに書き込む
大体イメージがつかめたら、後はサンプルコードをコピペで組み合わせて。。。
うまくいきました。謎の変数が大量にありみずらいですが作成したVisual Basic 2010 コードを載せておきます。
Visual Basicはインターネットにあるサンプルコードを組み合わせるだけですぐに動くし、日本語の変数が使えるしすごく便利です。
因みに私は、いちいちコメントを確認するのが面倒なので、最初から変数を見れば意味がわかるように日本語の変数を多様しています。
Public Sub イニシャルファイルを書き込み()
'Shift JISで書き込む
'書き込むファイルが既に存在している場合は、上書きする
Dim sw As New System.IO.StreamWriter(".\YouTubeExplorer.ini", False, System.Text.Encoding.GetEncoding("shift_jis"))
'イニシャルファイルへ書き込む
sw.Write("メインウィンドウ幅=" & CStr(Width) & vbCrLf)
sw.Write("メインウィンドウ高=" & CStr(Height) & vbCrLf)
sw.Write("メインウィンドウTop=" & CStr(Me.Top) & vbCrLf)
sw.Write("メインウィンドウLeft=" & CStr(Me.Left) & vbCrLf)
'閉じる
sw.Close()
End Sub
Public Sub イニシャルファイルを読み込み初期値をセット()
Dim sr As System.IO.StreamReader
'------イニシャルファイルを開き文字列へ保存
Try
sr = New System.IO.StreamReader(".\YouTubeExplorer.ini", System.Text.Encoding.GetEncoding("shift_jis"))
Catch ex As System.Exception
Return
End Try
Dim テキスト As String
Dim 行 As String
テキスト = sr.ReadToEnd()
'閉じる
sr.Close()
'-------一行ずつハッシュテーブルに保存する--------------
Dim rs As New System.IO.StringReader(テキスト)
Dim tmp As Object
Dim ht As Hashtable = New Hashtable
'ストリームの末端まで繰り返す
While rs.Peek() > -1
'一行読み込んで表示する
行 = rs.ReadLine()
tmp = Split(行, "=")
ht(tmp(0)) = tmp(1)
End While
rs.Close()
'------ハッシュテーブルに保存した値をセットする----------
Width = CInt(ht("メインウィンドウ幅"))
Height = CInt(ht("メインウィンドウ高"))
Top = CInt(ht("メインウィンドウTop"))
Left = CInt(ht("メインウィンドウLeft"))
End Sub
2011年5月14日土曜日
Vectorへ登録申請中
YouTubeExploere を広めたいと思いVectorへ登録申請中です。
Vectorからの回答は 、『ソフトの概要』にソフトウェアの概要を乗せてくださいとのこと。
確かに ReadMe は完全なる手抜。ReadMeやヘルプを作るのってものすごくめんどくさいだよな。
といっても、絶対に必要な情報であることは確かなので、とりあえずソフトウェア概要を記述し、再申請しました。
因みにVecotrのファイル掲載基準は↓。
http://www.vector.co.jp/for_authors/upload/standard.html
Vectorからの回答は 、『ソフトの概要』にソフトウェアの概要を乗せてくださいとのこと。
確かに ReadMe は完全なる手抜。ReadMeやヘルプを作るのってものすごくめんどくさいだよな。
といっても、絶対に必要な情報であることは確かなので、とりあえずソフトウェア概要を記述し、再申請しました。
因みにVecotrのファイル掲載基準は↓。
http://www.vector.co.jp/for_authors/upload/standard.html
マウスの位置を変えないズーム (視点の位置を変えないズーム)
YouTubeExploereで使用している マウスの位置を変えないズーム (視点の位置を変えないズーム)のメモです。
絵や線は下図のようにワールド座標系で管理し、それを画面表示するときにView座標系に変換して表示するということを行っています。これは、ゲームやロボット工学でよく使われる手法ですが、『座標変換』でググると詳しい解説ページが見つかります。
View1倍率(B1) → View2倍率(B2)に変更する場合にワールド座標PwがP1=P2となるようにズームずるときは、View 座標系の原点をO1からO2に移動してやる必要があります。
そこで、ワールド座標系→Veiw座標系へ変換す式より
①P1 = (Pw-O1)*B1
②P2 = (Pw-O2)*B2
P1,P2 : View座標系での点(x,y) (ベクトルなので一応太字にしてますが見えるかな?)
図の●の点です。
O1, O2 : View座標系の原点(0,0)
Pw : World座標系での点(x,y)
ここでP1 = P2としたいので ①,②より
(Pw-O1)*B1 = (Pw-O2)*B2
Pw*B1-O1*B1 = Pw*B2-O2*B2
O2*B2 = Pw*B2-Pw*B1+O1*B1
なので結局
O2 = ( Pw*(B2-B1)+O1*B1)/B2
絵や線は下図のようにワールド座標系で管理し、それを画面表示するときにView座標系に変換して表示するということを行っています。これは、ゲームやロボット工学でよく使われる手法ですが、『座標変換』でググると詳しい解説ページが見つかります。
View1倍率(B1) → View2倍率(B2)に変更する場合にワールド座標PwがP1=P2となるようにズームずるときは、View 座標系の原点をO1からO2に移動してやる必要があります。
そこで、ワールド座標系→Veiw座標系へ変換す式より
①P1 = (Pw-O1)*B1
②P2 = (Pw-O2)*B2
P1,P2 : View座標系での点(x,y) (ベクトルなので一応太字にしてますが見えるかな?)
図の●の点です。
O1, O2 : View座標系の原点(0,0)
Pw : World座標系での点(x,y)
ここでP1 = P2としたいので ①,②より
(Pw-O1)*B1 = (Pw-O2)*B2
Pw*B1-O1*B1 = Pw*B2-O2*B2
O2*B2 = Pw*B2-Pw*B1+O1*B1
なので結局
O2 = ( Pw*(B2-B1)+O1*B1)/B2
2011年5月11日水曜日
YouTubeExploereで用いているhtmlから関連動画を抽出方法
抽出方法は簡単にいうと『正規表現を用いています。』という一言ですんでしまいますが、正規表現って何?という方が大多数だと思います。
正規表現とは? 私もきちんと理解しているわけではないですが、windowsのファイル検索でよくワイルドカード(*)を使用して*.jpgで検索すると拡張子が.jpgのファイルのすべてが検索策されますが、これの高級版といったところでしょうか。
詳しくは、サルにもわかる正規表現入門 ( http://www.mnet.ne.jp/~nakama/ )で説明されています。また、Visual Basicでの正規表現によるhtmlタグ抽出方法は、正規表現でメールアドレスを抽出する(http://dobon.net/vb/dotnet/string/regexmatch.html)がものすごく参考になります。
ここで、YouTubeの関連動画のタグは[関連動画タグの例]のようになっていますので、これを[YouTube関連動画タグの抽出 (Visial basic)]で抽出しています。
う~ん説明になっていないな~、リクエストがあれば詳しく説明します。
また、もっといい方法があるれば教えてください。
[関連動画タグの例]
<li class="video-list-item "><a href="/watch?v=z-ymvEjN6qQ&feature=relmfu" class="video-list-item-link "><span class="ux-thumb-wrap contains_addto "><span class="video-thumb ux-thumb-96 "><span class="clip"><img src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt="サムネイル" data-thumb="//i3.ytimg.com/vi/z-ymvEjN6qQ/default.jpg" ></span></span><span class="video-time">2:05</span><span dir="ltr" class="yt-uix-button-group addto-container short video-actions" data-video-ids="z-ymvEjN6qQ" data-feature="thumbnail"><button type="button" class="start addto-button-plus-hide-arrow yt-uix-button yt-uix-button-short yt-uix-tooltip" onclick=";return false;" title="後で見る に追加" data-button-menu-id="shared-addto-menu" data-button-action="" role="button" aria-pressed="false"><img class="yt-uix-button-icon yt-uix-button-icon-addto" src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt=""><span class="yt-uix-button-content"><span class="addto-label">追加先</span></span><img class="yt-uix-button-arrow" src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt=""></button><button type="button" class="end yt-uix-button yt-uix-button-short yt-uix-tooltip yt-uix-button-empty" onclick=";return false;" title="" data-button-menu-id="shared-addto-menu" data-button-action="" role="button" aria-pressed="false"><img class="yt-uix-button-arrow" src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt=""></button></span><span class="video-in-quicklist">キューに追加しました </span></span><span dir="ltr" class="title" title="レンチキュラーレンズを使った歩行誘導手法 #DigInfo"> レンチキュラーレンズを使った歩行誘導手法 #DigInfo</span><span class="stat">ユーザー: diginfonewsjapan</span><span class="stat view-count">再生回数 9,250 回</span></a></li>
[YouTube関連動画タグの抽出 (Visial basic)]
Public Sub Youtubeのソースからページノードを作成改(ByVal ソース As String, ByVal 親ノード番号 As Integer)
Dim r0 As System.Text.RegularExpressions.Regex
Dim m0 As System.Text.RegularExpressions.Match '---------通常ページからの抽出----------
r0 = New System.Text.RegularExpressions.Regex("<li class=""video-list-item "">.*?</li>",_
System.Text.RegularExpressions.RegexOptions.IgnoreCase)
ソース = ソース.Replace(Chr(10), "")
m0 = r0.Match(ソース)
While m0.Success
Youtubeの関連動画抽出(m0.Value)
m0 = m0.NextMatch()
End While
End Sub
Public Sub Youtubeの関連動画抽出(ByVal html As String)
Dim r As System.Text.RegularExpressions.Regex
Dim m As System.Text.RegularExpressions.Match
'---------リンクの抽出----------
r = New System.Text.RegularExpressions.Regex("a href="".*?""", System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Match(html)
ページUrl = "http://www.youtube.com" & Mid(m.Value, 9)
ページUrl = Microsoft.VisualBasic.Left(ノード.ページUrl, Len(ノード.ページUrl) - 1)
'イメージの抽出
r = New System.Text.RegularExpressions.Regex("data-thumb="".*?""", System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Match(html)
イメージUrl = "http:" & Mid(m.Value, 13)
イメージUrl = Microsoft.VisualBasic.Left(ノード.イメージUrl, Len(ノード.イメージUrl) - 1)
'タイトルの抽出
r = New System.Text.RegularExpressions.Regex("class=""title"" title="".*?""", _
System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Match(html)
タイトル = Mid(m.Value, 22)
End Sub
正規表現とは? 私もきちんと理解しているわけではないですが、windowsのファイル検索でよくワイルドカード(*)を使用して*.jpgで検索すると拡張子が.jpgのファイルのすべてが検索策されますが、これの高級版といったところでしょうか。
詳しくは、サルにもわかる正規表現入門 ( http://www.mnet.ne.jp/~nakama/ )で説明されています。また、Visual Basicでの正規表現によるhtmlタグ抽出方法は、正規表現でメールアドレスを抽出する(http://dobon.net/vb/dotnet/string/regexmatch.html)がものすごく参考になります。
ここで、YouTubeの関連動画のタグは[関連動画タグの例]のようになっていますので、これを[YouTube関連動画タグの抽出 (Visial basic)]で抽出しています。
う~ん説明になっていないな~、リクエストがあれば詳しく説明します。
また、もっといい方法があるれば教えてください。
[関連動画タグの例]
<li class="video-list-item "><a href="/watch?v=z-ymvEjN6qQ&feature=relmfu" class="video-list-item-link "><span class="ux-thumb-wrap contains_addto "><span class="video-thumb ux-thumb-96 "><span class="clip"><img src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt="サムネイル" data-thumb="//i3.ytimg.com/vi/z-ymvEjN6qQ/default.jpg" ></span></span><span class="video-time">2:05</span><span dir="ltr" class="yt-uix-button-group addto-container short video-actions" data-video-ids="z-ymvEjN6qQ" data-feature="thumbnail"><button type="button" class="start addto-button-plus-hide-arrow yt-uix-button yt-uix-button-short yt-uix-tooltip" onclick=";return false;" title="後で見る に追加" data-button-menu-id="shared-addto-menu" data-button-action="" role="button" aria-pressed="false"><img class="yt-uix-button-icon yt-uix-button-icon-addto" src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt=""><span class="yt-uix-button-content"><span class="addto-label">追加先</span></span><img class="yt-uix-button-arrow" src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt=""></button><button type="button" class="end yt-uix-button yt-uix-button-short yt-uix-tooltip yt-uix-button-empty" onclick=";return false;" title="" data-button-menu-id="shared-addto-menu" data-button-action="" role="button" aria-pressed="false"><img class="yt-uix-button-arrow" src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt=""></button></span><span class="video-in-quicklist">キューに追加しました </span></span><span dir="ltr" class="title" title="レンチキュラーレンズを使った歩行誘導手法 #DigInfo"> レンチキュラーレンズを使った歩行誘導手法 #DigInfo</span><span class="stat">ユーザー: diginfonewsjapan</span><span class="stat view-count">再生回数 9,250 回</span></a></li>
[YouTube関連動画タグの抽出 (Visial basic)]
Public Sub Youtubeのソースからページノードを作成改(ByVal ソース As String, ByVal 親ノード番号 As Integer)
Dim r0 As System.Text.RegularExpressions.Regex
Dim m0 As System.Text.RegularExpressions.Match '---------通常ページからの抽出----------
r0 = New System.Text.RegularExpressions.Regex("<li class=""video-list-item "">.*?</li>",_
System.Text.RegularExpressions.RegexOptions.IgnoreCase)
ソース = ソース.Replace(Chr(10), "")
m0 = r0.Match(ソース)
While m0.Success
Youtubeの関連動画抽出(m0.Value)
m0 = m0.NextMatch()
End While
End Sub
Public Sub Youtubeの関連動画抽出(ByVal html As String)
Dim r As System.Text.RegularExpressions.Regex
Dim m As System.Text.RegularExpressions.Match
'---------リンクの抽出----------
r = New System.Text.RegularExpressions.Regex("a href="".*?""", System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Match(html)
ページUrl = "http://www.youtube.com" & Mid(m.Value, 9)
ページUrl = Microsoft.VisualBasic.Left(ノード.ページUrl, Len(ノード.ページUrl) - 1)
'イメージの抽出
r = New System.Text.RegularExpressions.Regex("data-thumb="".*?""", System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Match(html)
イメージUrl = "http:" & Mid(m.Value, 13)
イメージUrl = Microsoft.VisualBasic.Left(ノード.イメージUrl, Len(ノード.イメージUrl) - 1)
'タイトルの抽出
r = New System.Text.RegularExpressions.Regex("class=""title"" title="".*?""", _
System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Match(html)
タイトル = Mid(m.Value, 22)
End Sub
登録:
コメント (Atom)



