サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
都知事選
white-wheels.hatenadiary.org
3次元版を作っていて気づいたこと。 ベクトルクラスを作るときに、x,y,zというメンバを使ってコードを書くか、配列v[i]を利用してコードを書くか迷うところですが、3次元ならx,y,zを使って書いた方が分かりやすいかもしれません。↓ Vector3D.h class Vector3D{ public: //メンバ変数 float x; float y; float z; //コンストラクタ Vector3D(); Vector3D(float x,float y,float z); //代入演算子 Vector3D& Vector3D::operator=(const Vector3D& v); //単項演算子 Vector3D& operator+=(const Vector3D& v); Vector3D& operator-=(const Vector3D& v); Vector3D
Cocoaアプリケーションプロジェクトをプロジェクト名"CocoaOpenGL"で作成しておきます。 ライブラリの追加 TARGET>Build Phases>Link Binary With Libraries>"+">OpenGL.frameworkをプロジェクトに追加します。 OpenGLViewの作成 MainMenu.xib>Object LibraryからOpenGL Viewを選択、ウインドウにドラッグドロップ>Windowと同じサイズにする 自作OpenGLViewクラスの追加 NSOpenGLViewクラスを継承したMyOpenGLViewクラスをプロジェクトに追加します。NSOpenGLViewに用意されている次のインターフェースを定義しておきます。initWithFrameが初期化、drawRectが描画処理部分、reshapeはリサイズ時の処理です。 MyOpenG
画像を読み込んで表示させる簡単な例です。(file open error == IOErrorの処理を入れないといけない) 利用するクラスはwx.Image。初期化で読み込む画像ファイルパスを指定します。 Imageインスタンスそのままでは表示できなくて、bitmapに変換してから初めて表示できます。 StaticBitmapで要素に画像を張り付けることができるみたいです。 import wx class myFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title) image = wx.Image('test.jpg') self.bitmap = image.ConvertToBitmap() wx.StaticBitmap(self, -1, sel
Opaqueポインタ インターフェース上で未定義のデータ型をopaque data type(不透明型)と呼び、そのような型を指すポインタをOpaqueポインタと呼びます。例えばヘッダで定義されている以下のようなポインタのことを指します。 MyInterface.h #ifndef IF_H #define IF_H typedef struct tag_mydata* mydata_t; #endif Opaqueポインタを使った例をいくつか取り上げたいと思います。 Opaqueポインタを使ってデータ型を隠蔽する 独自フォーマットの構造体がインターフェース上で定義されているとします。もしフォーマットを修正するとヘッダをインクルードしている部分は再度コンパイルしなおさなければなりません。特にフォーマットが非常に基本的な型であればあるほど影響範囲が広くなると思います。 MyFormat.h
メッセージング Objective-Cではコンパイル時にメソッドのアドレスが確定している訳ではなく、メソッドのアドレスを各オブジェクト内のテーブルに記録しておいて、実行時にテーブル内を逐次検索して実行するべきアドレスを選択しています。メソッドを識別する最も単純な方法はメソッド実装とメソッド名(文字列)を対応されればよいですが、実際にはメソッド名と1対1に対応する識別子がコンパイル時にテーブルに記録されています。その実行するべきメソッド名に対応する識別子をセレクタと呼びます。セレクタはメソッド名にのみ依存しており、それが属しているオブジェクトについては識別しません。 オブジェクト セレクタ メソッド実装 セレクタ メソッド実装 セレクタ メソッド実装 セレクタはobjc.hにてSEL型として定義されていて、@selectorを使って実装コード上でも扱うことができます。メソッドの関数ポインタを
Androidでローカルにファイルを保存する方法についてです。 ファイル書き込みを許可する ファイルアクセスを許可するため、AndroidManifest.xmlに以下のタグを追加します。 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> ローカルディレクトリを確認する パースペクティブをDDMSにします。右側の画面でディレクトリ内をチェックできます。 ディレクトリを作成する ローカルにファイルを保存したい場合、アクセスできる場所が限られていまして、 /data/data//files にしかファイル入出力はできないようです。 例えば、パッケージ名がcom.java.yourdomainなら /data/data/com.java.yourdomain/f
Objective-CとC++の両方を混在させてみます。※(注)環境はiOS SDK4.3, Xcode4.1, 動作確認はシミュレータのみ Static Library用プロジェクトを作成する File>New>NewProject>iOS>Framework & Libraries>CocoaTouch>StaticLib.xcodeprojを/に作成 →//StaticLib/StaticLib.xcodeprojというプロジェクトが作成される //StaticLib/StaticLib/test.h,test.cppを作成してプロジェクトStaticLib.xcodeprojに追加します test.h #ifndef _test_h #define _test_h class Sample{ public: void test(); }; #endif test.cpp #incl
Cocoaアプリを作成するときの操作方法についてのメモです。Interface Builderなど。 Cocoaアプリケーションのプロジェクトを作成する File>New>New Project>Cocoa Application>Next>Product Nameプロジェクト名を入力"HelloCocoa", Company Identifier:適切に入力>プロジェクト作成パスを選択>Create プロジェクト構成は以下の通り ・HelloCocoa ・・HelloCocoaAppDelegate.h ・・HelloCocoaAppDelegate.m→ここに初期化コードを記述 ・・MainMenu.xib:UI構成→Interface Builderで編集 ・・Supporting Files ・・・HelloCocoa-Info.plist→アプリケーションに関する各種情報 ・・・
2011/8/5 MacOSX 10.7 Lion にeclipse 3.7(Indigo)をインストールする手順です。 同時にプラグインをいくつか入れてみましたのでメモしておきました。ところどころ端折っています。 eclipseのインストール 公式サイトからJava開発環境をダウンロード → http://www.eclipse.org/downloads/ Eclipse IDE for Java Developers(Mac OS X 32bit)を選択(mirror selectionで日本のサーバーを選択) ダウンロードが完了したら、適当なディレクトリに解凍 (例えば /Applications/eclipse、日本語表示でアプリケーションフォルダ直下など) eclipseの日本語化 Pleiadesをダウンロード→ http://mergedoc.sourceforge.jp/
AudioTrackクラスを使って正弦波を鳴らしてみます(Android SDK 2.2で作成)。手順は以下の通りです。 オーディオバッファを作成する short buffer[] = null; buffer = new short[ SAMPLES * CHANNEL ]; buffer = generateBuffer(); // 信号を生成する関数 正弦波を生成する式です。 a:振幅、t:時刻、f:周波数、fsサンプル周波数、i:現在のサンプル、N:全サンプル数→周期ごとに元の位相に戻す方がよい signal = amplification * Math.sin(2.0 * Math.PI * frequency * t); インスタンスを生成する 各引数は以下の通りです。 audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
いろいろ触ってみた順にメモしています。 前回と若干重複していますが、C++コマンドラインアプリを作成する手順です。 ワークスペース作成 File>New>New Workspaceで適当な場所にワークスペースを作成します。 ワークスペースには複数のプロジェクトを追加することができます。 プロジェクト作成 File>New>New Projectでプロジェクト名"sample"とパス指定して追加(TypeはC++を選択しておく) するとデフォルトでは以下のような構成になっています。 //sample.xcodeproj //sample/main.cpp プロジェクトファイル(.xcodeproj)が存在するパスをとします。 ソースファイルの追加 File>New>New File, 追加したいファイルとパスを選択して"Add" 例えばデフォルトのパスにヘッダ"Sample.h"を追加してみ
CocoaアプリケーションのプロジェクトにC/C++で作成しているStaticLibraryプロジェクトやCocoaFrameworkを組み込む方法についてです。開発環境はXcode 4です。 まず実行ファイルの出力先を相対パスに設定しておきます。 Xcode>Preferences>Locations>Derived Data>Relative StaticLibrary用プロジェクトの作成 File>New>New Project>MacOSX>Framework&Library>C/C++Library>Next>ProductNameに名称入力"StaticLibForCocoa", Type:Static>プロジェクトのパスを指定、""を選択>"Create" //StaticLibForCocoa内にStaticLibForCocoa.xcodeprojが作成される。 プロジェ
※実行ファイルの生成パスを、Xcode>Preferences>LocationsでRelativeに指定しているという前提で話を進めます。 Static Library(.a)を作る まず静的ライブラリ作成用プロジェクトを用意します。(StaticLib.xcodeproj) File>New>New Project>MacOSX>Framework & Library>Next>Product Name>名称記入, Type>Static, >プロジェクトのパスを指定する>Create (StaticLib.xcodeprojが存在するパスをと表記することにします。) サンプルとして以下のファイルを追加します。 StaticLibIF.h class StaticLibIF{ public: static void execute(); }; StaticLibIF.cpp #incl
Xcode4を使ってMVCパターンに則った簡単なCocoaアプリーケーションのサンプルを作成します。 MVC(Model-View-Controller)パターン MVCとは以下の3つの要素からなるアーキテクチャのことです。 Model アプリケーションが利用するデータとその処理を行う部分です。データは隠蔽されていて操作自体は内部で完結しており、一般に再利用が可能。 View データを可視化する部分。CocoaではNSViewクラスの派生クラスです。 Controller ユーザーの操作を受け付けてModelとViewの制御を行う部分です。ModelとViewの仲介役ですので通常は再利用できないことが多いです。CocoaではこのクラスにOutletとActionを追加します。 MVCの相互関係 一般的な処理の流れは以下のようになります。 View ユーザー入力→ Controller 更新
STLのcomplexクラスについて C++で複素数を扱うにはSTLで用意されているcomplexクラスを利用します。complexクラスはテンプレートで定義されているので、型を指定して扱うことができます。例えば、double型の複素数を扱いたい場合は、complexと記述します。 さらに、複素関数も下のように様々なものが用意されています。 #include <complex> #include <iostream> using namespace std; int main(){ const complex<double> i( 0.0, 1.0 ); complex<double> z1( -1.0, 1.0 ); complex<double> z2( 2.0, -2.0 ); complex<double> w = polar( 1.0, 3.141592 / 2.0 );//極座
メモリーリーク Xcode4でメモリーリークをチェックするには、実行中の各種状態を可視化できるinstrumentsというツールのメモリリーク画面で確認することができます。(instrumentを起動してみるにはProduct>Profileを選択してください) Xcodeの左上Runボタンを長押しすると"Run","Test","Profile","Analyze"のうちどのモードで実行するか選択できますので、"Profile"を選択します。(実行ボタンがプロファイルのアイコンに変わります。) 次に、Product>Edit Scheme>Profile ObjectiveC>Info>Build Configuration:ここでは"Debug"にしておきます Executable:実行ファイル(デフォルトでは自動選択されている) Instrument:実行時に起動したいinstrum
2011/8/13の情報です。環境はMac OS X 10.7(Lion) & eclipse indigo日本語化済み android-sdk_r12-mac_x86とandroid-ndk-r6を導入してプロジェクトを作成するまでの手順になります。 自分用のメモですので手順が明らかなところは少し省略しているかもしれません、ご注意ください。 Android SDKの導入 Android SDKのダウンロード 本家サイト http://developer.android.com/sdk/index.html からandroid-sdk_r12-mac_x86.zip をダウンロードして、適当な場所に解凍する。(例えば /Applications/android/android-sdk-mac_x86) ADTをインストールする ヘルプ→新規ソフトウェアのインストール→追加で以下のサイトを登
メニューを選択したときのイベント処理を実装してみましょう・ イベント処理 import wx class MyFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(200,100)) filemenu= wx.Menu() menuExit = filemenu.Append(wx.ID_EXIT, "&Exit","exit") #メニュー・イベント・イベントハンドラをリンクさせる self.Bind(wx.EVT_MENU, self.OnExit, menuExit) menuBar = wx.MenuBar() menuBar.Append(filemenu,"&File") self.SetMenuBar(menuBar) sel
CGにおける座標系 CGで使われる座標系には次のようなものがあります。 モデリング座標系 各頂点の座標系 ワールド座標系 物体が配置されている座標系 視点座標系 カメラからみた座標系 デバイス座標系 長さ2×2で中心を原点とした正方形型の座標系 ウインドウ座標系 ウインドウサイズと同じ縮尺の座標系 モデリングによって頂点座標を生成してからウインドウにグラフィクスを書くまでに次のような変換を行っています。 モデリング変換 モデリング座標系→ワールド座標系 視野変換 ワールド座標系→視点座標系 投影変換 視点座標系→正規化されたデバイスの座標系 ビューポート変換 正規化デバイス座標系→ウインドウ座標系 OpenGLでは4×4の行列を利用してこれら座標変換を行います。 行列の作成 合成変換を計算するための元となる行列を以下のコマンドで作成します。 glLoadIdentity 単位行列を作成しま
準備 データ処理用にnumpy、プロット用にpyplot、3次元なのでmpl_toolkits.mplot3dをインポートします。 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np 描画するデータの作成 3次元で描画するにはメッシュ(2次元の網目)を作成するために2次元の配列を用意する必要があります。 まずarangeメソッドでx,yそれぞれを1次元領域で分割します。 x = np.arange(-3, 3, 0.25) y = np.arange(-3, 3, 0.25) 2次元メッシュを作成するにはmeshgridメソッドを利用します。この関数の戻り値はX,Yに対応する行列で、Xは行にxの配列を、Yは列にyの配列を入れたものになっています。 X, Y =
Pythonの科学計算ライブラリ。Windows & Python2.6でSciPyを使ってみる。 ライブラリはhttp://new.scipy.org/download.htmlからダウンロードできます。 SciPyはNumPyのversion 0.4.x以上をベースに作成されているので、念のためNumPy→SciPyの順にインストールしました。(ちなみにNumPyの入手はこちら→NumPyを使ってみる - white wheelsのメモ) SourceForge site for SciPyからscipy-0.7.1-win32-superpack-python2.6.exeをダウンロード 特に設定なしにインストールすることができます。 簡単な関数でテスト。 from scipy import * p = poly1d([1,2,3]) #1d polynomial print p 2
Python Imaging LibraryのImageクラスのデータをNumpyのarrayとして扱うための方法について。 Numpyの関数を使って直接pixel値を書き換えることが目標です。 まずは両方のライブラリをインポートしておきます。 import numpy import Image PILからNumpyのarrayへの変換 numpyで用意されているasarray関数を使うと、PILのImageオブジェクトを配列に変換することができます。 imgArray = numpy.asarray(pilImg) さらに配列の値を書き変えられるようにするためには、writeableフラグをTrueにする必要があるようです。 imgArray.flags.writeable = True NumpyのarrayからPILへの変換 PILのfromarrayメソッドによって、配列の各値を1
Windows, Python2.6, 2010/3/8の話題。 NumPyはPythonの数値計算ライブラリです。 http://new.scipy.org/download.htmlからダウンロードできます。 SourceForge site for NumPyからnumpy-1.3.0-win32-superpack-python2.6.exeをダウンロード 特に設定なしにインストールできます。 以下使い方のメモです。 配列オブジェクト 配列をベクトルとして使います。 "*"は内積ではなく、要素ごとの積をとったベクトルなので注意 from numpy import * u = array( [ 1, 2, 3 ] ) print u v = arange( 3 ) #[ 0, 1, 2 ] print v print u + v print u * v print "---" pri
参考サイト(英語)→http://processing.org/learning/tutorials/eclipse/ Eclipseを導入してからのお話です。 新しいプロジェクトを作る File→New→ProjectでJava Projectを作成。 ライブラリの追加 processing/lib/core.jarがprocessingのコアライブラリのようです。これをEclipseに追加します。 File→Import→General→File System→Browsでフォルダ選択できるのでprocessing\libフォルダを選択します。 例えばProgram Filesにprocessingを導入したなら下のフォルダを選択します。 C:\Program Files\processing\lib 画面にライブラリ一覧が表示されるので、core.jarを選択します。プロジェクトツリ
wxPythonで用意されているImageやBitmapをPython Imaging Libraryで使うにはどうすればいいのか?という話。 wxPythonはさまざまなフォーマットの画像を読み込めるので便利です。wx.ImageとPILを相互変換できるなら、 読み込んだwxImageをPython Imaging LibraryのImageに変換して、画像処理に使うことができます。 相互変換するための関数の例と、実際に作成したサンプルコードを紹介します。 wx.ImageからPILへの変換 newメソッドでpilの画像を入力画像と同サイズで作ります。wxImageのGetDataメソッドで取り出したRawデータを、pilのfromstringメソッドで取り込めばOKです。 #convert wx.Image to PIL Image def wxImageToPil(wximage):
matplotlibはpythonでグラフを描くためのライブラリです。numpyなどと組み合わせると簡易matlabのような環境を整えることができます。 インストール 公式サイト→http://matplotlib.sourceforge.net/index.html matplotlib 0.99.1 is available for downloadのところからダウンロードできます。Windows用の簡易インストーラmatplotlib-0.99.1.win32-py2.6.exeをダウンロードします。インストールはこれで簡単にできます。 グラフを描く plotコマンドでプロットする点のxy座標を定めます。下の例では、x=0,1,2,y=2,3,4のグラフを、x軸0-5,y軸0-8の範囲で描画します。grid()メソッドでグリッドを表示することができます。 import matplot
matplotlibで描いたグラフをwxPythonのパネル上に表示できると、matplotlibの機能を直接利用できるアプリケーションを作成することができます。次のコードは、3次元のグラフをパネル上にプロットさせて表示させた例です。 import matplotlib matplotlib.interactive( True ) matplotlib.use( 'WXAgg' ) import wx class myWxPlot(wx.Panel): def __init__( self, parent): from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg from matplotlib.figure import Figure self.parent = parent wx.Panel.__init__( s
Python Imaging Libraryの関数を使いながらのメモです。 テスト用のモジュールTestPIL.pyを作成し、同じディレクトリに全て同じサイズの適当なRGB画像"test.bmp","test2.bmp","mask.bmp"を用意して実行してみました。以下使えそうな関数をひたすらピックアップ&リストアップ。関数の書き方は、変数名:型、関数名(引数名:引数型):返却値型という表記を使うことにします。 モジュールのインポート from PIL import Image Imageクラスのメンバ変数 format:string 画像ファイルのフォーマット mode:string 階調。"1":2値画像,"L":グレースケール,"RGB","CMYK"など size:turple (width, height) 画像サイズ pallete:palette 画像モードが"P"のとき
GUIを作るために必要な要素(Frame,button,text,textcontrolなど)はwxWindowクラスの派生クラスとして提供されています。GUIを設計するためにこれらの要素を一つずつフォームに配置していきます。 例えばwxFrameがwxMuneBarやwxPaneを含んでいて、さらにwxPaneがwxStaticTextなどを含んでいる場合にはこんな階層構造をとることになります。 wxFrame -> wxMuneBar -> wxPanel -> wxStaticText wxTextCtrl -> wxStaticText wxTextCtrl wxPanel -> wxStaticText wxTextCtrl -> wxStaticText wxTextCtrl 要素をそのまま配置すると位置やサイズが常に固定になってしまいますが、Sizerクラスを利用すると自動的
次のページ
このページを最初にブックマークしてみませんか?
『white wheelsのメモ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く