Codelogy

« 2007年07月 | メイン | 2007年09月 »

2007年08月 アーカイブ

2007年08月07日

SIGGRAPH2007 1 日目

今日は、SIGGRAPH 2007 の Mesh Parametrization というコースに参加しました。

SIGGRAPH のコースでは、様々な分野の基礎的な内容を聞くことができます。 このコースでは、3 次元のデータを 2 次元のデータに変換する方法 (Parameterization) に焦点を当てています。 このような変換は、現在の CG の分野でもテクスチャマップ、バンプマップ、ノーマルマップなどとして使われています。

続きを読む "SIGGRAPH2007 1 日目" »

2007年08月08日

SIGGRAPH2007 2 日目

今日から待ちに待った、論文の発表が始まりました。 以下、その中の特に気になった 3 つほどを紹介します。 それと、Emerging Technology についての簡単な感想を載せます。

続きを読む "SIGGRAPH2007 2 日目" »

Array クラスを作る (要素参照演算子編)

C/C++ では、配列の要素を参照するのに [] 演算子を用います。
Array クラスのオブジェクトに対しても、これと同様の方法で要素を参照できるように演算子をオーバーロードしましょう。

Code 4-1: 要素参照演算子の実装
//要素参照
template <typename T> T& Array<T>::operator [] (int nIndex){
    assert(0 <= nIndex && nIndex < m_nSize);
    return m_lpa[nIndex];
}

//要素参照 (const)
template <typename T> const T& Array<T>::operator [] (int nIndex) const {
    assert(0 <= nIndex && nIndex < m_nSize);
    return m_lpa[nIndex];
}

非常に短く単純なコードですが、いくつか注意すべきポイントがあります。

続きを読む "Array クラスを作る (要素参照演算子編)" »

変数名のプレフィクス

これまでの記事で、コード中の変数名が気になった方も多いのではないでしょうか。
例えば、次のような変数名

m_nSize

「何かの大きさを表す変数であることは "Size" から分かるが、その前の m_n はいったい何ぞ?」

こうしたプレフィクス (接頭辞) にはちゃんと意味があり、私自身はこれを手掛かりにコードを呼んでいます。
今回は、その役割についてご紹介します。

続きを読む "変数名のプレフィクス" »

2007年08月09日

SIGGRAPH2007 3 日目

今日も主に論文の発表を聞いていました。

続きを読む "SIGGRAPH2007 3 日目" »

2007年08月10日

SIGGRAPH2007 4 日目

SIGGRAPH も残すところ 2 日でした。

続きを読む "SIGGRAPH2007 4 日目" »

2007年08月12日

SIGGRAPH2007 最終日

今日は SIGGRAPH2007 の最終日でした。 今日見てきた、Fluid 系の論文について書きます。

続きを読む "SIGGRAPH2007 最終日" »

2007年08月29日

三項演算子

C/C++ をはじめとして、多くの言語では「三項演算子」がサポートされています。

1. 三項演算子の使用例
//偶奇性の表示
void PrintParity(int n){
    puts((n % 2 == 0) ? "even" : "odd");
}

処理の内容が同じでパラメータだけが異なるような処理の場合、三項演算子を上手く使うとコードが簡潔になります。

2. if ステートメントによる分岐
//偶奇性の表示
void PrintParity(int n){
    if (n % 2 == 0)
        puts("even");
    else
        puts("odd");
}

しかし、「条件 (第 1項)」や「値 (第 2, 3項)」が長い場合は、コードが横にだらだらと伸びてしまい美しくありません。
そんなときは、値の項を1段下げて記述すると見やすくなります。
2つの「値」が同列に並ぶとともに、「条件」より1段下がることで従属関係が明確になるという利点があります。

3. 段下げした三項選択
//中央値
double median(const Array<int>& an){
    return (an.size % 2)
        ? values[an.size/2]
        : 0.5*(values[an.size/2 - 1] + values[an.size/2]);
}

ちなみに、Ruby などのステートメントの終端が明示されない言語では、この方法は使えません。 (「条件」の評価値を返して終了してしまうため。)
この問題は、津のように ? および : 演算子を行末に移動してやることで解決できます。

4. 段下げした三項選択 (Ruby の場合)
# 中央値
def median(const values)
    return (values.size % 2 != 0) ?
        an[an.size/2] :
        (an[an.size/2 - 1] + an[an.size/2])/2
end

しかしながら、この記法はいまひとつエレガントさに欠けます。
ステートメントの終端をセミコロン (;) で明示する僅かな手間を惜しみさえしなければ、こうした曖昧さはないのに……。
と、三項演算子を綴るたび、Ruby の文法に不満を覚える C++ 使いでありましたとさ。

担当: 成田 (句読点を抜かすんじゃあないッ!!)

2007年08月31日

【Ruby】Office2007ファイルの書き換え

Microsoft Office2007よりファイル形式がxmlファイルの圧縮されたものになりました。
これによってファイル内容を簡単に書きかえれるようになります。
例としてexcelファイルをRubyを使って編集することにより、ショッピングサイトの価格データなどを自動入力したり、データベースなどの内容を簡単にまとめたりすることが可能となります。

しかしながら、ドキュメントが英語だったり、量が多いなどの問題があるかもしれません。(私だけかもですが・・・)
それらを解消するための要点をまとめておきます。

続きを読む "【Ruby】Office2007ファイルの書き換え" »

0から始める計算幾何学 第01回 外積

外積とは2つのベクトルに対して一意に定められる量であり、
二次元ベクトル A=(Ax,Ay), b=(Bx,By) の外積 C は

C = A × B = Ax * By - Ay * Bx

として定義されます。

外積には様々な利用価値がありますが、ここではその一例として、
「点が有向直線の右にあるか左にあるかを判定する」というものをご紹介しましょう。

続きを読む "0から始める計算幾何学 第01回 外積" »

About 2007年08月

2007年08月にブログ "Codelogy" に投稿されたすべてのエントリーです。 過去のものから新しいものへ順番に並んでいます。

Prev: 2007年07月
Next: 2007年09月

メインページアーカイブページもご覧ください。