LoginSignup
6

More than 5 years have passed since last update.

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

Posted at

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

記事

やったこと

レイマーチングの距離関数の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では実装できない

ソース

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6