1

ポイントデータの配列があり、ポイントの値は x 座標と y 座標として表されます。

これらのポイントは、500 ポイントから 2000 ポイント以上の範囲にある可能性があります。

このデータは、単純なものから非常に複雑なものまでさまざまな動きのパスを表し、その中にカスプが含まれることもあります。

このデータを 1 つのスプライン、スプラインのコレクション、または非常に圧縮率の高い他の形式として表すことはできますか?

それらをベジエのコレクションとして表現しようとしましたが、せいぜい 40% の節約になります。たとえば、500 points の配列がある場合、500 x と 500 y の値が得られるため、1000 個のデータが得られます。これから約100の二次ベジエ。各ベジエは、controlx、controly、anchorx、anchery として表されます。これにより、100 x 4 = 400 個のデータが得られます。したがって、入力 = 1000 個、出力 = 400 個です。

これをさらに強化したいのですが、何か提案はありますか?

4

4 に答える 4

2

その性質上、スプラインは近似値です。使用するスプラインの数を減らして、より高い圧縮率を達成できます。

ある種のエンコーディング スキームを使用して可逆圧縮を実現することもできます。前の回答の範囲の例 (x の場合は 1000、y の場合は 400) を使用して、入力中にこれを作成しています。

  1. 各ポイントには 19 ビット (x に 10、y に 9) しか必要ありません。3 バイトを使用して座標を表すことができます。
  2. +/- 63 までの変位を表すには、2 バイトを使用します。
  3. 1 バイトを使用して、x の場合は最大 +/- 7、y の場合は +/- 3 の短い変位を表します。

シーケンスを適切にデコードするには、エンコードの種類を識別するためのプレフィックスが必要です。フル ポイントに 110、ディスプレイスメントに 10、ショート ディスプレイスメントに 0 を使用するとします。

ビット レイアウトは次のようになります。

Coordinates:        110xxxxxxxxxxxyyyyyyyyyy
Dislacement:        10xxxxxxxyyyyyyy
Short Displacement: 0xxxxyyy

シーケンスが完全にランダムでない限り、この方式で簡単に高い圧縮率を実現できます。

簡単な例を使用して、それがどのように機能するかを見てみましょう。

3点:A(500、400)、B(550、380)、C(545、381)

各座標に 2 バイトを使用していたとしましょう。これを圧縮せずにエンコードするには、16 バイトかかります。

圧縮スキームを使用してシーケンスをエンコードするには、

A は最初の点なので、完全な座標が使用されます。3 バイト。A からの B の変位は (50, -20) であり、変位としてエンコードできます。2 バイト。C の B からの変位は (-5, 1) で、短い変位 1 バイトの範囲に収まります。

したがって、16 バイトのうち 10 バイトを節約できます。実際の圧縮率は、データのパターンに完全に依存します。移動パスを形成するポイントで最も効果的です。ポイントがランダムな場合、25% の節約しか達成できません。

于 2009-08-11T15:44:03.087 に答える
1

まず、実際に必要なだけの小数点をデータに保持します。これらを削除すると精度が低下しますが、計算上の損失になります。これを行うには、数値を文字列に変換し、ドットの位置を特定して、それらの多くの文字を最後から切り取ってみてください。それは数学、IMOよりも速く処理できるでしょう。最後に、数値に戻すことができます。

 150.234636746  ->  "150.234636746"  ->  "150.23"  ->  150.23


次に、最後の数値(「相対値」)を基準にしてデータを保存してみてください。基本的にこれから最後の数を引きます。その後、後で「解凍」するために、アキュムレータ変数を保持してそれらを合計することができます。

 A    A    A             A    R   R
 150, 200, 250     ->    150, 50, 50
于 2009-08-12T15:14:15.400 に答える
1

たとえば、ポイント座標に 32 ビット整数を使用し、
x: 0..1000、y:0..400 のように範囲制限がある場合、(x, y) を 1 つの 32 ビット変数にパックできます。

そうすれば、さらに 50% の圧縮を達成できます。

于 2009-08-11T15:20:39.577 に答える