Hello World / plɹoM ollǝH

Programmers Live in Vain

C++ Visual Studioビルド時スタイライズ&スタイルチェック

Visual Studio2017でclang-formatが使えるようになってた
dungeonneko.hatenablog.com

インストールするもの

AStyle

Win版を落としてbinフォルダのAStyle.exeを適当な場所にコピー https://sourceforge.net/projects/astyle/files/

cpplint

pip install cpplint

どちらにもパスを通しておいたほうが楽

VCプロジェクト設定

ビルドイベント -> ビルド前のイベント -> コマンドライン

astyle --style=google --recursive "$(ProjectDir)\*.cpp,*.hpp,*.h"
cpplint --output=vs7 --recursive "$(ProjectDir)"

基本はこんな感じ。astyleで文字数改行オプションが効かなかったりするのでuncrustifyを試してみたいと思う。

時代に逆らう人のためのregファイル

最近のWindows Updateが気にくわない

Windows Registry Editor Version 5.00

// コマンドウインドウをここに開くを追加
[HKEY_CLASSES_ROOT\directory\background\shell\CommandPrompt]
@="@shell32.dll,-8506"
"Extended"=""
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\directory\background\shell\CommandPrompt\command]
@="cmd.exe /s /k pushd \"%V\""
[HKEY_CLASSES_ROOT\directory\shell\CommandPrompt]
@="@shell32.dll,-8506"
"Extended"=""
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\directory\shell\CommandPrompt\command]
@="cmd.exe /s /k pushd \"%V\""

// Windows SearchでBing検索と位置情報とコルタナを無効化
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search]
"BingSearchEnabled"=dword:00000000
"AllowSearchToUseLocation"=dword:00000000
"CortanaConsent"=dword:00000000

// 起動時にPin設定を求められないようにする
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\PassportForWork]
"Enabled"=dword:00000000

msbuild (Visual Studio) で並列ビルドが効かない場合

ビルドルールが違うものは並列に実行されないっぽい。例えば同じファイル名のcppが複数あるプロジェクトで出力オブジェクトファイル名を変更していたりするとこの問題にハマることがある。

非弾性衝突

const auto r = (r0 + r1) * 0.5f; // 反発係数
const auto m0 = 1.0f; // Aの質量
const auto m1 = 1.0f; // Bの質量
const auto u0 = n * dot(vel0, n); // 衝突面(法線N)に対しての垂直方向のAの速度
const auto u1 = n * dot(vel1, n); // 衝突面(法線N)に対しての垂直方向のBの速度
const auto v0 = vel0 - u0; // 水平方向のAの速度
const auto v1 = vel1 - u1; // 水平方向のBの速度
const auto f0 = ((u1 - u0) * (r * m1) + (u0 * m0) + (u1 * m1)) / (m0 + m1); // 衝突後の垂直方向のAの速度
const auto f1 = ((u0 - u1) * (r * m0) + (u0 * m0) + (u1 * m1)) / (m0 + m1); // 衝突後の垂直方向のBの速度
vel0 = v0 + f0; // 水平方向と足して新しい速度ベクトルを作成
vel1 = v1 + f1; // 水平方向と足して新しい速度ベクトルを作成

摩擦を考慮する場合は摩擦係数で水平方向のベクトルを減衰させる