Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / [Решено] Забуксовал на школьной математике (3 стр)

[Решено] Забуксовал на школьной математике (3 стр)

Поделиться
Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 3 4 5 Следующая

jaguardУчастникwww28 окт. 201718:18#30
MrShoor

Круто объяснил картинкой, даже я понял.

MrShoorУчастникwww28 окт. 201720:17#31
susageP
> У нас есть многогранник в данном случаи треугольник k=3.
Многогранник не может быть треугольником. Если он будет треугольником - то это будет одногранник.
А про углы я совсем ничего не понял. Можешь нарисовать?
susagePПостоялецwww28 окт. 201720:53#32
MrShoor
> Многогранник не может быть треугольником. Если он будет треугольником - то это
> будет одногранник.

Что то с лету написал - многоугольник естественно.

MrShoor
> А про углы я совсем ничего не понял. Можешь нарисовать?
Просто в полярных координатах любой угол принимай за 0, остальные будут pi/3, 2pi/3.
Для точки вычисляй угол.  Полярные координаты короче.

FordPerfectПостоялецwww28 окт. 201722:47#33
122
>Но что такое барицентрические координаты?
Когда мы представляем точку, как взвешенную сумму вершин треугольника, то барицентрические координаты - это веса вершин:
Изображение

"Веса" - можно понимать в прямом смысле слова. Если взять невесомый треугольник и поместить в вершины массы Изображение, то его центр масс (барицентр) будет в точке Изображение.

Но веса могут быть также отрицательными. Если часть весов отрицательна, а часть положительна - точка находится вне треугольника.

>То есть по сути расстояние до каждой из вершин?
Наоборот: в вершине у нас координата 1, а не 0.
Барицентрические координаты пропорциональны расстоянию до противолежащего ребра, а точнее - площади противолежащего (вершине) участка треугольника (т. е. произведение расстояния до ребра (высоты) на длину ребра):
Изображение
Изображение
Эти формулы всё-ещё работают для отрицательных весов, если считать площади ориентированными.

Я здесь привожу координаты, нормализованные на 1: Изображение. Но в общем случае это не обязательно: если домножить все веса на один и тот же (ненулевой) коэффициент, то этот набор весов будет обозначать ту же самую точку (если все веса одинаково увеличить, то центр масс не изменится) - барицентрические координаты являются частным случаем однородных.
В этом случае:
Изображение

Правка: 28 окт. 2017 22:51

MrShoorУчастникwww29 окт. 20170:25#34
susageP
> Просто в полярных координатах любой угол принимай за 0, остальные будут pi/3,
> 2pi/3.
Я вот это твое:
> Есть точка P. вычисляем для нее угол относительно угла многоугольника и центра получаем L.
нераспарсил.
Что относительно чего, какие углы?
foxesПостоялецwww29 окт. 20170:37#35
Че то непонятный замес, если детализированый треугольник нужно положить на поверхность сферы то задача решается нормализацией векторов из центра сферы. Если треугольник со всеми вершинами лежит в плоскости, а вершины ребер на поверхности сферы то это тоже круг и также решается нормализацией из центра описанной окружности.
tri_sph | [Решено] Забуксовал на школьной математике

Правка: 29 окт. 2017 0:58

MrShoorУчастникwww29 окт. 20170:54#36
foxes
> если детализированый треугольник нужно положить на поверхность сферы то задача
> решается нормализацией векторов из центра сферы
Рассматривай задачу чисто в 2д. Был простой треугольник, с помощью тесселяции его надо выгнуть так, чтобы каждая сторона стала дугой. Дуги на сторонах могут быть разные.
foxes
> то это тоже круг и также решается нормализацией из центра описанной окружности.
Я же в нульпосте привел пример треугольника, который мне надо получить. Задачу нужно так же решить для внутренних вершин после тесселяции.
foxesПостоялецwww29 окт. 20171:01#37
MrShoor
Все тоже самое и для 3D и для 2D. Для 2D главные вершины уже лежать на описанной окружности. Для внутренних также берем главные вершины с соответствующим меньшим радиусом. Чтобы получить дуги, а не описанную окружность интерполируем в соответствии от изначального треугольника в сторону описанной окружности. То что у тебя на первой картинке красненьким нарисовано это значение и будет равно доле интерполяции в промежутке от (A+B)*0.5, (B+C)*0.5, (C+A)*0.5 до R - описанной окружности. То есть можно уже посчитать расстояние от ребра треугольника до дуги в коэффициент для Lerp. Если у тебя всегда равносторонний треугольник то там вообще все просто с центром.

