using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Spearman_count
{
class Spearman
{
public static double[,] Input(int n)//对输入的坐标,按行分,即每行存储一个点的坐标(x,y,z)信息;
{
double[,] coordinate = new double[n, 3];
string[] st = Console.ReadLine().Split(' ');
for (int i = 0; i < n; ++i)
{
coordinate[i, 0] = Convert.ToDouble(st[0 + i * 3]);
coordinate[i, 1] = Convert.ToDouble(st[1 + i * 3]);
coordinate[i, 2] = Convert.ToDouble(st[2 + i * 3]);
}
return coordinate;
}
public static int Factorial(int x)//定义一个用于计算阶乘的方法;
{
int y=1;
for (int i = x; i > 0; --i)
y = y * i;
return y;
}
public static int Com_number(int n, int m)//计算C(n,m)
{
int N = (Factorial(n) / (Factorial(n - m)) / Factorial(m));
return N;
}
public static double[,] Combination_2(int C_n_m, int n, double[,] a)
{
double[,] com = new double[C_n_m, 6];int I = 0;int J = 0;
for (int i_1 = 0; i_1 < n - 1; ++i_1)
for (int i_2 = 1 + i_1; i_2 < n ; ++i_2)
for (int j = 0; j < 3; ++j)
{
com[I, J] = a[i_1, j]; ++J;
com[I, J] = a[i_2, j]; ++J;
if (J == 6) {
J = 0; ++I; }
}
return com;
}
public static double[,] Combination_3(int C_n_m,int n,double[,] a)//定义一个从n个点中抽取3个的组合方法;
{
double[,] com = new double[C_n_m, 9]; int I = 0; int J = 0;
for (int i_1 = 0; i_1 < n - 2; ++i_1)
for (int i_2 = 1 + i_1; i_2 < n - 1; ++i_2)
for (int i_3 = 1 + i_2; i_3 < n; ++i_3)
for (int j = 0; j < 3; ++j)
{
com[I, J] = a[i_1, j]; ++J; com[I, J] = a[i_2, j]; ++J;
com[I, J] = a[i_3, j]; ++J;
if (J == 9) {
J = 0; I = I + 1; }
}
return com;
}
public static double[,] Combination_4(int C_n_m, int n, double[,] a)//定义一个从n个点中抽取4个的组合方法;
{
double[,] com = new double[C_n_m, 12]; int I = 0; int J = 0;
for (int i_1 = 0; i_1 < n - 3; ++i_1)
for (int i_2 = 1 + i_1; i_2 < n - 2; ++i_2)
for (int i_3 = 1 + i_2; i_3 < n - 1; ++i_3)
for (int i_4 = 1 + i_3; i_4 < n; ++i_4 )
for (int j = 0; j < 3; ++j)
{
com[I, J] = a[i_1, j]; ++J; com[I, J] = a[i_2, j]; ++J;
com[I, J] = a[i_3, j]; ++J; com[I, J] = a[i_4, j]; ++J;
if (J == 12) {
J = 0; ++I; }
}
return com;
}
public static double[,] Combination_5(int C_n_m, int n, double[,] a)//定义一个从n个点中抽取5个的组合方法;
{
double[,] com = new double[C_n_m, 15]; int I = 0; int J = 0;
for (int i_1 = 0; i_1 < n - 4; ++i_1)
for (int i_2 = 1 + i_1; i_2 < n - 3; ++i_2)
for (int i_3 = 1 + i_2; i_3 < n - 2; ++i_3)
for (int i_4 = 1 + i_3; i_4 < n - 1; ++i_4)
for (int i_5 = 1 + i_4; i_5 < n; ++i_5)
for (int j = 0; j < 3; ++j)
{
com[I, J] = a[i_1, j]; ++J; com[I, J] = a[i_2, j]; ++J;
com[I, J] = a[i_3, j]; ++J; com[I, J] = a[i_4, j]; ++J;
com[I, J] = a[i_5, j]; ++J; if (J == 15) {
J = 0; I = I + 1; }
}
return com;
}
public static double[,] Com_Array(int C_n_m, int n, int m, double[,] a)//定义一个生成组合数组的方法;
{
double[,] com_a = new double[C_n_m, m * 3];
switch (m)
{
case 2:
com_a = Combination_2(C_n_m, n, a);
break;
case 3:
com_a = Combination_3(C_n_m, n, a);
break;
case 4:
com_a = Combination_4(C_n_m, n, a);
break;
case 5:
com_a = Combination_5(C_n_m, n, a);
break;
}
return com_a;
}
public static double[,] R(int C_n_m, int m, double[,] a<
基于罗格里德矩阵的坐标转换7参数求取
最新推荐文章于 2022-12-21 22:38:43 发布