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

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

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

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

MrShoorУчастникwww27 окт. 201721:57#0
Картинка для привлечения внимания:
triangle | [Решено] Забуксовал на школьной математике
Есть исходный треугольник (синий слева). Для каждой грани треугольника есть высота h (красная). Это высота над хордой окружности:
Изображение
Нужно исходный треугольник выгнуть до черной фигуры, у которой все грани - дуги окружности. Внутри треугольника не обязательно сохранять это свойство. Справа на верхнем рисунке представлена примерная топология.

На руках есть 2д координаты вершин треугольника, h для каждой грани и барицентрические координаты. Пробую вывести функцию смещения, но у меня выходит какая-то дичь из вычисления центра и полярных координат. Подозреваю что можно как-то проще.

Условие применимости:
Все h лежат в диапазоне [0;~0.29*R). Следствия: 1. Дуги описывают только выпуклую фигуру 2. Центральный угол опирающийся на каждую из дуг меньше или равен 90 градусов

upd. Решение тут: http://www.gamedev.ru/code/forum/?id=230946&page=5#m62

Правка: 31 окт. 2017 3:52

Андрей5000Постоялецwww27 окт. 201722:02#1
Элементарно же. Находим центры и крутя начальную точку строим сеть
MrShoorУчастникwww27 окт. 201722:05#2
Андрей5000
> Элементарно же. Находим центры и крутя начальную точку строим сеть
Нет у меня крутилки. Есть барицентрические координаты в исходном треугольнике, которые получены после тесселяции этого самого треугольника:
tess2 | [Решено] Забуксовал на школьной математике

Правка: 27 окт. 2017 22:07

glasmПользовательwww27 окт. 201722:34#3
а если попробовать "отталкивать" точки от каждой вершины с силой, зависящей от длины интерполяции векторов, т.е. в вершинах сила будет 0, а если меньше радиуса, то, например,+(R-r)*k
потом суммировать результаты от каждой вершины

Правка: 27 окт. 2017 22:35

FordPerfectПостоялецwww27 окт. 201722:44#4
Вроде, например
Изображение

Решение не единственно.

Правка: исправлена формула.

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

FordPerfectПостоялецwww27 окт. 201722:46#5
Здесь Изображение - это поворот на π/2 против часовой стрелки.
Андрей5000Постоялецwww27 окт. 201722:52#6
MrShoor
> Нет у меня крутилки. Есть барицентрические координаты в исходном треугольнике,
> которые получены после тесселяции этого самого треугольника:
Тогда вся задача это пересечение луча с кругом
MrShoorУчастникwww27 окт. 201723:07#7
FordPerfect
> Вроде, например
А омега это что? Полярный угол вершины? Есть вывод этой штуки?

> Решение не единственно.
Это как?

FordPerfectПостоялецwww27 окт. 201723:13#8
MrShoor
>А омега это что?
Где там омега? π - это пи.

>Есть вывод этой штуки?
Да там вроде достаточно понятно, как оно.

>Это как?
Т. к.
>Внутри треугольника не обязательно сохранять это свойство.
внутри треугольника можно сделать произвольную фигню преобразовующую его сам в себя, и она тоже будет удовлетворять изначальной задаче.
Например [w0, w1 ,w2] -> [w0, w1^2, 1-w0-w1^2].

SDCПостоялецwww27 окт. 201723:15#9
MrShoor
А обязательно окружность? Может хватит синуса или параболы?

FordPerfectПостоялецwww27 окт. 201723:18#10
w - это барицентрические координаты.

Насчёт вывода.
w0*r0+w1*r1+w2*r2 - это тупо изначальный треугольник.
Соответственно 3 добавки - это сдвиг.
f - тупая геометрия в xy координатах.
(w0+w1) - это вес (0 в углу, 1 на прямой r0r1). Равен 1-w2.
(w1-w0) - это расстояние вдоль ребра в [-1,+1].

FordPerfectПостоялецwww27 окт. 201723:19#11
А, стоп я гоню. Там f неправильная. x и y в разном масштабе, и это эллипс, а не окружность.
FordPerfectПостоялецwww27 окт. 201723:32#12
Но её несложно починить.

Изображение

MrShoorУчастникwww27 окт. 201723:43#13
FordPerfect
> w - это барицентрические координаты.
А, вот её я за омегу принял, да.

FordPerfect
> Но её несложно починить.
Ок, ща попробую втупую подставить.

FordPerfectПостоялецwww28 окт. 20170:06#14
Ещё одна фигня: правильно будет 2*L=|r_i-r_j|.

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

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

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