サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
qiita.com/Ushio
今回はハッシュアルゴリズムについて少し触れてみたいと思います。 既存のハッシュアルゴリズムはどういうものがあるでしょうか? SHA-1, MD5等が浮かんだ方も多いと思います。 「じゃあそれでいいじゃん」 ・・・ちょっと待ってください。 SHA-1, MD5というものは、暗号化のためのハッシュアルゴリズムです。 もし用途が単純なファイル比較等であれば、ここまで大げさなハッシュは冗長で高負荷低速であると言えます。 適切なアルゴリズムは状況によって適切に選びたいところです。 そこで今回は単純なファイル比較等に使用できる、簡単&軽量なハッシュアルゴリズムの FNV-1 というアルゴリズムを紹介します。 詳細はこちらへどうぞ http://wowdev.jp/?p=873 ソースはこちらです。 #include <stdio.h> #include <stdint.h> /** * FNV Con
懸垂線とはあまり伸びないロープやチェーンなどの端を、2点固定してぶら下げてできる曲線です。 これの何が面白いかというと、この曲線が大変シンプルな数式で表せる所にあります。 結論から述べてしまうと以下の式がこの曲線を表現しているというのです。 実際に写真に重ねてみると(desmosは便利ですね!)、 おお、たしかに現実の物理現象と大変よくマッチしています。 実際のところわりとこのトピックは語り尽くされた内容ではありますが、 この記事では、 一体どこからこの関数がやってきたのか? コンピュータグラフィックスで懸垂線を扱うには? というのを個人的に興味がある数学と一緒に学んでみたいと思います。 プログラミングにはC++を使うことにします。 この関数はどこから来るの? 実のところ、この懸垂線の関数の導出には調べてみるとたくさんアプローチがあります。今回はそのうち自分の好きなやり方を一つ紹介します。
ここでいうLUTはルックアップテーブルの略です。 まずはそのLUTで画像処理をするとはどういう事かというのを書こうかと思ったのですが、 UE4の説明が分かりやすいのでそれを見てみるのが早いでしょう。 https://docs.unrealengine.com/latest/JPN/Engine/Rendering/PostProcessEffects/ColorGrading/index.html 要するに、色をテーブルで変換するだけです。 テーブルというのは、以下のような画像です。 これを見るとそれぞれの四角で、 xがR成分 yがG成分 そして右のセルに行くほどB成分が0~1へとグラデーションされています。 これによってRGBそれぞれの成分がどう配置されるかが定義されています。 ※もちろん、この画像は1:1のマッピングなので、フィルター的には何もしないものです。 しかし、ひとたびこの画像
レイトレ合宿アドベントカレンダー5週目の記事です。 https://sites.google.com/site/raytracingcamp5/#TOC--10 はじめに An Efficient and Practical Near and Far Field Fur Reflectance Model [1] より いやー最高にもふもふですね、 というわけで、自分のレンダラでももふもふレンダリングをトライしてみたくなりました。昨今のけものフレンズブームもあり、もふもふレンダリングへの需要が高まっています。どうやらコンピュータグラフィックスにおいてもたくさんの先行研究があるようです。 髪(hair)と毛皮(fur)のレンダリング手法色々 まず毛のレンダリング手法にはどんなものがあるのか?というのをざっと見てみることにします。 Kajiya-Kayモデル [2], [3] 異方性鏡面反射成
imguiとは imguiは、OpenGLやDirectXなどの描画環境の中で動くGUIフレームワークです(vulkanも?)。 "Immediate Mode GUI"と呼ばれるパラダイムにより、大変短く直感的なコードでGUIを構築できます。 どういうGUIコンポーネントが使えるかは、リポジトリのスクショを見ていただいたほうが良いかと思います。 デバッグや調整、テスト用のGUIを構築することが目的のフレームワークです。 環境 今回この記事ではwindows10, vs2015, Cinder(0.9.0)上でサンプルを作成しました。 Cinder用には専用のimgui拡張があるため、そちらを使用します。 https://libcinder.org/ https://github.com/simongeilfus/Cinder-ImGui 根本的な考え方や、imguiのAPIは同じですが、
極小Lispインタプリタを作ろう! この記事では、非常に機能を絞ったLispインタプリタの作成を通じて、パーサーコンビネータや、それにまつわるテクニック、考え方などを紹介していきます。 今回作成するLispに登場するのは、四則演算関数と、数値型だけの非常にミニマムなものです。 例えば以下のようなソースになります。 これをインタプリタなどに食わせると、(3 + 18) * 2 という計算を行い、42が返ってきます。 四則演算しかできないとても極小のものですが、作成の過程では様々なテクニックを交えつつ紹介してみたいと思います。 また、この記事では、"無限リストの作り方"で作成したListを多用しますので、随時参照して頂けると読みやすいかと思います。 そもそもLispってなんだよ? LispはList Processingに由来するプログラミング言語です。とても古い言語ですが、コンピュータの歴史
ここで、$ v_a $ $ v_b $はそれぞれ物質の中での波の速度を示し、$ \frac { v_a }{ v_b } $ を屈折率(refraction index)とも呼びます 少し変形してやれば、 \frac { \sin { \theta _{ a } } }{ \sin { \theta _{ b } } } =\frac { v_{ a } }{ v_{ b } } \\ \sin { \theta _{ a } } =\frac { v_{ a } }{ v_{ b } } \sin { \theta _{ b } } \\ \frac { v_{ b } }{ v_{ a } } \sin { \theta _{ a } } =\sin { \theta _{ b } } \\ \theta _{ b }=\arcsin { \frac { v_{ b } }{ v_{
そう、見た目にはあまりわかりませんでしたが、実際には至る所でマイナスが含まれています。 計算機で計算する分にはまだいいですが、当時1931年にはまだ手計算が主流で、計算尺など使っていたとのことで、マイナスの計算もなるべくしたくなかったというのも一つ大きなイケてないポイントでした。 次にイケてないポイントとしては、せっかく色が人間基準かつ定量的に扱えそうなのに、パート(1)で紹介した人間基準の明るさの単位、輝度などの測光量との対応がシンプルにいっていない点です。なんとか統一理論が欲しいと考えられました。 基底変換 これをなんとかするテクニックとして、線形代数の基底変換を使います。 というのも、先に述べてきたとおり、色は空間上の点であり、RGB色空間の座標は、 \begin{pmatrix} R \\ G \\ B \end{pmatrix}=R\begin{pmatrix} 1 \\ 0 \
はじめに レイトレーシングにおいて、結局のところ放射輝度とは何なのか?今までひとつずっともやもやが取れませんでした。とても重要なものさしなので、しっかり理解したいところです。なのでゼロからひとつひとつ落ち着いて紐解いて、クリアにしていきたいと思います。 光をどう捉えればいいのだろう? 現実世界はとても複雑な物理現象に満ちています。光と一口にいったって、波なのか粒子なのかといった量子力学的な話まで踏み込むととても大変です。きっと今わかっていること以外にもまだまだ隠された謎があって、これからどんどん解明されていくのでしょう。でも私達が普段目で観察できるような物体は、光の波長に比べてとてもスケールの大きな話になります。なのでレイトレーシングにおいては基本的には光のマクロ的特性だけで考えます。これはスケールの大きな世界では古典力学で日常のかなりの部分を説明できるのととても良く似ています。なので光は
もはや何周遅れかわかりませんが、 元ネタは深津さんの以下のツイートです。 アニメーションの監修で、「 Random();の代わりに、(Random()+Random()+Rrandom()+Random()+Random())/5.0f; を使うと、動きにコクが出る」と言ったら、ピュアオーディオ扱いされるのですが・・・これは根拠のあるアルゴです。 — 深津 貴之 (@fladdict) 2016年11月3日 実際のところ、任意の分布をもつ確率変数の無限和というのは正規分布に近づくというのはわかっています。 これはKOMIYAさんの記事でも解説されております。 「一様乱数の平均値を正規乱数として代用する」という話をゆるふわ統計的に検証する ただこの記事にもありますが、コクの話は、 「一様乱数でもなく正規乱数でもなく、でもちょっと正規分布に従っているっぽい乱数」 がよりそれっぽい動きやビジュア
小さな親切 余計なお世話 osxには、普通に使う上では便利でも、場合によっては余計なお世話な機能が結構沢山備わっています。なのでそれらを停止させて、マシンに余計なことをさせたくない場合に重宝するコマンド群をこの記事では紹介していきます。 環境はosx 10.11 あたりを想定しています。 設定を閉じる まずコマンドで設定をあれこれ変更する前には設定アプリを落としたほうが良いです。
cerealって? cerealとは、C++11用のjson, xml, binaryシリアライズライブラリです。似たようなものにboost::serializationや、googleのprotocol buffersなどがあります(ほかにもまだありそうですが)。 ではなぜcerealなのか? cerealには他の二つにはない利点として、 ヘッダーオンリー ライブラリが小規模 というのがあります。 この性質は移植作業を大変楽にしてくれます。 というのも自分、boost::serializationをしばらく使っていたのですが、iOSでも使おうとしてビルドで問題がおきて、もっと良いシリアライズライブラリがないものかと探した経緯があります。 シリアライズしたいケースとして、異なるプラットフォーム同士で通信するプログラムを作りたいケースがありますので、この性質は大いに作業を楽にしてくれます。
皆さんこんにちは、レイ、飛ばしてますでしょうか? これはレイトレ Advent Calender 2016 11日目の記事です。 自分はいったん飛ばすのを休憩して、今更高校のときすっ飛ばした数Ⅲを、 坂田アキラの 数IIIの微分積分が面白いほどわかる本 にて勉強したりしてました。 とても気持ちのいい問題が多く、サクサク進むことができました。おすすめです。 ゴール さて、本題ですが、確率的な考え方はレイトレにおいてとても大事です。Veach氏の論文においても、最初の方から登場します。PBRT v3では748ページが該当箇所でしょうか。しかしこの本、圧倒的ボリュームですね。。。 今回は確率の数学を積分の問題へ適用するところを、直観的理解を目指してまとめていきたいと思います。 なので数式はなるべく省略しないよう、心がけたいと思います。 確率密度関数(probability density fun
qiita.com/Ushio@github
\frac { 1 }{ { c }^{ 2 } } \frac { { \partial }^{ 2 }u(x,y,t) }{ { \partial }{ t }^{ 2 } } =\frac { { \partial }^{ 2 }u(x,y,t) }{ { \partial }{ x }^{ 2 } } +\frac { { \partial }^{ 2 }u(x,y,t) }{ { \partial }y^{ 2 } } 今回は、二次元波動方程式を差分法にて数値積分を試みます。 二次元程度でしたら、一般的なコンピュータならリアルタイムにその時間発展を観察することができるので、とても楽しいです。 導出についてはこちら 波動方程式の導出(弦の運動) - Qiita 式変形 コンピュータに数値計算させるためには、ある程度時間(t)と空間(x)を細かく区切って進めるような式を準備してあげる
レイトレ合宿 参加レポート 運営をやって頂いているみなさん、参加者のみなさん、どうもお疲れ様でした。そしてありがとうございました。今回初参加させていただきましたが、大変有意義な時間を過ごせて感激です。熱が冷めないうちに、参加レポートとしてまとめておこうと思います。 環境 AWS, c4.8xlargeでのレンダリングになります。Microsoft Windows Server 2012 R2 年々短くなっています。来年は1秒かもしれませんね(白目 AWSのアカウントがあれば気軽にテストできたのがよかったです。 Open Problems in My Little Raytracer 今回が初の試みとのことです。事前のレイトレアンケートをベースにいろいろ語る枠です。個人的にはこの時間が最も大きな収穫だったなぁと思っています。 資料はこちら http://www.slideshare.net/
一緒に無限の旅へとお出かけしませんか? コンピューターの資源は有限です。 なので本当の意味での無限はとても扱えた話ではありません。 ですが、ちょっとした工夫で無限を(一部)扱えるようするテクニックがあります。 そのテクニックを使ってちょっとだけ無限の旅にお出かけしてみましょう。 初めての人はきっと今までにない視点が得られることでしょう。 データ構造 最初にもっとも大切なデータ構造の定義を考えます。 やや天下り的ではありますが、今回は以下の定義を使います。 Consは、データと、その次のリストを保持します。 Nilは終端ですね。 ここでポイントなのは、その次のリストが関数になっている点です。 ここが関数であることで、リストの次の要素は本当に必要になった時だけ決めれば良くなるのです。 さらに、この構造の良い所は、Optionalが極力出てこない事と、 きちんと空リストも表現できる点です。 ※本
iPhoneの解像度が増えた影響で、アイコンなどにベクターデータを使うメリットが増してきています。 ただ、iOS標準フレームワークではこの辺りはちょっとばかしかゆいところに手が届かないところです。 今回は小さな対応策の1つとして、 SVGのpath d要素をCGPathに変換する、 というのをやろうと思います。 この方法には、 ・svg全部パースするより遥かに簡単 ・読み込んだCGPathRefは描画前に編集したり、描画方法を自由にカスタマイズできる といったメリットがあります。 また、SVGKit( https://github.com/SVGKit/SVGKit )なんかもありますが、 ちょっとわりと大きなフレームワークなので、 一部だけSVG使いたいだけの時にはちょっとオーバースペックな気がします。 というわけでソースです。 コピペしてすぐ使い始めることができます。 https://
ローレベルグラフィックスAPI、Metal、せっかく出たからには使ってみないわけにはいきません。 残念なことに、あんまり使ってみた等の情報が少ないです。 せっかくなので、とっかかりとして流体シミュレーションにチャレンジします。 非常に素直なAPIで、OpenGL ES等と比べるとクリーンで明瞭なので、 とても扱いやすい印象でした。 詳細はこちら http://wowdev.jp/?p=1380 勉強会でのスライドも公開しています http://www.slideshare.net/ushiostarfish/metal-fuild-simulation 手っ取り早くソースが欲しい方はこちら https://github.com/Ushio/MetalFluidDemo デモの動画はこちらです。 https://flic.kr/p/oBpSPo 注意点としては、A7チップを持つデバイスでしか
Objective-C特有の型だってもちろん使えます。 ターゲット2 コレクション型 Swiftでは基本となるコンテナクラスは今のところDictionaryとArrayのみという極めて貧弱極まりない環境です。 しかしその点Objective-C++なら、Objective-Cのコレクションクラスはもちろん、 状況に応じてC++のよく熟成された標準ライブラリに簡単に統合することが可能ですね。 例えば以下のように #import <Foundation/Foundation.h> #include <map> int main(int argc, const char * argv[]) { @autoreleasepool { struct CompareNSString { bool operator()(NSString * lhs, NSString *rhs)const { retu
よく、以下のようなコードでオフスクリーンコンテキストを作成し、 描画の後画像を得るサンプルを見ます。 コードが単純なためか、非常に広く使われていると思います。 UIGraphicsBeginImageContextWithOptions(CGSizeMake(1024, 1024), NO, 1.0); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextFillEllipseInRect(context, CGRectMake(0, 0, 1024, 1024)); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); ですが、これは本来やらなくていい処理をしていると思いませんか? という
正直、初見の時の可読性が落ちるので微妙かもしれませんが、 発想の1つとしてメモしてみます。 blocksをその場ですぐ使う事で、NSMutableArrayのスコープを最小限にして、その後をNSArrayとして固定してしまいます。 NSMutableArrayがだらだらと下に残ってしまうのを防ぐ事が出来ます。 Mutable系のオブジェクトでは全て可能です。 NSArray *array = ^{ NSMutableArray *r = [NSMutableArray array]; for(int i = 0 ; i < 100 ; ++i) { [r addObject:@(i)]; } return r; }(); for(NSNumber *n in array) { NSLog(@"%@", n); } Register as a new user and use Qiita m
Objective-cの便利なクラスたちを使って、簡単にゆかりんの年齢を計算します。 wikipediaによるとゆかりんの誕生日は、 1976年2月27日なので、以下のように計算します。 NSCalendar *callendar = [NSCalendar currentCalendar]; NSDate *now = [NSDate date]; NSDateComponents *birthdayComponents = [[NSDateComponents alloc] init]; birthdayComponents.year = 1976; birthdayComponents.month = 2; birthdayComponents.day = 27; NSDate *birthday = [callendar dateFromComponents:birthdayCom
blocksには数多くの落とし穴があります。 しかしそれを乗り越えることができれば、非常にスマートにかける状況はそれなりに増えると思います。 ※注意:ここではARC環境での話です。一部MRCと状況が異なる場合があるかもしれません。 <blocksはObjective-cのオブジェクトをstrong参照でキャプチャする> ここでいうキャプチャとは、ポインタをコピーしている、ということです。 なんで?と思われる方も多いと思います。しかし理由ははっきりしていています。 例えば、dispatch_afterで処理を遅延することを考えてみましょう。 NSArray *sameArray = ...; int64_t delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSecon
: CGContextSaveGState: invalid context 0x0 : CGContextSetCompositeOperation: invalid context 0x0 : CGContextFillRects: invalid context 0x0 : CGContextRestoreGState: invalid context 0x0 : CGContextSetBlendMode: invalid context 0x0 : CGContextDrawImage: invalid context 0x0 : CGBitmapContextCreateImage: invalid context 0x0 : CGContextSaveGState: invalid context 0x0 : CGContextSetCompositeOperation: i
動画はこちら http://www.flickr.com/photos/80124738@N05/9564307258/ カウンターアプリで、 タップで瓶の中に金平糖が入ることで数えます。 上に名前をつけたり、 ロングタップで削除したり、 瓶を増やしたりできます。 ダウンロードはこちらからお願いします。無料です。 https://itunes.apple.com/jp/app/crystalsuger/id689723657?ls=1&mt=8 完全なソースコードはこちらに公開しています。 https://github.com/Ushio/CrystalSuger このソースから得られる技術は以下の通りです。 ・OpenGL ES 2.0 shader 技術全般 ・マルチビューGLレンダリング ・基本的なポストプロセッシングの実装 ・ビュー空間 スペキュラ・リムライティングの効率的実装 ・
次のページ
このページを最初にブックマークしてみませんか?
『@Ushioのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く