0 / 0 / 0
Регистрация: 02.07.2022
Сообщений: 1

Трёхмерный треугольник

02.07.2022, 08:14. Показов 3355. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заданы три точки в трёхмерном пространстве. Требуется найти точку, сумма расстояний от которой до заданных точек минимальна, и вывести соответствующую сумму.

Формат ввода
Вход состоит из трёх строк, каждая из которых содержит три целых числа x, y, z (-109 ≤ x, y, z ≤ 109) — координаты точек.

Формат вывода
Выведите одно число — минимально возможную сумму расстояний от точки в пространстве до заданных точек с абсолютной или относительной погрешностью не хуже 10-4.

На любом яп спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2022, 08:14
Ответы с готовыми решениями:

Создать базовый класс Треугольник с 2 наследниками: Равносторонний треугольник, Прямоугольный треугольник
Задание звучит так: Нужно создать базовый класс Треугольник с двумя наследующими его классами - равносторонний треугольник (·...

Класс треугольник с произвольным классом - равнобедренный треугольник
Создать класс треугольник, члены класса - длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и...

Класс треугольник, найти треугольник максимальной площади
Реализовать класс треугольников. Для некоторого множества заданных координатами своих вершин треугольников, найти треугольник максимальной...

40
6 / 5 / 1
Регистрация: 29.06.2022
Сообщений: 9
05.07.2022, 07:14
Студворк — интернет-сервис помощи студентам
В треугольнике с углами до 120 градусов самая маленькая сумма расстояний до вершин находится в точке Ферма
Кликните здесь для просмотра всего текста
H - точка Ферма
I - точка пересечения биссектрис
D - не обращать внимания
o - сумма расстояний до точки Ферма
u - сумма расстояний до пересечения биссектрис
v - сумма расстояний до остальных вершин (AB + AC)

В треугольнике с углами больше 120 градусов самая маленькая сумма расстояний до вершин находится в точке этого угла
Кликните здесь для просмотра всего текста

Для поклонников медиан(там все еще грустнее)
Кликните здесь для просмотра всего текста
3
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,027
05.07.2022, 07:27
Судя по википелии https://ru.wikipedia.org/wiki/Точка_Ферма:
Если один из углов треугольника ABC больше 1200, то X лежит вне треугольника ABC, а точка Ферма S совпадает с вершиной тупого угла
1
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,027
05.07.2022, 07:39
В цитате 1200 означает 120 (градусов), а не 120 в степени 0, если вдруг не совсем понятно.

Добавлено через 4 минуты
VasyIzLesa, получается, что второй рисунок не совсем верный.
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
05.07.2022, 08:26
Как-то так. Надо бы ещё с величиной шага разобраться, но пока, вроде бы, и так довольно неплохо получилось.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <cmath>
 
struct point {
    double x;
    double y;
    double z;
};
 
point operator* (const double &d, const point &p) {
    return {p.x*d, p.y*d, p.z*d};
}
 
point operator* (const point &p, const double &d) {
    return {p.x*d, p.y*d, p.z*d};
}
 
point operator/ (const point &p, const double &d) {
    return {p.x/d, p.y/d, p.z/d};
}
 
point operator+ (const point &a, const point &b) {
    return {a.x+b.x, a.y+b.y, a.z+b.z};
}
 
point operator- (const point &a, const point &b) {
    return {a.x-b.x, a.y-b.y, a.z-b.z};
}
 
double f(const point A, const point B, const point C, const point P) {
    return hypot(hypot(A.x-P.x, A.y-P.y), A.z-P.z) + 
           hypot(hypot(B.x-P.x, B.y-P.y), B.z-P.z) +
           hypot(hypot(C.x-P.x, C.y-P.y), C.z-P.z);
}
 
point getGradient(const point A, const point B, const point C, const point P, double eps = 0.0001) {
    point result;
    
    result.x = (f(A, B, C, {P.x+eps,P.y,P.z}) - f(A, B, C, {P.x-eps,P.y,P.z})) / (2*eps);
    result.y = (f(A, B, C, {P.x,P.y+eps,P.z}) - f(A, B, C, {P.x,P.y-eps,P.z})) / (2*eps);
    result.z = (f(A, B, C, {P.x,P.y,P.z+eps}) - f(A, B, C, {P.x,P.y,P.z-eps})) / (2*eps);
    
    return result;
}
 
int main()
{
    // 38.7644 // 14.6261 // 9.1231
    point A = {38, 38, 0}; // 2, 7, 3 // 1, 3, 0 
    point B = {54, 34, 0}; // 1, -2, 0 // 5, 6, 0
    point C = {66, 53, 0}; // 3, 1, -5 //6, 10, 0
    point P = A;
    double eps = 0.0001, step = 2000, len = 0.0, cnt = 0.0;
    do {
        len = f(A,B,C,P);
        P = P - step*getGradient(A,B,C,P);
        step *= 0.9;
        cnt++;
    } while (fabs(len - f(A,B,C,P)) > eps);
    std::cout << P.x << ' ' << P.y << ' ' << P.z << ' ' << f(A,B,C,P) << ' ' << cnt;
}
2
6 / 5 / 1
Регистрация: 29.06.2022
Сообщений: 9
05.07.2022, 08:29
Цитата Сообщение от gunslinger Посмотреть сообщение
получается, что второй рисунок не совсем верный.
Что-то этот Ферми "темнит" с построением
Кликните здесь для просмотра всего текста
1
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,027
05.07.2022, 09:18
"Английская" википедия говорит то же самое (только угол в 120 градусов включается) https://en.wikipedia.org/wiki/Fermat_point:
Case 1. The triangle has an angle ≥ 120°
...
the Fermat point lies at the obtuse-angled vertex
Случай 1. Угол треугольника ≥ 120°
...
точка Ферма лежит в тупоугольной вершине
Case 2. The triangle has no angle ≥ 120°
...
the Fermat point is coincident with the first isogonic center
Случай 2. В треугольнике нет углов ≥ 120°
...
точка Ферма совпадает с первым изогоническим центром
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
05.07.2022, 10:06
Цитата Сообщение от VasyIzLesa Посмотреть сообщение
В треугольнике с углами больше 120 градусов самая маленькая сумма расстояний до вершин находится в точке этого угла
Тут я не согласен, ведь тогда искомая точка будет являться углом треугольника, а не отдельной точкой.
А вот если все три угла треугольника, будут находится практически на одной линии, тогда да. То есть тупой угол должен быть почти 180 градусов.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
05.07.2022, 11:22
Цитата Сообщение от SpBerkut Посмотреть сообщение
C++
1
hypot(hypot(C.x-P.x, C.y-P.y), C.z-P.z)
В c++ 17 есть 3Д std::hypot() с тремя аргументами.
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
05.07.2022, 11:41
Цитата Сообщение от politoto Посмотреть сообщение
В c++ 17 есть 3Д std::hypot() с тремя аргументами.
Знаю. Я в rextester'е не разобрался, как 17-й подключить.

Добавлено через 5 минут
Вот же ж зараза. Попробовал сейчас те же действия, что и утром, и всё заработало.
0
6 / 5 / 1
Регистрация: 29.06.2022
Сообщений: 9
05.07.2022, 12:18
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Тут я не согласен, ведь тогда искомая точка будет являться углом треугольника, а не отдельной точкой.
ну можно отступить от этой точки по биссектрисе на
Цитата Сообщение от karimNeymenu Посмотреть сообщение
абсолютной или относительной погрешностью не хуже 10-4
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
05.07.2022, 12:43
Цитата Сообщение от мама Стифлера Посмотреть сообщение
ведь тогда искомая точка будет являться углом треугольника, а не отдельной точкой.
А чем тебе угол как точка не понравился?
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
05.07.2022, 14:19
Цитата Сообщение от Байт Посмотреть сообщение
А чем тебе угол как точка не понравился?
Тут скорее VasyIzLesa прав. Ведь не даром указана погрешность вычисления точки. А угол треугольника, это угол фигуры. Но в задаче требуется найти новую точку. То есть, какой бы не был угол и если позволяет погрешность, то это будет новая точка, отличная от точки угла треугольника. И если только погрешность превышена, тогда новая точка должна совпасть с углом треугольника.
Это просто мои логические рассуждения. Всегда могу ошибаться.

Добавлено через 16 минут
Как еще объяснить мое понимание: Допустим тупой угол треугольника = 179.1113 градусов. Если искомая точка по координатам на плоскости превышает заданную погрешность(10-4), тогда да, можно приравнять эту точку к углу треуголника. В противном случае, это должна быть новая точка.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
05.07.2022, 19:08
Можно и неитерационно найти эту точку.
Я только не могу сообразить, как построить третью точку в плоскости этого самого треугольника...
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
06.07.2022, 07:54
https://www.cyberforum.ru/cgi-bin/latex.cgi? \vec{a}\times \vec{b} \times \vec{a} даёт перепендикуляр к a в одной плоскости с a и b
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
06.07.2022, 09:33
Долбаные численные методы! Где-то копится ошибка. Или в вычислении производной, или в вычислении градиента, или в определении шага. А может везде понемногу. Но результат очень близок к аналитическому, что радует.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <cmath>
 
struct Point {
    double x, y, z;
};
 
struct Triangle {
    Point A, B, C;
};
 
Point operator* (const double &d, const Point &p) {
    return {p.x*d, p.y*d, p.z*d};
}
 
Point operator* (const Point &p, const double &d) {
    return {p.x*d, p.y*d, p.z*d};
}
 
Point operator/ (const Point &p, const double &d) {
    return {p.x/d, p.y/d, p.z/d};
}
 
Point operator+ (const Point &a, const Point &b) {
    return {a.x+b.x, a.y+b.y, a.z+b.z};
}
 
Point operator- (const Point &a, const Point &b) {
    return {a.x-b.x, a.y-b.y, a.z-b.z};
}
 
double f(const Triangle T, const Point P) {
    return std::hypot(T.A.x-P.x, T.A.y-P.y, T.A.z-P.z) + 
           std::hypot(T.B.x-P.x, T.B.y-P.y, T.B.z-P.z) +
           std::hypot(T.C.x-P.x, T.C.y-P.y, T.C.z-P.z);
}
 
Point getGradient(const Triangle T, const Point P, double eps = 0.0001) {
    Point result;
    result.x = f(T, {P.x+eps,P.y,P.z}) - f(T, {P.x-eps,P.y,P.z});
    result.y = f(T, {P.x,P.y+eps,P.z}) - f(T, {P.x,P.y-eps,P.z});
    result.z = f(T, {P.x,P.y,P.z+eps}) - f(T, {P.x,P.y,P.z-eps});
    return result / (2*eps);
}
 
double df(const Triangle T, const Point P, const Point grad, double x, double eps = 0.0001) {
    return (f(T, P - (x+eps)*grad) - f(T, P - (x-eps)*grad)) / (2*eps);
}
 
double getStep(const Triangle T, const Point P, double eps = 0.0001) {
    Point grad = getGradient(T, P, eps);
    double lx = 0.01, rx = lx, cx, df1;
    if (df(T, P, grad, lx, eps) >= 0) return lx;
    while (df(T, P, grad, rx, eps) < 0) rx *= 2;
    do {
        cx = (lx + rx) / 2;
        df1 = df(T, P, grad, cx, eps);
        if (df1 > 0) {
            rx = cx;
        } else {
            lx = cx;
        }
    } while (fabs(df1) > eps);
    return cx;
}
 
int main()
{
    Triangle Ts[] = {
                        { {1, 3, 0}, {5, 6, 0}, {6, 10, 0} },       // 9.1231
                        { {38, 38, 0}, {54, 34, 0}, {66, 53, 0} },  // 38.7644
                        { {2, 7, 3}, {1, -2, 0}, {3, 1, -5} },      // 14.6261
                        { {20, 73, 0}, {17, -42, 0}, {-12, 51, 0} } // 135.5567
                    };
    Triangle T = Ts[3];
    double crutch = 10.0;
    T.A = T.A*crutch; T.B = T.B*crutch; T.C = T.C*crutch; // Первый костыль
    Point P = T.A;
    double eps = 0.0001, step = 0.0, len = 0.0, cnt = 0.0;
    do {
        len = f(T,P);
        step = getStep(T, P, eps);
        P = P - step * getGradient(T, P, eps);
        cnt++;
    } while (fabs(len - f(T,P)) > eps);
    T.A = T.A/crutch; T.B = T.B/crutch; T.C = T.C/crutch; P = P/crutch;  // Второй костыль
    std::cout << P.x << ' ' << P.y << ' ' << P.z << ' ' << f(T,P) << ' ' << cnt << std::endl;
}
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
06.07.2022, 09:59
Цитата Сообщение от politoto Посмотреть сообщение
даёт перепендикуляр к a в одной плоскости с a и b
Не могу понять, как это мне поможет.
Возможно, чего-то не замечаю?
Или я неправильно сформулировал вопрос.


Я не могу придумать способ посчитать координаты точки D в 3д. так, чтобы она лежала в плоскости треугольника ABC
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
06.07.2022, 12:31
Цитата Сообщение от мама Стифлера Посмотреть сообщение
Как еще объяснить мое понимание:
Честно говоря, даже не пойму, что тебя смущает
Возми очень тупой угол. Отступи слегка от его вершины внутрь Расстояние до тупой вершины увеличится сильно. А до остальных - умкеньшится чуть-чуть
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
06.07.2022, 12:47
Цитата Сообщение от SpBerkut Посмотреть сообщение
копится ошибка. Или в вычислении производной, или в вычислении градиента
При вычислении вычитаются близкие величины, поэтому в результате большая относительная погрешность.
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
06.07.2022, 19:26
Цитата Сообщение от politoto Посмотреть сообщение
При вычислении вычитаются близкие величины, поэтому в результате большая относительная погрешность.
Так и есть. Прогнал вручную, и выяснилось, что величина шага становится меньше заданной точности на расстоянии от искомого минимума, превышающем эту же точность.

По теме.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include <cmath>
 
#define D60 1.0471975511965977461542144610932 // 60° в радианах
 
struct Vector3D {
    double x, y, z;
};
 
struct Matrix {
    Vector3D A, B, C;
};
 
// квадрат числа
double sqr(const double x) {
    return x*x;
}
 
// формирование матрицы поворота
Matrix getRotationMatrix(const Vector3D &V, double angle) {
    double sina = sin(angle);
    double cosa = cos(angle);
    return {
                { cosa + (1 - cosa)*sqr(V.x), (1 - cosa)*V.x*V.y - sina*V.z, (1 - cosa)*V.x*V.z + sina*V.y },
                { (1 - cosa)*V.x*V.y + sina*V.z, cosa + (1 - cosa)*sqr(V.y), (1 - cosa)*V.y*V.z - sina*V.x },
                { (1 - cosa)*V.x*V.z - sina*V.y, (1 - cosa)*V.y*V.z + sina*V.x, cosa + (1 - cosa)*sqr(V.z) }
           };
}
 
// транспонирование матрицы. Решил поразвлекаться и запихал это в оператор
Matrix operator! (const Matrix &M) {
    return { {M.A.x, M.B.x, M.C.x},
             {M.A.y, M.B.y, M.C.y},
             {M.A.z, M.B.z, M.C.z} };
}
 
// векторное произведение
Vector3D operator* (const Vector3D &A, const Vector3D &B) {
    return {A.y * B.z - A.z * B.y, A.z * B.x - A.x * B.z, A.x * B.y - A.y * B.x};
}
 
// произведение матрицы 3х3 и вектора
Vector3D operator* (const Matrix &M, const Vector3D &V) {
    return { M.A.x * V.x + M.A.y * V.y + M.A.z * V.z,
             M.B.x * V.x + M.B.y * V.y + M.B.z * V.z,
             M.C.x * V.x + M.C.y * V.y + M.C.z * V.z };
}
 
// частное вектора и числа
Vector3D operator/ (const Vector3D &A, const double x) {
    return {A.x / x, A.y / x, A.z / x};
}
 
// сумма двух векторов
Vector3D operator+ (const Vector3D &A, const Vector3D &B) {
    return {A.x + B.x, A.y + B.y, A.z + B.z};
}
 
// разность двух векторов
Vector3D operator- (const Vector3D &A, const Vector3D &B) {
    return {A.x - B.x, A.y - B.y, A.z - B.z};
}
 
// вывод вектора
std::ostream& operator << (std::ostream& out, const Vector3D V) {
    return out << V.x << "," << V.y << "," << V.z;
}
 
// расстояние между двумя точками
double getDistance(const Vector3D &A, const Vector3D &B) {
    return std::hypot(A.x - B.x, A.y - B.y, A.z - B.z);
}
 
// модуль вектора
double getDistance(const Vector3D &A) {
    return std::hypot(A.x, A.y, A.z);
}
 
// возвращает единичный вектор, путём деления исходного на модуль. Возможно, нужно назвать getOrt
Vector3D getOrth(const Vector3D &V) {
    return V / getDistance(V);
}
 
// вычисляем точку пересечения прямых AB и CD. Если прямые скрещиваются, то всё равно что-то вернёт. До конца не въехал ещё
// единственная функция, реализацию которой слямзил где-то на форуме. Перекурочил нулевые знаменатели. Вроде работает
Vector3D getIntersection(const Vector3D &A, const Vector3D &B, const Vector3D &C, const Vector3D &D){
    Vector3D P = B - A;
    Vector3D Q = D - C;
    return {
               ((P.y * Q.x - Q.y * P.x)?(A.x * P.y * Q.x - C.x * Q.y * P.x - A.y * P.x * Q.x + C.y * P.x * Q.x) /
               (P.y * Q.x - Q.y * P.x):0),
               ((P.x * Q.y - Q.x * P.y)?(A.y * P.x * Q.y - C.y * Q.x * P.y - A.x * P.y * Q.y + C.x * P.y * Q.y) /
               (P.x * Q.y - Q.x * P.y):0),
               ((P.y * Q.z - Q.y * P.z)?(A.z * P.y * Q.z - C.z * Q.y * P.z - A.y * P.z * Q.z + C.y * P.z * Q.z) /
               (P.y * Q.z - Q.y * P.z):0)
            };
}
 
int main()
{
    Vector3D P[] = { {2, 7, 3}, {1, -2, 0}, {3, 1, -5} };                  // массив вершин трегольника
    //std::cout << P[0] << ' ' << P[1] << ' ' << P[2] << ' ' << P[0] << "  \n";    // вывод для AutoCAD'a
    double dist[] = {0, 0, 0};                                                   // массив длин сторон, лежащих напротив вершин
    for (unsigned i = 0; i < 3; i++) {
        dist[i] = getDistance(P[(i + 1) % 3], P[(i + 2) % 3]);                   // вычисление массива длин
    }
    Vector3D R = {0, 0, 0};                                                      // вектор-результат
    
    // сначала ищем углы больше 120°. Перебираем вершины, по теореме косинусов находим угол. Если угол при вершине больше 120°, то это ответ
    bool find = false;
    for (unsigned i = 0; i < 3; i++) {
        if ((sqr(dist[(i + 1) % 3]) + sqr(dist[(i + 2) % 3]) - sqr(dist[i])) / (dist[(i + 1) % 3] * dist[(i + 2) % 3]) <= -1.0) {
            find = true;
            R = P[i];
            break;
        }
    }
    
    // если ничего не нашли, то ищем точку Ферма внутри треугольника
    if (!find) {
        Vector3D T1, T2, A_, B_;
        Vector3D orth = getOrth((P[1] - P[0]) * (P[2] - P[0])); // единичный вектор-нормаль к плоскости треугольника
        Matrix MR = getRotationMatrix(orth, D60);               // матрица поворота относительно нормали на 60° D60 = M_PI/3
        Matrix ML = !MR; // транспонирование                    // она же, но в другую сторону
 
        T1 = MR * (P[1] - P[0]) + P[0];                                // крутим первую точку относительно нулевой вправо
        T2 = ML * (P[1] - P[0]) + P[0];                                // и влево. Крутим в плоскости треугольника
        // Выбираем ту из двух, которая дальше от второй. Та, что дальше — выкручена наружу треугольника
        A_ = ((getDistance( T1, P[2] ) > getDistance( T2, P[2] )) ? T1 : T2 );
        
        // аналогично крутим вторую относительно первой. Оставляем ту, что дальше от нулевой
        T1 = MR * (P[2] - P[1]) + P[1];
        T2 = ML * (P[2] - P[1]) + P[1];
        B_ = ((getDistance( T1, P[0] ) > getDistance( T2, P[0] )) ? T1 : T2 );
        R = getIntersection(P[2], A_, P[0], B_); // вычисляем результат как пересечение отрезков [P[2], A_] и [P[0], B_]
    }
    
    std::cout << '(' << R << ')' << '\t' << getDistance(P[0],R) + getDistance(P[1],R) + getDistance(P[2],R);
}
Чую, что заработал левел-ап в векторах.
2
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
06.07.2022, 19:47
А можно не совсем посвященному в геометрии, все же указать какой принцип тут пытаются реализовать ?
Все же через точку Ферма?
Нить вашего исследования совсем потерял ...

Добавлено через 1 минуту
А что там на счет того что их может быть несколько ?
Теорема Лестера. В любом разностороннем треугольнике две точки Ферма, центр девяти точек и центр описанной окружности лежат на одной окружности
Добавлено через 9 минут
Хм, кажется я понял о чем вы тут.
Теорема [3,4]. Точка Ферма-Торричелли существует только для треугольника
P1P2P3
, у которого величина каждого угла меньше 2π/3
В этом случае она единственна

Если величина одного из углов треугольника
≥2π/3
, то минимум достигается при помещении точки P в эту вершину.
Но еще остался нюанс с погрешностью ? С ней то что не так ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.07.2022, 19:47

Построить треугольник Паскаля. Используя треугольник Паскаля, вычислить 𝑘−ое число Фиббоначчи. Нумерация чисел Фиббона
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; //ввод кол-ва строк в...

Трехмерный график
Здравствуйте! Подскажите, пожалуйста, какой костыль можно использовать, чтобы в код прикрутить рисование трёхмерного графика по точкам в...

Трехмерный график
Приветствую вас. Уважаемы профи, прошу помочь в следующей задаче. Мне нужно нарисовать 3d график, т.е. пользователь задает координаты...

Трехмерный массив
// Arrays.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using...

Трёхмерный массив в Функцию
Трёхмерный массив в Функцию нужно засунуть и изменять значение переменой которую передали в неё как реализовать ?! #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru