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

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

Advanced: Тема повышенной сложности или важная.
Страницы: 1 2 3 4 5 Следующая »
MrShoorУчастникwww28 окт. 20171:13#15
FordPerfect
triangles | [Решено] Забуксовал на школьной математике
Красный - что было, желтый - что стало.
Исходные данные:
static const float2 Coords[3] = {{-2,-2},{0,2},{2,-1}};
static const float  H[3] = {0.2, 0.01, 0.01};
На всякий случай код:
+ Показать

Но все равно спасибо за попытку. Буду дальше разбираться что к чему.

Правка: 28 окт. 2017 1:14

MrShoorУчастникwww28 окт. 20171:22#16
SDC
> А обязательно окружность? Может хватит синуса или параболы?
Не хватит. Дуга обязательна.
romgermanПостоялецwww28 окт. 20171:25#17
Нужно сферизовать треугольник?
MrShoorУчастникwww28 окт. 20171:33#18
romgerman
> Нужно сферизовать треугольник?
Нет, потому что сферизовать треугольник достаточно просто. Нужно что-то в духе треугольника Рело, но только не правильного, где каждая сторона может описывать свою дугу.

Правка: 28 окт. 2017 1:42

FordPerfectПостоялецwww28 окт. 20171:43#19
  float XX = (1.0 + h*h) / (2*h);
  return sqrt(abs(XX*XX - x*x)) - (1.0 - h*h)/(2*h);
Нужно же
L*L+h*h
L*L-h*h
FordPerfectПостоялецwww28 окт. 20171:48#20
float f(float2 pt1, float2 pt2, float h, float w1, float w2){
    float2 dir = pt2 - pt1;
    float L = length(dir) * 0.5;
    float x = (w2-w1) * L;
    float d = (L*L - h*h) / (2*h);
    float R = h + d;
    return sqrt(abs(R*R - x*x)) - d;
}
MrShoorУчастникwww28 окт. 20172:17#21
FordPerfect
> Нужно же
Да, чет я с нейсправленной версии прятянул этот 1 + h*h
Взял твой f, стало лучше, но все равно тянет пока не туда:
tess3 | [Решено] Забуксовал на школьной математике
MrShoorУчастникwww28 окт. 20172:27#22
А не туда тянет, потому что мы тянем вдоль нормали к грани.
А тянуть нужно по n = w1*(r1-r3) + w2*(r2-r3)
Но тогда надо пересчитать f. Щас займусь короче.
FordPerfectПостоялецwww28 окт. 20173:59#23
Да, заметил косяк.
Можно наверно с моей f, но переделать коэффициенты, чтобы на ребре влиял только один вклад.
122Постоялецwww28 окт. 201712:14#24
MrShoor
> Есть барицентрические координаты
Сорри что оффтоплю.
Но что такое барицентрические координаты? Гугл выдает определения но они не на человеческом языке.
MrShoorУчастникwww28 окт. 201713:39#25
122
> Но что такое барицентрические координаты? Гугл выдает определения но они не на
> человеческом языке.
Если совсем на пальцах - то веса внутри треугольника относительно каждой вершины.
Изображение
Вот тут эти веса хорошо показаны цветом. r g b по сути тут отражают каждую компоненту float3 барицентрических координат.

Правка: 28 окт. 2017 13:39

122Постоялецwww28 окт. 201713:43#26
MrShoor
А, спасибо. То есть по сути расстояние до каждой из вершин? И три таких числа и будут барицентрическими координатами?
Правка. Не, на картинке не просто расстояние. Оно отмасштабировано в зависимости от длины ребер треугольника.

Правка: 28 окт. 2017 13:46

MrShoorУчастникwww28 окт. 201713:47#27
122
> То есть по сути расстояние до каждой из вершин?
Не совсем. Это скорее 'нормализованное расстоние до проивополежащего ребра'

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

susagePПостоялецwww28 окт. 201715:27#28
У нас есть многогранник в данном случаи треугольник k=3.
F=2pi/k
Есть точка P. вычисляем для нее угол относительно угла многоугольника и центра получаем  L.
L` = L mod F
M = (sin(F-L`)+sin(L`))/sin(F)
и тогда  точка смещается в
P*R*M

Если вкратце то M - это насколько надо домножить расстояние от центра до грани чтобы оно стало единичным.

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

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

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

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

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