Правка: 29 окт. 2017 1:19

glasmПользовательwww29 окт. 20171:53#38
js пример:
+ Показать
MrShoorУчастникwww29 окт. 201718:10#39
foxes
> Для 2D главные вершины уже лежать на описанной окружности.
Нет там у меня описанной окружности.

foxes
> это значение и будет равно доле интерполяции в промежутке от (A+B)*0.5,
> (B+C)*0.5, (C+A)*0.5 до R - описанной окружности
Если ты предлагаешь ввести эту описанную окружность и нуть по ней, то это неправильно, и сработает только для равностороннего треугольника. Чтобы проще это заметить, сделай то, что ты сейчас делал для тупоугольного треугольника.
Ну и на глазок сделаем 0.5 - мне не подходит, ибо мне нужно точное решение

foxes
> Если у тебя всегда равносторонний треугольник
У меня скорее всегда не равносторонний, и часто прямоугольный.

foxesПостоялецwww29 окт. 201718:51#40
MrShoor
> Ну и на глазок сделаем 0.5 - мне не подходит, ибо мне нужно точное решение
Это в любом случае центр окружности на серединном перпендикуляре для каждой отдельной стороны, пусть и не на пересечении.
Тем не менее во всех вариантах треугольников описанная окружность описывает базу дуги. Если центр окружности внутри треугольника то всегда работает, Для остальных вариантов решение я привел строчкой выше.
MrShoor
> У меня скорее всегда не равносторонний, и часто прямоугольный.
Будет чуть сложнее найти центр описанной окружности - вот и вся разница.

Правка: 29 окт. 2017 18:51

MrShoorУчастникwww29 окт. 201719:25#41
foxes
> Для остальных вариантов решение я привел строчкой выше.
Нарисуй тупоугольный треугольник с углом скажем в 170 градусов. Затем возьми большое h. Должны получиться две такие сиськи. А потом объясни до какой окружности надо интерполировать, чтобы оно стало сиськами.
foxesПостоялецwww29 окт. 201719:57#42
+ Показать
+ Показать

Из этого по высоте дуги можно вывести радиус R - sqrt(R*R-ab*ab/4) = H
Справишься?

Правка: 29 окт. 2017 20:16

FordPerfectПостоялецwww29 окт. 201720:01#43
MrShoor
Если взять мою f, и веса
[cht]\frac{w_0^{-1}}{w_0^{-1}+w_1^{-1}+w_2^{-1}}[/cht]
[cht]\frac{w_1^{-1}}{w_0^{-1}+w_1^{-1}+w_2^{-1}}[/cht]
[cht]\frac{w_2^{-1}}{w_0^{-1}+w_1^{-1}+w_2^{-1}}[/cht]
вроде выходит.
Только про inf/inf что-то сделать.
1 frag / 2 deathsУчастникwww29 окт. 201720:01#44
MrShoor
> Нужно исходный треугольник выгнуть до черной фигуры, у которой все грани - дуги
> окружности. Внутри треугольника не обязательно сохранять это свойство. Справа
> на верхнем рисунке представлена примерная топология.
Не понял задания.
Исходный треугольник, выгнутый на 0.00000001, уже будет фигурой, у которой все грани - дуги окружности (с очень большим радиусом).

Страницы: 1 2 3 4 5 Следующая

/ Форум / Программирование игр / Общее

2001—2017 © GameDev.ru — Разработка игр