Есть балка на опоре(в центре красная точка). Если на балке никого нет, она стоит ровно.
Но если персонаж(на рисунке это Х зеленая) стал на край балки, надо её правый конец опустить.
Как просчитывать силу равновесия и когда на какой-то край есть давление ?
Как я понимаю можно найти вектор между центром балки и позицией персонажа.
И если разница больше какой-то велечины, то герой находится на краю балки.
Значит к F1 либо к F2 надо прибавить массу персонажа.
Если у балки F1 не равен F2, то начать вращать балку в нужную сторону.
первое что надо, это для себя решить что балка сама по себе будет всегда в состоянии покоя или будет возвращаться в изначальную позицию (в данном случае горизонтальную). Если будет возвращаться в изначальную позицию, то значит на балку должны действовать ещё силы, которые возвращают её в это положение. И уже исходя из этого начинаешь учитывать вес человека (кстати, масса человека и его вес - это разные вещи).
ronniko
Просто сделай полноценный физический движок, а не вот эти полумеры.
А как у тебя тут нарисовано, то нужно считать и сравнивать моменты F*l. И из этого момента и момента инерции посчитать ускорение. Ещё нужно учесть момент от силы трения на оси/опоре балки, чтобы она не крутилась от каждой пушинки.
krkd
Просто сделай полноценный физический движок
Так же просто, как попасть монеткой с 20 этажа в стакан на земле :)
Я еще не готов к написанию полноценного физического движка. Маловато знаний.
Еще предстоит выучить нужное.
И поэтому начал с простого.
А как у тебя тут нарисовано, то нужно считать и сравнивать моменты F*l. И из этого момента и момента инерции посчитать ускорение
А подробнее и код для примера можно ?
Рассчитать где герой просто.
d = hero.ху - box.centr; if d> 0.5 с права герой. if d< -0.5 с лева герой.
так поймем какой F1 или F2 прибавить веса который есть у героя.
M = (сумма произведений весов предметов, находящихся на балке, на расстояния от предметов до центра балки с учётом знака)
if (abs(M) < k) M = 0
М момент силы
a = M / (m*l*l/12)
k коэффициент, чтобы балка не крутилась от малых масс
a угловое ускорение
m масса балки
l длина балки
на матрицу ориентации балки и после этого преобразуем в кватернион.
Полученный вектор преобразуем в кватернион, полученный кватернион нормализуем и переводчим в матрицу.
не обязательно кватернион нужен.
Есть у балки матрица3х3.
зная где герой, на левом краю балки или на правом.
делаем вращение влево или вправо.
Тупо еденичную матрицу умножаем на поворот по оси z на отрицательный или положительный коэффициент.
ronniko
> Маловато знаний
Знаний математики и физики... Так-то физ движок простой можно сделать по статьям суслика за месяц
Так-то физ движок простой можно сделать по статьям суслика за месяц
То-то я смотрю все берут булет,physX,Havok :)
Хехе на том и стоим
Знаем мы как учите по статьям.
Ивашка на метлу Юнити сел.
ronniko
>
> То-то я смотрю все берут булет,physX,Havok :)
Графические движки тоже берут готовые. Они посложнее бывают
Мне графический движок не нужен.
Пока свой устраивает.
А вот с физикой хочется разобраться и понять. Чтобы свою физику запилить.
Потому что разные физ-движки имеют неудобства и свои особенности, что не всегда удобно в использовании.
krkd
> Знаний математики и физики.
при том очевидных, не понимает, что кватернион нужен для накопления вращений, т.к. на балку может с разных сторон и несколько сил воздействовать, гипотетически бесконечно большое количество. И что ориентация вращения уже заключена в моменте
Суммируем веса влияющие на балку и получаем вектор направление силы.
Кватернион не нужен, если вращаем в одной или двух осях например по У и Z.
Ивашка у тебя движок твой опух от конвертаций матриц в кватернионы и обратно в матрицу :)
На полтора метра раздуло из-за конвертаций :)
Вот чем ты 9 лет занимался :)
Гонял матрицы в кватернионы.
Найди центр масс суммарного полигона, если он проходит через ось вращения, то предмет останется неподвижным, если промахнулся мимо, будет вращаться в ту сторону, где масса больше, относительно оси симметрии проведённой через ось вращения
Найди центр масс суммарного полигона
как это сделать по феншую ?
http://al-vo.ru/mekhanika/centr-tyazhesti.html
Что значит в статье F=a*b ?
F это что ? не force же. force это vec3. A F как float. F это площадь что-ли ?
Но для площади юзают вообщето S.
Площадь прямоугольника вычисляется по формуле S = a * b,
где S — площадь, a — длина прямоугольника, b — ширина прямоугольника.