Tech Notes

>>|
1/8

macOSでシステムのフォントファイルを読み込む方法(CoreText)

libfontlist」というC++向けのライブラリを公開した。これはシステムに登録されたフォント情報をクロスプラットフォームで読み込めるライブラリだ。無かったので作った。

libfontlistはWindows、Linux、macOSの主要3プラットフォームに対応している。それぞれ頑張って個別に対応したに過ぎないのだが、macOS対応が最も情報が少なく苦労した。そういう訳でこの記事ではその技術的な詳細についてまとめる。

CoreText」というAPIを利用したのだが、公式ドキュメント以上の情報がほぼ無かった。

続きを読む

多次元フーリエ変換から逆格子ベクトルの存在を導く

固体物性の分野を学ぶと、結晶構造の議論においてどうしても避けられないのが逆格子ベクトルの話題だ。筆者は化学専攻ではないが、電気電子専攻として半導体物性を勉強しており、最初に当たった壁がこれだった。

学部生は初回の授業で1次元での話を出され「ああ周期性あるからフーリエ変換するんでしょ、分かる分かる」と言っていると、多次元化したとたんに『ブラべ格子』『基本並進ベクトル』『逆格子ベクトル』『ブリルアンゾーン』などと矢継ぎ早に分かったような分からないような単語を繰り出されて身悶えすることになる。

この記事では、多次元空間上の周期性のある関数を多次元フーリエ変換すると自然に逆格子ベクトルが発生することを確認したいと思う。

続きを読む

エルミート形式・二次形式の直感的解釈

線形代数の世界ではエルミート形式二次形式と呼ばれる形の式がある。

$$ \mathbf{x}^\ast \mathbf{A} \mathbf{x} $$

ここで$\mathbf{x}$は通常の縦ベクトル、$\mathbf{A}$は正方行列である。
$\mathbf{x}^\ast$は$\mathbf{x}$の随伴(転置して複素共役をとったもの)を表す。

量子力学におけるブラケット記法で演算子を挟み込むやつなんかも中身はこれである。割と色々な場面で出てくる式なのだが、これの直感的解釈について。

続きを読む

CMakeで開発したソフトを配布する方法(Windows)

CMakeはC/C++製のプログラムをビルドする際にほぼ必須と言っても良いツールだが、ビルドしたものを配布する際の注意点というものはあまり共有されていないように思う。

まさか万人がソフトウェアをソースコードからビルドするという訳にも行くまい。この記事ではCMakeを利用してソフトウェアを開発し、そのバイナリを配布する際の注意点について書きたいと思う。環境はWindowsに絞る。

とりあえずWindows向けのビルドでは殆どの場合においてMSVCかMinGWを用いるものと思うので、その2ツールを対象に解説する。

続きを読む

w除算の結合律について

久々に小ネタ。現代のGPUにはw除算と呼ばれる仕様が存在するが、これは一種の二項演算として見たときに結合律を満たすのか?という疑問について。

結論から言うと満たす。以下ではその証明を書く。

(2025/3/17追記)シェーダの挙動について不正確な点があったのでリライト

続きを読む

2Dアクションゲームの坂道判定について

2Dゲームを作るにあたり、頭を悩ませることになるのが坂道の実装である。坂の形状との交差判定自体は別に何も難しくない。 坂を滑らかに登ったり下りたりできるような挙動の実装が難しいのである。

坂道のない、矩形のブロックのみの衝突判定については別の記事で詳述しているので、まずはそちらを読んで欲しい。 (リンク) この記事で解説した「座標軸別移動衝突法」をベースに説明する。

続きを読む

2Dゲームの衝突判定と座標軸別移動衝突法(仮称)について

近年ではゲームエンジンの普及により、いたく立派な物理エンジンが気軽に使われるようになって久しい。しかし主人公が着地したとか壁にぶつかっただとかの判定は、長い間それぞれのゲーム開発者が自分の手でちょちょいと実装してきたもののはずではなかったか。

そのような自作は今も有力な選択肢であることは間違いない。また、プログラミングの入門としても恰好の題材であるように思われる。

一方で実際のところ、その実装についてネットで調べてみると悩みの声も多く目につく。思うに、実装にどんなバリエーションがあってどこさえ外さなければいいのかとか、そういうところが整理されていないのである。

この記事では最もシンプルで実装が楽な方法を紹介する。誰も名前を付けている人が居ないので、仮に「座標軸別移動衝突法」と呼ぶことにした。

続きを読む
>>|
1/8