2つの経路が同じ長さである場合は、nはを言って、その後、彼らは本当に2N次元空間にポイントです。最初の場所は最初の2つのディメンションを決定し、2番目の場所は次の2つのディメンションを決定します。たとえば、あなたの例で3点を取るだけであれば、パスは1つの6次元点(1,5,2,7,4,4)として表現できます。これを別の3点経路と比較したい場合は、ユークリッド距離(2点間の距離ごとの二乗和の平方根)またはマンハッタン距離(次元ごとの差の合計)。
たとえば、すべての3回にわたって(0,0)にとどまるボーリング経路は、6次元の点(0,0,0,0,0,0)になります。そして、この点とあなたの例のパスの間のユークリッド距離はsqrt((1-0)^2 + (5-0)^2 + (2-0)^2 + (7-0)^2 + (4-0)^2 + (4-0)^2) = sqrt(111) = 10.54
です。マンハッタンの距離はabs(1-0) + abs(5-0) + abs(2-0) + abs(7-0) + abs(4-0) + abs(4-0) = 23
です。このようなメトリクスの違いは珍しいことではありません。マンハッタンの距離は少なくともユークリッド距離ほど大きいからです。
もちろん、このアプローチの1つの問題は、すべてのパスが同じ長さになるわけではないことです。ただし、長い方のパスを短い方のパスと同じ長さに簡単に切り捨てたり、2つのパスのうちの短い方を同じ場所にとどめること、または両方のパスが同じ長さになるまで測定終了後に同じ方向に移動することができます。いずれのアプローチでもいくつかの不正確さが導入されますが、あなたが何をしていても、短い道のりでデータが欠落していて、何とかそれを補う必要があるという事実に対処しなければなりません。
EDIT:
path1
とpath2
ポイントを含む両方のList<Tuple<int, int>>
オブジェクトであると仮定すると、私たちのように短いリストを一致させるために長いリストを遮断することができますすることができます、そして、
// Enumerable.Zip stops when it finishes one of the sequences
List<Tuple<int, int, int, int>> matchingPoints = Enumerable.Zip(path1, path2,
(tupl1, tupl2) =>
Tuple.Create(tupl1.Item1, tupl1.Item2, tupl2.Item1, tupl2.Item2));
マンハッタンの距離を見つけるには、次のコードを使用します。
int manhattanDistance = matchingPoints
.Sum(tupl => Math.Abs(tupl.Item1 - tupl.Item3)
+ Math.Abs(tupl.Item2 - tupl.Item4));
int euclideanDistanceSquared = matchingPoints
.Sum(tupl => Math.Pow(tupl.Item1 - tupl.Item3, 2)
+ Math.Pow(tupl.Item2 - tupl.Item4, 2));
double euclideanDistance = Math.Sqrt(euclideanDistanceSquared);
あなたがここでより多くの情報を提供する必要があります:あなたは、実際に紙を読んでやる気にさせるここで少し抜粋。どのような論理が「一致」を決定していますか?ジェスチャ認識の場合と、数字「6」を描画するなどのパスの例を使用すると、パスの形状に基づいて一致する必要があります(つまり、大きな6は小さい「6」に一致する必要があります - パスのトポロジ(小文字のギリシャのシグマ 'が' 6 'にマッチする' b 'など)、パスのスピード(つまり、素早く描画された6はゆっくり描画されたものと一致しません)あなたは何を達成しようとしていますか?どのような精度?どのような重さ?このような問題には、より多くのパラメータが必要です。 –