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

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

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

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

MrShoorУчастникwww28 окт. 20170:33#15
FordPerfect
А R - это что в исправленной версии? Это радиус?

upd. А, кажется понял, там система R^2 - L^2 = d^2 и R - d = h. И R можно найти из d

Правка: 28 окт. 2017 0:38

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

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

FordPerfectПостоялецwww28 окт. 20171:43#20
  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#21
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#22
FordPerfect
> Нужно же
Да, чет я с нейсправленной версии прятянул этот 1 + h*h
Взял твой f, стало лучше, но все равно тянет пока не туда:
tess3 | [Решено] Забуксовал на школьной математике
MrShoorУчастникwww28 окт. 20172:27#23
А не туда тянет, потому что мы тянем вдоль нормали к грани.
А тянуть нужно по n = w1*(r1-r3) + w2*(r2-r3)
Но тогда надо пересчитать f. Щас займусь короче.
FordPerfectПостоялецwww28 окт. 20173:59#24
Да, заметил косяк.
Можно наверно с моей f, но переделать коэффициенты, чтобы на ребре влиял только один вклад.
122Постоялецwww28 окт. 201712:14#25
MrShoor
> Есть барицентрические координаты
Сорри что оффтоплю.
Но что такое барицентрические координаты? Гугл выдает определения но они не на человеческом языке.
MrShoorУчастникwww28 окт. 201713:39#26
122
> Но что такое барицентрические координаты? Гугл выдает определения но они не на
> человеческом языке.
Если совсем на пальцах - то веса внутри треугольника относительно каждой вершины.
Изображение
Вот тут эти веса хорошо показаны цветом. r g b по сути тут отражают каждую компоненту float3 барицентрических координат.

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

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

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

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

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

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

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

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

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

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