私は、オブジェクトの集合の中で最も評価の高いオブジェクトを返す関数を持っています。 小さな違反を許す関数のargmax
ここで、特定のポイントに最も近い最も評価の高いオブジェクトを取得します。基本的に私は、このようなO_1がO_2より与えられた点に近い場合でも、いくつかの小さなため
現在、私はプログラム内で約5つのif文で達成していますが、私は方法があるかどうか疑問に思っていましたおそらく数学的な公式でこれをより洗練されたよりエレガントな方法で表現していますか?このような問題があった場合、どのようにコード化しましたか?
ここに私が持っているコードのスニペットがありますが、私はifステートメントに実行できるリファクタリングがいくつかあることを知っています。これを解決するよりエレガントな方法はありますか?
public VisualDevice MostSuitableDevice(GameObject u, GameObject t, List<VisualDevice> D)
{
float maxSuitability = 0;
VisualDevice mostSuitableDevice = null;
float epsMaxSuitability = 0;
VisualDevice epsMSD = null;
foreach (VisualDevice d in D)
{
float suitability = Rating(d, u, t);
bool closerDevice = mostSuitableDevice != null ? Vector3.Distance(d.GetLightPosition(), t.transform.position) < Vector3.Distance(mostSuitableDevice.GetLightPosition(), t.transform.position) : false;
if (suitability > maxSuitability && closerDevice)
{
maxSuitability = suitability;
mostSuitableDevice = d;
}
else if (suitability > maxSuitability + epsilon)
{
maxSuitability = suitability;
mostSuitableDevice = d;
}
else if (suitability + epsilon > maxSuitability && closerDevice)
{
closerDevice = epsMSD != null ? Vector3.Distance(d.GetLightPosition(), t.transform.position) < Vector3.Distance(epsMSD.GetLightPosition(), t.transform.position) : false;
if (suitability > epsMaxSuitability && closerDevice)
{
epsMaxSuitability = suitability;
epsMSD = d;
}
else if (suitability > epsMaxSuitability + epsilon)
{
epsMaxSuitability = suitability;
epsMSD = d;
}
else if (suitability + epsilon > epsMaxSuitability && closerDevice)
{
epsMaxSuitability = suitability;
epsMSD = d;
}
}
}
bool epsCloser = epsMSD != null && mostSuitableDevice!=null ? Vector3.Distance(epsMSD.GetLightPosition(), t.transform.position) < Vector3.Distance(mostSuitableDevice.GetLightPosition(), t.transform.position) : false;
if (epsMaxSuitability + epsilon > maxSuitability && epsCloser)
{
maxSuitability = epsMaxSuitability;
mostSuitableDevice= epsMSD;
}
return mostSuitableDevice;
}
"近さ"の尺度は何ですか? – MBo
あなたの質問は、前のコメントが示すようにはっきりしていません。質問を明確にし、問題について重要な作業を行ったことを示すために、「約5つのif文」を表示してください。 「特定の点に最も近い」ことについてのより多くの説明もまた役立つだろう。 –
@BOちょうどターゲットオブジェクト/位置への邪魔にならない – Girauder