【发布时间】:2019-04-25 18:05:31
【问题描述】:
我正在尝试从三个二维数组导入数据并应用一些计算然后得到最小值和第二个最小值,但我得到的最小值为零,甚至不在值中。
double[,] Cranelocations = { { 28.6744, 3.45 }, { 29.67, 7.25 }, { 30.67, -10.6 }, { 31.67, 11.02 }, { 32.67, 5.45 } };
double[,] Picklocation = { { 20.6744, -8.4656 }, { 21.6744, -8.4656 }, { 22.6744, -8.4656 }, { 23.6744, -8.4656 }, { 24.6744, -8.4656 }, { 25.6744, -8.4656 }, { 26.6744, -8.4656 }, { 27.6744, -8.4656 } };
double[,] Setlocation = { { 20.62, 5.03 }, { 24.28, 5.03 }, { 35.99, 14.55 }, { 19, 18.16 }, { 35.99, 5.26 }, { 40.18, 5.26 }, { 9.6, 13.16 } };
double[] Angles = new double[Cranelocations.GetLength(0) * Picklocation.GetLength(0) * Setlocation.GetLength(0)];
double Seta;
for (int i = 0; i < Cranelocations.GetLength(0); i++)
{
for (int j = 0; j < Picklocation.GetLength(0); j++)
{
for (int k = 0; k < Setlocation.GetLength(0); k++)
{
double C1 = Picklocation[j, 0] - Cranelocations[i, 0];
double V1 = Picklocation[j, 1] - Cranelocations[i, 1];
double C2 = Setlocation[k, 0] - Cranelocations[i, 0];
double V2 = Setlocation[k, 1] - Cranelocations[i, 1];
double C3 = Math.Sqrt(Math.Pow(C1, 2) + Math.Pow(V1, 2));
double V3 = Math.Sqrt(Math.Pow(C2, 2) + Math.Pow(V2, 2));
Seta = Math.Acos(((C1 * C2) + (V1 * V2)) / (C3 * V3));
Angles[i] = Seta * 180 / Math.PI;
Angles[k] = Seta * 180 / Math.PI;
Angles[j] = Seta * 180 / Math.PI;
}
}
}
Console.WriteLine(Angles.Min());
【问题讨论】:
-
我在该代码中看不到任何试图获取最小值或第二最小值的内容。你还没有写清楚的代码是行不通的。
-
你在哪里定义
Angles?你怎么知道里面没有0?当我复制/粘贴这个确切的代码并定义Angles时,它工作得很好。最小值输出为67.3864169484903。 -
我刚刚修改了角度澄清的代码,你能告诉我它是如何得到最小值和第二个最小值的吗?我不知道如何编码
-
你是如何定义角度的?最小值在 26 左右
-
如果您对性能感兴趣,您可以通过使用PartialSort 而不是
OrderBy+Take来实现2 倍或更多的提升。
标签: c#