レイマーチングの距離関数のlength関数を数学的な距離関数に置き換えてみた話

  • 5
    いいね
  • 0
    コメント

「ロマンティック数学ナイトボーイズ」の発表した記事を書きます。

記事

やったこと

レイマーチングの距離関数のlength関数を数学的な距離関数に置き換えてみた

glslでの、lenghtの定義

GLSLレイマーチング研究_距離関数について勉強してみた01(距離関数と球)

lenght(p) = sqrt(p.x*p.x+p.y*p.y+p.z*p.z) - r

このlenght関数を以下の距離関数で置き換え見る。

ハミング距離

float lengthHamming(vec3 p){
    // カメラの位置を変化させる
    p = vec3(p.x*sin(time),p.y*sin(time),p.z*sin(time));
    if(p==vec3(0.0, 0.0, 0.0)){
        return 2.0;
    }else{
        return 3.0;
    }
}

マンハッタン距離

float lengthManhattan(vec3 p){
        return abs(p.x)+abs(p.y)+abs(p.z);
}

チェビチェフ距離

float lengthChebyshev(vec3 p){
        return max(max(abs(p.x), abs(p.y)), abs(p.z));
}

L^2ノルム(実装できず)

// L^2ノルムのプログラミングでの実装
float normLebegueTwo(vec3 p){
    float split      = 10.0;
    float threeSplit = split * split * split;
    float sumLeght   = 0.0;
    vec3 splitXYZ    = vec3(p.x/split, p.y/split, p.z/split);
    for(int i=0; i < 1000; i++){
        sumLeght += length(p) * splitXYZ.x * splitXYZ.y * splitXYZ.z;
    }
    return sumLeght - 1.0;
}

で、ハートの変化をみる

ユークリッド距離

motion01.gif

ハミング距離

motion02.gif

マンハッタン距離

motion03.gif

チェビチェフ距離

motion04.gif

ハートの形は、距離ごとに変化します…

  • ハミング距離恋愛は、なんかヌメってしている
  • マンハッタン距離恋愛は、なんか怪しい
  • チェビシェフ距離恋愛は、初心者マーク?
  • $L^2$ノルム恋愛は、僕のPCでは実装できない

ソース