2

[明確にするために質問を書き直しました]

私はソート機能を考え出そうとしています。ソートされているのはポイントのリストです。

ソート機能は 3 点を取り込みます。並べ替えるポイントのリストからの 1 つと、比較に使用される他の 2 つ。目標は、並べ替えられるポイントが他の 2 つのポイントから相対的なユークリッド距離を決定することです。ポイントが 2 つのポイントの間にある場合、関数の最小値を指定する必要があります。関数は、両方のポイント間のユークリッド距離を利用する必要があります。

これまでのところ、数式は距離の 2 乗の一部であるか、指定された 2 点の間に点を作成し、その点までのユークリッド距離を使用する必要があるようです。以下に、これまでに考えられる 2 つの関数を含めました。

p is the point to be sorted
p1,p2 are the given points

def f(p,p1,p2): #Midpoint distance
   midPoint = midpoint(p1,p2)
   return distance(p,midPoint)

def f(p,p1,p2): #Sum of squares
   return distance(p,p1) ** 2 + distance(p,p2) ** 2

def distance(pointA,pointB): #Psudocode
   dx = pointA.x - pointB.x
   dy = pointA.y - pointB.y
   return sqrt(dx ** 2 + dy ** 2)

以下に例を示します。

ここに画像の説明を入力

ここで考慮されている 2 つのポイントは、それらの間に線が引かれたポイントです。丸で囲まれた点は、並べ替えアルゴリズムで最も低い 3 つの点である必要があります。左に近いポイントは、2 つのポイントのうちの 1 つに近いが、もう 1 つのポイントから離れているため、ペナルティが科されます。

4

2 に答える 2

2

最小二乗法が役立つかもしれませんか?したがって、距離の2乗を合計します。このように、左側のノードは、ラインの右側のノードから離れすぎているためにペナルティが課せられます。

もう1つのオプションは、2つのベースノードによって作成された線の中間点までの距離を取ることです。これはまた、左側のノードよりも3つのノードを優先します。

于 2012-11-20T17:36:17.243 に答える
2

平均をうまく使用することは、それを行うための直感的な方法のようです(ちなみに、これは合計を使用するのと同じです)。もう1つできることは、「加重」平均を使用することです。たとえば、が短い距離の場合、たとえば(または一般的には)aを使用して、より高い優先度を与えることができます。(2*a + b) / 3(m*a + b*n) / (m + n)m > n

于 2012-11-20T17:29:35.757 に答える