2

一般的な交差点プレーヤーと同様に、ランダムに方向付けられた3D地震線を前後に移動するコードがあります。Petrel 2011では完全に機能しましたが、2012に更新すると壊れたようです。問題は、新しいファセットを設定しようとすると、線の法線方向が小数点以下数桁変化するように見えることです。以下はいくつかのサンプルコードです...

SeismicLine3D line = ...;
double distance = ...;
Direction3 direction = ...;
Direction3 normal = ...;

Facet facet = seismicLine3D.Intersection.Facets.ElementAt(0);
Vector3 offset = Vector3.Multiply(distance, direction.NormalizedVector);
Point3 point = Point3.Add(facet.Plane.DefiningPoint, offset);
Plane3 plane = new Plane3(point, normal);
Facet newFacet = new Facet(plane, new Plane3[] {});
IEnumerable<Facet> facets = new Facet[] {newFacet};

using (ITransaction transaction = DataManager.NewTransaction())
{
    transaction.Lock(seismicLine3D);

    try { seismicLine3D.Intersection.Facets = facets; }
    finally { transaction.Commit(); }
}

// BAD!!!
// seismicLine3D.Intersection.Facets.ElementAt(0).Plane.Normal != normal;

これを引き起こすためにPetrel2011と2012の間で何が変わったのか誰かが知っていますか?また、誰かが可能な回避策を知っていますか?

編集:
通常の向きの変化は、トグルウィンドウで表示すると非常に目立ちます。線が移動すると、視覚化にわずかな「グリッチ」が表示されます。

4

1 に答える 1

1

この問題は、double->floatおよびfloat->double変換中の丸めが原因です。このアルゴリズムは、反復ごとに入力地震線をわずかに変更し、この丸めの問題のために、計算された法線が毎回わずかに異なるようにします。正規化された法線を最初にfloatに変換すると、アルゴリズムの精度が少し向上します。ただし、これまでの最善の回避策は、最初の法線を保存し、各反復でそれを使用することです。

乾杯、プリヤ

于 2013-02-19T21:19:25.210 に答える