スリープ関数

2月 29th, 2008 tocmoc

windowsでは,windows.hをインクルードする.
SleepのSは大文字で.

void Sleep(int milliseconds)


#include <windows.h>

// 100ミリ秒のスリープ
Sleep(100);

タイマー

11月 16th, 2007 tocmoc

処理時間を計るのにマルチメディアタイマtimeGetTime()を使っていたりしたけど,最近はQueryPerformanceCounterを使ったりするのね

使い方は以下みたいな感じ.

C++:
  1. LARGE_INTEGER nFreq, nStart, nStop;
  2. LARGE_INTEGER elapsed;
  3. int dTime;
  4.  
  5. ::QueryPerformanceCounter(&nStart);
  6. ::QueryPerformanceFrequency(&nFreq);
  7.  
  8. Sleep(100);
  9.  
  10. ::QueryPerformanceCounter(&nStop);
  11.  
  12. elapsed = (nStop.QuadPart - nStart.QuadPart) * 1000 / nFreq.QuadPart;
  13.  
  14. if (elapsed.HighPart != 0) dTime = -1;
  15. else dTime = elapsed.LowPart;
  16.  
  17. printf("%d ミリ秒\n", dTime);
  18.  

MSDNライブラリ
http://msdn2.microsoft.com/en-us/library/ms644905.aspx

 2007/11/28 追記

windows.hをインクルードしておくこと!

直線と点の距離

11月 16th, 2007 tocmoc

2点を通る直線と点の距離

C++:
  1. double distPointToLine(Point la, Point lb, Point p)
  2. {
  3.   return abs(crossProduct(lb-la, p-la)) / abs(lb-la);
  4. }

2点を結ぶ線分と点の距離

C++:
  1. double distPointToLineSegment(Point la, Point lb, Point p)
  2. {
  3.   if ( dotProduct(lb-la, p-la)> EPSILON ) return abs(p-la);
  4.   if ( dotProduct(la-lb, p-lb)> EPSILON ) return abs(p-lb);
  5.   return abs(crossProduct(lb-la, p-la)) / abs(lb-la);
  6. }

(※) 内積dotProduct()と外積crossProduct()は適宜自分で作る

VCでコマンドライン引数を渡したい

11月 15th, 2007 tocmoc

「プロジェクト」→「プロパティ」→構成プロパティ「デバッグ」→「動作」→「コマンド引数」

に書く

ドロネー分割

11月 13th, 2007 tocmoc

ドロネー三角形分割(デローニー分割)の説明&C++版コード

http://www.codeguru.com/cpp/cpp/algorithms/general/article.php/c8901/

エラーの表示

3月 6th, 2007 tocmoc

OpenGLのエラーを得るためには, 

GLenum glGetError(void void)

を使う.

C++:
  1. std::cout <<glGetError() <<std::endl;

とかやると,エラーの番号が返ってくる.例えば,1282とか.この数字を,16進数にすると,0x0502.そこで,OpenGLのヘッダGL.hを見てみると,下のようなエラーコードが書いてあるので,エラーは,GL_INVALID_OPERATIONということが分かる.

C++:
  1. /* ErrorCode */
  2. #define GL_NO_ERROR                       0
  3. #define GL_INVALID_ENUM                   0x0500
  4. #define GL_INVALID_VALUE                  0x0501
  5. #define GL_INVALID_OPERATION              0x0502
  6. #define GL_STACK_OVERFLOW                 0x0503
  7. #define GL_STACK_UNDERFLOW                0x0504
  8. #define GL_OUT_OF_MEMORY                  0x0505

 

 

RGBとビットシフト

3月 5th, 2007 tocmoc

proce55ingを使っていた時に知ったTipsなのだが,ビットシフトを使ってRGBの値を高速に操作する方法があった.

RGBを指定する時に,各色の情報から,int型,32ビット(4バイト)のRGBAのカラー情報を,ビットシフト演算を使って高速に作ることができるというものだ.

ビットが,AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBBのように並んでいた場合,RGBデータは,次のようにして作ることが出来る.

C++:
  1. int R = 20;
  2. int G = 255;
  3. int B = 100;
  4. int color = R <<16 | G <<8 | B;

逆に,カラー情報からRGBの各要素を取り出すためには,次のようにする.

C++:
  1. int R = color>> 16 & 0xff
  2. int G = color>>  8 & 0xff
  3. int B = color    & 0xff

アルファチャンネルを取り出したければ,次のようにする

C++:
  1. int A = color>> 24 & 0xff

プロファイラ for windows VisualStudio

2月 28th, 2007 tocmoc

 フリーのプロファイラ.
登録が必要だけど,非常に役に立つので惜しむとこではないだろう...

.NETアプリケーションのパフォーマンス分析ツール(無償提供製品)
DevPartner Profiler Community Edition

https://www.compuware.co.jp/products/devpartner_fm/dl_devpartner.html

 

二次元配列の動的確保

2月 20th, 2007 tocmoc

4x10の配列の時 
int col = 10;
int raw = 4;
int** array= new int*[4];

for (int i= 0; i < 4; ++i)
    array[i]= new int[10];

//後始末
for (int i= 0; i < 4; ++i)
    delete[] a[i];
delete[] a; 

演算子オーバロードの例

2月 20th, 2007 tocmoc

どんな形式があるかを忘れてそうだし,どれか抜け落ちそうなので.

HogeHoge& operator=( const HogeHoge& x );
HogeHoge operator+( const HogeHoge& x );
HogeHoge operator-( const HogeHoge& x );
HogeHoge operator*( const HogeHoge& x );
HogeHoge operator/( const HogeHoge& x );
HogeHoge& operator+=( const HogeHoge& x );
HogeHoge& operator+=( const double& x );
HogeHoge& operator-=( const HogeHoge& x );
HogeHoge& operator-=( const double& x );
HogeHoge& operator*=( const HogeHoge& x );
HogeHoge& operator*=( const double& x );
HogeHoge& operator/=( const HogeHoge& x );
HogeHoge& operator/=( const double& x );
HogeHoge operator++( );
HogeHoge operator++( const int dummy );
HogeHoge operator--( );
HogeHoge operator--( const int dummy );
bool operator==( const HogeHoge& x );
bool operator!=( const HogeHoge& x );