Имея общее m-мерное пространство Мне нужно рассчитать m + 1 координаты, которые все равноудаленные между ними.Вычислить координаты всех равноудаленных среди них
Допустим, что 2D пространство может обрабатывать максимум 3 равноудаленных точек (равносторонний треугольник, созданный 3 вершинами все равноудаленных среди них) и так далее .. в общем говоря, мы можем представить м равноудаленных вершин в пространстве м-1.
Расстояние между вершинами является единичное расстояние (1), для простого 2D случае расстояние между 3 вершины равна 1.
Я читал об этом Equidistant points across a cube, но мой запрос отличается и имеет только один (большой) вместо двух.
Каждый язык программирования достаточно хорош, мне нужно предложить обобщить логику.
Спасибо всем.
Редактировать ----------- Решение состоит в следующем (п являются размеры):
static double[] simplex_coordinates2 (int n)
{
double a;
double c;
int i;
int j;
double s;
double[] x;
x = r8mat_zero_new (n, n + 1);
for (i = 0; i < n; i++)
{
x[i+i*n] = 1.0;
}
a = (1.0 - Math.sqrt (1.0 + (double) (n)))/(double) (n);
for (i = 0; i < n; i++)
{
x[i+n*n] = a;
}
//
// Now adjust coordinates so the centroid is at zero.
//
for (i = 0; i < n; i++)
{
c = 0.0;
for (j = 0; j < n + 1; j++)
{
c = c + x[i+j*n];
}
c = c/(double) (n + 1);
for (j = 0; j < n + 1; j++)
{
x[i+j*n] = x[i+j*n] - c;
}
}
//
// Now scale so each column has norm 1.
//
s = 0.0;
for (i = 0; i < n; i++)
{
s = s + x[i+0*n] * x[i+0*n];
}
s = Math.sqrt (s);
for (j = 0; j < n + 1; j++)
{
for (i = 0; i < n; i++)
{
x[i+j*n] = x[i+j*n]/s;
}
}
return x;
}
static double[] r8mat_zero_new (int m, int n)
{
double[] a;
int i;
int j;
a = new double[m*n];
for (j = 0; j < n; j++)
{
for (i = 0; i < m; i++)
{
a[i+j*m] = 0.0;
}
}
return a;
}
Единичные векторы (1,0,0 ... 0), (0,1,0, ..., 0) и т. Д. В пространстве m + 1 образуют такую конфигурацию m + 1 эквидистантных точек. Все они лежат в плоскости x [1] + x [2] + ... + x [m + 1] = 1. Таким образом, нужно только поворачивать или Householder-отражать нормаль этой плоскости в последнем единичном векторе, чтобы получить эту конфигурацию в m-пространстве. – LutzL