Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
points[1][0] = + c; points[1][1] = - r / 2; //second point
points[2][0] = - c; points[2][1] = - r / 2; //3th point
double c = (r * Math.sqrt(3) / 2);
double l = c * 2; // distance between points
points[0][0] = 0;
points[1][0] = r;
for (int i = 2; i < points.length; i++) {
double d = distanceToCenter(points[0]);
double q2 = (l * l - 2 * d * d) / (2 * Math.sqrt(l * l - d * d));
double q1 = Math.sqrt(d * d + q2 * q2);
for (int k = 0; k < i; k++) {
points[k][i - 1] = -q2; // set i-th dimension for all created points
points[i][k] = 0; // set all calculated dimension for new point
}
points[i][i - 1] = q1;
}
for (int i = 0; i <= dimensionalCount; i++)
qDebug() << points[i].distanceToCenter();
for (int i = 0; i <= dimensionalCount; i++)
for (int k = i + 1; k <= dimensionalCount; k++)
qDebug() << points[i].distanceTo(points[k]);
// calculate points of simplex of specified radius
void simplex(double r, double[][] points){
int dimensions = points.length - 1;
// spherical coordinates
double[][] angles = new double[points.length][dimensions - 1];
simplexInSphericalCoordinates(0, 0, dimensions, angles);
// convert spherical into decart
for (int i = 0; i < points.length; i++) {
double sinMult = 1;
for (int d = 0; d < dimensions - 1; d++) {
points[i][d] = r * Math.cos(angles[i][d]) * sinMult;
sinMult *= Math.sin(angles[i][d]);
}
points[i][dimensions - 1] = r * sinMult;
}
}
void simplexInSphericalCoordinates(int pointsS, int dimensionsS, int d, double[][] angles) {
if (dimensionsS == angles[pointsS].length) {
angles[pointsS][dimensionsS - 1] += 2* Math.PI / 3;
return;
}
angles[pointsS][dimensionsS] = 0;
for (int i = pointsS + 1; i < angles.length; i++) {
angles[i][dimensionsS] = Math.acos(-1f / d);
}
simplexInSphericalCoordinates(pointsS + 1, dimensionsS + 1, d - 1, angles);
}
Симплекс Серпинского