TIPS
OpenOffice のマクロで OpenOffice Basicを使っていたところ、計算した数値に誤差が入るようになってしまった。 例えば、0.2 が 0.19999 になるような感じ。普通に見ているとセルの書式の有効桁数で問題ないように見えるが、実際にそのセルを選択して中身を…
C言語のrand関数は乱数としての性能が良くないということで、C++の乱数ライブラリを使うことにした。 しかし、これがややこしくて難しい。ということで、自分用にメモ。 乱数のときに良く聞くメルセンヌ・ツイスタは std::mt19937 mt(0x1234); cout << mt() <…
とある変数が Start から End へと変化するときに、Cur の値だったとき、どのくらいの割合 t なのか求める式。 float Start, End, Cur; float t = (Cur - Start) / (End - Start); t は 0 から 1 となる。もちろん、Start と End が同じ値では駄目。 こうい…
OpenOfficeのcalcで指定したセルへカーソルを移動させるマクロ。 oAddrConv = ThisComponent.createInstance("com.sun.star.table.CellAddressConversion") aAddr = CreateUnoStruct("com.sun.star.table.CellAddress") aAddr.Row = 0 '対象の行番号 aAddr.C…
あるフォルダに含まれるファイルを列挙した文字列を作成するバッチファイル @echo off @setlocal enabledelayedexpansion set FILE_LIST= for %%f in (.\test\*.txt) do ( set FILE_LIST=!FILE_LIST!%%f ) echo %FILE_LIST% set FILE_LIST=!FILE_LIST!%%fの…
Visual Studio Code でワークスペースからフォルダを削除するときにちょっと詰まったので、ここに書いておく。 ワークスペースにフォルダを追加する方法は、Visual Studio Codeのエクスプローラー上の右クリックメニューの「ワークスペースにフォルダーを追…
OpenOfficeのCalcでセルの数値の書式をマクロで設定したい場合、書式を指定する番号がわかりにくかった。 そこで、まずセルの右クリックメニューの「セルの書式設定」から指定したい書式にする。 そして、そのセルをマクロでNumberFormatの値を表示する。 Ms…
OpenOfficeのCalcでシートに配置したボタンのセル位置をマクロで取得する方法。 Doc=ThisComponent Sheet = Doc.CurrentController.ActiveSheet DrawPage = Sheet.DrawPage For I = 0 To DrawPage.Count - 1 Shape = DrawPage.GetbyIndex(I) If Shape.getNam…
Gitでコミット対象から外したいファイルやフォルダがあるときは、 .gitignore このファイルに記述すれば良い。 ただ、この場合は、そのリポジトリを見ている人全員に影響がある。 自分しか使っていないエディタのメタファイルなど、他の人には関係のないフィ…
std::mapを使って、キーがあるかどうかの判定に[]演算子を使ってしまうと、新たにキーが作成されてしまう。 std::map<int, int> data; if(data[0]) { // ここで新たにキーが作成される } キーがあるかどうかの判定にはmapはキーが重複しないので、count()が使える。 st</int,>…
ある関数内でちょっとした処理を何回も行うけど、メンバ関数を作るまでもないようなときはラムダ式による関数オブジェクトが便利。 で、ついそのラムダ式の書き方を忘れてしまうので、ここにメモ。 auto func = [](int x) { return x+1; }; キャプチャとかも…
www.ryanjuckett.com ゲーム制作で必要となるいろいろなテクニックが紹介されているサイト。 英語なのでちょっと読むのが大変だが、知っておいたほうが良さそうなものがいくつもある。 なんとか頑張って読んで実装を試してみよう。
パッドのスティックの入力で、一定以上入力したら反応するようなとき、オンオフだけなら、入力値が一定値を超えたか判定するだけでよいが、どのくらいスティックが倒されているかも取得したい場合。 入力が0から1の値を取り、反応する最小値より小さいときは…
メニュー「ウィンドウ」→「新規ウィンドウ」でソースファイルを複製し、 メニュー「ウィンドウ」→「垂直タブ グループの新規作成」で垂直に分割 Visual Studioのウィンドウの分割では水平方向の分割となる。 垂直タブ ブループの作成を行えば垂直方向への分…
AutoHotKeyを使ってGoogle ChromeをEmacsキーライクに操作できるようにした。 ; chrome.exeでの設定 #IfWinActive, ahk_exe chrome.exe ^h::Send,{BS} ^m::Send,{Return} ^p::Send,{Up} ^n::Send,{Down} ^v::Send,{PgDn} !v::Send,{PgUp} !w::Send,^c ^y::Se…
Visual Studioでのインテリセンスの項目の上下移動をCtrl-nとCtrl-pで行いたかったので、AutoHotKeyを使ってキーカスタマイズを行った。 そのスクリプトは次の通り。 #InstallKeybdHook #UseHook SendMode Input ^p::Send,{Up} ^n::Send,{Down}最初はSendMod…
Windowsでファイルのタイムスタンプを現在の値へと変更する方法。 PowerShellで次のように入力。 sp -path ファイル名 -n lastwritetime $(date)フォルダに大量のファイルがあり、その中のいくつかを頻繁に使うようなとき、更新日時順に表示すればすぐにアク…
今まで線形補間は次のように書いていた。 float lerp(float start, float end, float t) { return start + t * (end - start); } しかし、この場合だと、tが1のときに浮動小数点数の計算誤差でendの値とならないことがある。 ということで、次のように書くべ…
以前(id:toburau:20180406)、ここで書いたEasing関数の実装例へのリンク。 https://github.com/jesusgollonet/ofpennereasing/tree/master/PennerEasing ここでの実装されている関数は引数が4つ(t,d,b,c)あり、それぞれ、tが今の時間、dが変化時間、bが開始…
Robert Penner's Easing Functions Easing Function 早見表 UIのカーソルの動きなどに効果的なアニメーションを付けるときに使われるイージング。その大本ともいえるサイト。 さらにC++で実装したものもGitHubにあがっていた。 https://github.com/jesusgoll…
最近プレイしているモンスターハンターワールド。大剣でモンスターを斬る感覚が気持ちいい。その気持ちよさを表現している一つがヒットストップ。剣がモンスターに当たった瞬間などにモーションが一瞬止まったり、スローモーションになったりする表現。この…
for文で列挙型を使うとき、autoを使うと簡単に記述することができる。 たとえば、1週間を定義したenumがあるとき、月水金だけループで実行したい場合は次のように書ける。 enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; for(auto day : { Days::Mon, Days…
いくつかコードを見ていたら、定数の変数名にプリフィックスとしてkが付いているものがあった。 const int kMax = 100; Objective-Cでよく使われているらしい。あまり最近では使われていないのかもしれないが。 コンパイル時に確定する定数にはkを頭に付ける…
enumの項目数を取得するにはC#では次のようにしてできる。 public class Hello{ enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; public static void Main(){ int num = System.Enum.GetNames(typeof(Days)).Length; // enumの項目数を取得 System.Console.…
スコープを持つ列挙型 - cpprefjp C++日本語リファレンス C++11から、列挙型としてenum classが利用できる。 スコープを持つ列挙型となり、さらに整数型への暗黙の型変換が行われない。 enum class Color { Red, Green, Blue }; Color value = Color::Red; …
パッドのボタン入力を60フレーム分取っておいて、コマンド入力の判定に用いるなど、データの履歴を利用したい場合がある。その場合には一定サイズのバッファに新しい入力データを追加し、古いデータを破棄することで表現できる。 STLのdeque(デック)を使って…
C++11での乱数の使い方。 乱数生成器と一様分布器を組み合わせて使う。ちょっとややこしい。 #include <iostream> #include <random> int main(void){ std::random_device rnd; std::mt19937 mt(rnd()); std::uniform_int_distribution<int> rand100(0,99); for(int i=0; i<10; i++)</int></random></iostream>…
2次元のマップに複数のキャラクターをランダムに配置しようと思い、xとyをランダムで求めようとしたが、これだとすでに配置した位置が出てしまうことがある。 そこで、2次元の配列を1次元の配列で表し、配列に先頭からキャラクターを詰めて代入。その配列を…
vectorにランダムで作った数値などを格納して利用したい場合に、同じ数字は利用したくないという場合がある。そのようなときに重複した要素を削除する方法。 std::sortでソートして、std::uniqueで重複要素を削除し、eraseでサイズを調整する。 std::vector<int> </int>…
emacsなどの設定ファイルは.emacsなどドットで始まるファイル名となる。これをWindowsのエクスプローラーで作ろうとすると「ファイル名を入力してください」とエラーになってしまう。 エクスプローラーで作るにはファイルの最後にドットを付ければ良い。つま…