|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 26.01.2016, 13:20 | |
|
0
|
|
| 26.01.2016, 13:20 | |
|
Ответы с готовыми решениями:
46
Найти координаты центра окружности по трём точкам
Массивы. Геометрия. Об окружности минимального радиуса по трем точкам |
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 26.01.2016, 14:16 | |
|
ТС не любит матрицы)). А как знать куда поворачивать? Мне видеться тут только алгоритм поиска минимум Z вершины, замер двух углов. Поворот вокруг Y вокруг X, найти центр D по 3 точкам и повернуть обратно.
Итого 4 поворота матрицами.
0
|
|
|
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
|
|
| 26.01.2016, 14:25 | |
|
"Углы Эйлера" - https://ru.wikipedia.org/wiki/... 1%80%D0%B0
максимум три поворота из любого положения... ставим нормаль к треугольнику по оси Z дальше стандартное определение circumcenter в 2D
0
|
|
| 26.01.2016, 14:29 | |||||||
0
|
|||||||
|
|
|
| 26.01.2016, 18:26 | |
|
Довольно просто для стороны треугольника AB написать уравнение плоскости перпендикулярной AB и проходящей через середину AB, то есть через точку K=(B-A)/2. Если обозначить M=(x,y,z) координаты точки плоскости, то уравнение плоскости через скалярное произведение векторов будет такое: (B-A,M-K)=0. Нужно написать еще два таких уравнения для сторон BC и CA. Получится система трех уравнений, которую нужно решить относительно x,y,z, например, по формулам Крамера. Это будет центр окружности. По-моему, на C# нормально ляжет. Никаких извлечений корней и итераций.
Добавлено через 10 минут На фортран, где есть операции между векторами и матрицами, конечно, легло бы лучше. А здесь при любом чихе приходится писать циклы по трем координатам. Но для трех координат будет логично заменять массивы из трех элементов тремя обычными переменными, типа Ax, Ay, Az, а циклы заменять тремя операторами присваивания.
0
|
|
|
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
|
||||||
| 26.01.2016, 21:01 | ||||||
|
Да тут можно обойтись всего одним поворотом! так как направление осей координат в плоскости треугольника неважно.
1) сдвигаем начало координат в точку А -> А = 0; B = B - A; C = C - A. 2) находим нормаль к треугольнику -> N = cross(B, C).normalized(); 3) находим ось вращения как векторное произведение нормали и вектора "вверх" Z(0,0,1) -> R = cross(N, Z); 4) находим угол поворота -> U = acos(dot(N, Z)); 5) вращаем вектора В и С, тем самым "ложим" треугольник на плоскость X-Y. 6) находим центр окружности O. 7) возвращаемся в исходную СК -> вращаем на угол (-U) и перенос начала координат O = O + A. Добавлено через 4 минуты Для пункта 6: Кликните здесь для просмотра всего текста
0
|
||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||
| 26.01.2016, 22:32 | |||
|
В итоге предложено порядка 5 методов. Интересно ТС хоть что то попытался решить, а то вы тут распинаетесь. Мне бы так помогали в Mathematica…
0
|
|||
|
|
||||||
| 27.01.2016, 00:48 [ТС] | ||||||
|
_Develop, если правильно всё воплотил, то так:
Кликните здесь для просмотра всего текста
0
|
||||||
| 27.01.2016, 08:17 | ||||||||||||
|
Создаем локальную систему координат: 3 единичных вектора. Один у нас есть: нормаль к тр-ку. Два остальных выбираем как угодно (хоть рандомно) лишь бы все 3 были взаимо-перпендикулярны. Техничнее всего взять второй = одна из сторон тр-ка. Эти 3 вектора и есть уже готовая матрица поворота, не нужно вычислять ось вращения и угол. Теперь переводим точки "из мира в локальную" Кликните здесь для просмотра всего текста
Когда посчитали центр переводим его обратно в мир (множим на столбцы матрицы) Кликните здесь для просмотра всего текста
0
|
||||||||||||
|
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
|
|||
| 27.01.2016, 13:40 | |||
|
Добавлено через 25 минут
0
|
|||
| 27.01.2016, 13:50 | ||
|
0
|
||
|
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
|
|
| 27.01.2016, 13:58 | |
|
возможно. Я C# не знаю есть ли там встроенная такая функция. Но в Qt и в OpenGL, да и в любой мат.библиотеке тоже такое есть. Axis-angle rotation везде должен быть.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 27.01.2016, 14:18 | ||
|
skilllab, А как вы программируете не проверяя решения в мат. пакетах? Там это быстрей и удобней чем кодить сразу.
0
|
||
| 27.01.2016, 14:49 | |||||||
0
|
|||||||
|
|
|
| 27.01.2016, 15:02 | |
|
Решение, которое я предложил содержит ошибку. Хотя это больше и неактуально, хочу его поправить. Пересечение трех плоскостей, которые я указал, будут представлять собой не точку, а прямую. Так что одну из плоскостей надо заменить на плоскость, проходящую через три точки A, B, C. Если понадобится, с формулой я помогу.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 27.01.2016, 15:42 | ||
|
Вообще решение такой сложной задачки интересная и много быстрей чем мои 4 сферы еще и страшным Крамером, почему я не взял ее так просто решить а полез в 4 сферы…
0
|
||
|
|
||||||
| 27.01.2016, 17:47 | ||||||
Сообщение было отмечено skilllab как решение
Решение
Такие тупые формулы из учебников. Проще сразу записать на языке. Может быть не очень экономно написал. Но чем тупее, тем понятнее.
1
|
||||||
|
|
|
| 27.01.2016, 19:20 [ТС] | |
|
0
|
|
| 27.01.2016, 19:20 | |
|
Найти центр сферы по 4 точкам на ее поверхности По трём точкам найти линии треугольника. Найти координаты вершины параболы по трем заданым точкам Найти центр окружности Как начертить кривую по трем точкам Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|