0

X、Y、Z 形式のメッシュ モデルがあります。まあ言ってみれば。

Points *P;

最初のステップでは、このメッシュを (-1, -1, -1) から (1, 1, 1) に正規化します。ここで正規化とは、このメッシュを (-1, -1, -1) から (1, 1, 1) のボックスに収めることを意味します。

その後、正規化されたメッシュにいくつかの処理を行い、最終的に元のメッシュと同様の寸法に戻したいと思います。

ステップ-1: P = 元のメッシュ寸法;

ステップ 2: nP = 正規化 (P); // (-1, -1, -1) から (1, 1, 1) へ

step-3: cnP = (nP) で何かをする、頂点の数が増減した。

ステップ-4: 元のメッシュ寸法 = 元に戻す(cnP); // 寸法は元のメッシュと同じでなければなりません

どうやってやるの?

4

2 に答える 2

3

プログラミングで迷子になり、基礎となる数学の単純さを完全に見逃してしまうことがいかに簡単かを知っています。しかし、私を信じてください、それは本当に簡単です。

あなたの問題に取り組むための最も直感的な方法は、おそらくこれです:

  1. 3 つの座標軸 (つまり、xyおよびz) すべての最小値と最大値を決定します。この情報は、立方体の 8 つの角の頂点に含まれています。これらの 6 つの値を 6 つの変数 (例: 、 など) に保存しmin_xますmax_x

  2. p = (x,y,z)メッシュ内のすべての点について、計算します。

    q =  ( 2.0*(x-min_x)/(max_x-min_x) - 1.0
           2.0*(y-min_y)/(max_y-min_y) - 1.0
           2.0*(z-min_z)/(max_z-min_z) - 1.0 )
    

    は現在、q間隔にp変換されています(-1,-1,-1) -- (+1,+1,+1)

  3. この中間グリッドで必要なことは何でも行います。

  4. q = (xx, yy, zz)逆の操作を行って、すべての座標を元のグリッドに戻します。

    p =  ( (xx+1.0)*(max_x-min_x)/2.0 + min_x
           (yy+1.0)*(max_y-min_y)/2.0 + min_y
           (zz+1.0)*(max_z-min_z)/2.0 + min_z )
    
  5. 作成した混乱を片付けて、プログラムの残りの部分を続行します。

これはとても簡単です。おそらく、これらの関数を自分で作成するよりも、どのライブラリにこれらの関数が含まれているかを調べる方がはるかに手間がかかります。

于 2012-09-09T12:08:18.410 に答える
3

簡単です - 形状関数を使用します。2 点の 1D の例を次に示します。

-1 <= u <= +1
x(u) = x1*(1-u)/2.0 + x2*(1+u)/2.0
x(-1) = x1
x(+1) = x2

ヤコビアンを使用して座標系を変換できます。

2D でどのように見えるか見てみましょう。

-1 <= u <= =1
-1 <= v <= =1
x(u, v) = x1*(1-u)*(1-v)/4.0 + x2*(1+u)*(1-v)/4.0 + x3*(1+u)*(1+v)/4.0 + x4*(1-u)*(1+v)/4.0
y(u, v) = y1*(1-u)*(1-v)/4.0 + y2*(1+u)*(1-v)/4.0 + y3*(1+u)*(1+v)/4.0 + y4*(1-u)*(1+v)/4.0
于 2012-09-09T02:17:18.053 に答える