iPhoneのアラートビューとアクションシート
IBでレイアウトして作らない系のやつ
アラートビュー
// アラートビューを作成 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"タイトル" message:@"実行しますか?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; // アラートビューを表示 [alert show];
/** * アラートのボタンが押された時に呼ばれるデリゲート */ - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 1) { // ラベルにOKと表示 myLabel.text = @"OK"; } else { // ラベルにCancelと表示 myLabel.text = @"Cancel"; } }
アクションシート
// アクションシートの作成 UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"タイトル" delegate:self cancelButtonTitle:@"キャンセル" destructiveButtonTitle:@"赤いやつ" otherButtonTitles:@"普通のやつ1", @"普通のやつ2", nil]; // アクションシートの表示 [actionSheet showInView:self.view];
/** * アクションシートのボタンが押された時に呼ばれるデリゲート */ - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { switch (buttonIndex) { case 0: myLabel.text = @"赤いやつ"; break; case 1: myLabel.text = @"普通のやつ1"; break; case 2: myLabel.text = @"普通のやつ2"; break; default: break; } }
イングロリアス・バスターズを見てみた
いつもは観賞メーターに感想を書くのですが、長すぎて書ききれなかったのでここに書いておきます。
イングロリアス・バスターズ
まず最初にこの素晴らしい映画を撮ったクエンティン・タランティーノ監督に謝罪の意を表明したい。この映画を見るまで最近のタランティーノは才能が枯渇したよねー。と申しておりました。殴られた記憶もろくにないくせに申し訳ございませんでした。
さて、イングロリアス・バスターズは「ナチスに家族を殺されたユダヤ系の少女」と「ドイツ占領下のパリに潜入し、ナチスの軍人を始末する部隊"バスターズ"」の2つの軸を持つ群像劇である。
この映画からテーマを読み取ることは難しい。(あるいは無いのかもしれない。)
なぜならばイングロリアス・バスターズはナチス・ドイツを題材にしているが、いわゆる「戦争映画」の下敷きを敷いていない一風変わった構成になっているからだ。
主人公の一人であるショシャナ(メラニー・ロラン)に焦点を当てれば復讐劇であるが、もう一人の主人公であるアルド・レイン中尉(ブラピ)に焦点を当てるとまた違ったジャンルとなる。そしてこの映画は悲劇でもなければ喜劇でもない。
だかといってイングロリアス・バスターズは決して中途半端な作品ではない。まだ見ていない人のためにネタバレは差し控えるが、ストーリーが練り込まれており、映画としての「見せ方」も素晴らしい。そして登場人物の粋な言葉のキャッチボールは涎モノである。いや、お見事。
私はタランティーノ作品の中ではパルプ・フィクションが最も好きだ。今まで見た映画の中でBEST10を決めるとしたら、その中にパルプ・フィクションは必ず入れる。
このイングロリアス・バスターズはパルプ・フィクションに勝るとも劣らない傑作である。
以前使用していたC言語のシンプルな拡張数学ライブラリ
以前使用していたC/C++用の拡張数学ライブラリ(といってもかなりシンプルですが)を公開します。
コードはANSI-Cで書いています。幾何学系が多めですが、行列演算等は(他のライブラリを使用していたため)サポートしていません。
ベクトルは配列で表現しています。
ソース
https://github.com/kojo-sugita/mathex.h
サポートしている機能
関数 | 概要 |
---|---|
Summation | 総和を計算する |
SumOfSquares | 平方和を計算する |
SumOfProduct | 積和を計算する |
Average | 平均値を計算する |
Variance | 分散を計算する |
UnbiasedVariance | 不偏分散を計算する |
Covariance | 共分散を計算する |
StdDev | 標準偏差を計算する |
Max | 最大値を求める |
MaxInt | 最大値を求める(int型配列) |
Min | 最小値を求める |
MinInt | 最小値を求める(int型配列) |
MaxMin | 最大値と最小値を求める |
Factorial | 階乗を計算する |
Permutation | 順列組み合わせの総数を計算する |
Combination | 組み合わせの総数を計算する |
Distance | 2点間の距離を求める |
DivideInternally2D | 2点p1,p2からなる線分をm:nに内分する点を求める (2次元) |
DivideExternally2D | 2点p1,p2からなる線分をm:nに外分する点を求める (2次元) |
Triangle_CenterOfGravity | 3点p1,p2,p3からなる三角形の重心を求める (2次元) |
ToVecto | 2点を結ぶベクトルを求める |
VectorSum | ベクトルの和を求める |
VectorDifference | ベクトルの差を求める |
Norm | ベクトルの長さ(ノルム)を計算する |
InnerProduct | ベクトルの内積を計算する |
IncludedAngle | 2つのベクトルのなす角を計算する |
UnitVector | 単位ベクトルを求める |
NormalVector3D | 3次元の法線ベクトルを求める |
CrossProduct3D | 3次元ベクトルの外積を計算する |
VectorSimilarity | 2つのベクトルの類似度を計算する |
NormalizedVectorDistance | 正規化距離を計算する |
IsDepthOnLine3D | 3次元空間上の点p1と点p2を結ぶ直線上に点pが存在するかを判定する |
CalculatePlane3D | 3次元平面を作成する |
CalculatePlane3D_Using3Depths | 3点から3次元平面を作成する |
ToLineCanonicalForm | 直線の方程式を標準形から一般形に変形する |
ToPlaneCanonicalForm | 平面の方程式を標準形から一般形に変形する |
ToPlaneGenericForm | 平面の方程式を一般形から標準形に変形する |
DistanceLineToDepth | 点と直線との距離を返す |
DistancePlaneToDepth | 点と平面との距離を返す |
IsCorrectPlane | 2つのベクトルからなる平面がよい平面かを判定する |
Arg | 第1象限から第4象限までの偏角を求める |
ZenithAngle | 天頂角を求める |
Sigmoid | シグモイド関数を計算する |
pi | 円周率を求める |
to_deg | 弧度法表記を度数法表記に変換する |
to_rad | 度数法表記を弧度法表記に変換する |
logn | 任意の整数を底とする対数を計算する |
cbrt_newton | ニュートン法で立方根を近似する |
frac | 除算を計算する |
バグがあったらごめんなさい。使用する際は自己責任でお願いします。
もっと複雑なことをしたい場合はGSLがおすすめ。
HTML5+JavaScriptで画像処理 ハーフトーニング
HTML5とJavaScriptでハーフトーニングをしてみました.
実行ページ
http://jstap.web.fc2.com/test/html5/halftoning/halftoning.html
※ 濃度パターン法は低速なので注意してください.
ソース
http://github.com/kojo-sugita/Halftoning
ハーフトーニングとは多値階調を持つ画像を2値(あるいは少ない階調)で表現する方法のことである.
マンガのスクリーントーンやモノクロプリンタで出力された画像などがまさにソレで点の密疎で濃淡を表現する.
今回実装した手法は以下の3通り.いずれも基本的な手法である.
濃度パターン法 (density pattern method)
画像の1画素に対して複数画素からなる2値表現のパターンを割り当てて濃淡を表現する手法.
例えば1画素を4×4のパターンを割り当てると擬似的に17階調の表現ができる(下記図参照).
割り当てる濃度パターンを4×4,現画像をN×M画素とすると出力画像は4N×4M画素になる.
実行結果
※ 前述のとおり画像サイズが大きくなるため一部抜粋
ディザ法 (tither method)
ディザパターンと呼ばれるN×Nの行列を用意しておく.
ディザパターンの値と現画像の各画素の輝度値を比較し,その大小関係でその画素を白にするか黒にするかを決定する.
1. 画像をN×N画素(ディザパターンのサイズ)のブロックに分割する
2. ブロック内の各画素がディザパターン内の対応画素値×16 + 8以上なら白,未満なら黒を割り当てる
誤差拡散法 (error diffusion method)
ある画素の輝度値と,その画素を2値化した値との誤差を周辺画素に分散させ,誤差をキャンセルするように未処理画素の輝度値を修正しながら2値化していく手法.
fを対象画素の輝度値,gを出力画素の輝度値とする.
1. 誤差eを以下のように決定する.
f > 128 のとき・・・g = 255
f <= 128 のとき・・・g = 0
e = f - g
2. 誤差eを周辺画素に分散させる.
f'(x + 1, y) = f(x + 1, y) + (5/16)e
f'(x - 1, y + 1) = (x - 1, y + 1) + (3/16)e
f'(x, y + 1) = f(x, y + 1) + (5/16)e
f'(x + 1, y + 1) = f(x + 1, y + 1) + (3/16)e
誤差拡散法が一番それっぽい結果になっていることが分かる.