Я пытаюсь реализовать идеи из этой статьи для моделирования перелома:
http://graphics.berkeley.edu/papers/Obrien-GMA-1999-08/index.html
Я застрял в какой-то момент (по сути, страница 4 ...) и был бы очень признателен за любую помощь Часть, на которой я застрял, включает в себя деформацию тетраэдра (с использованием FEM).
У меня есть один тетраэдр, определяемый четырьмя узлами (каждый узел имеет положение x, y, z), в котором я вычисляю следующие матрицы из:
u: каждый столбец - это вектор, содержащий материальные координаты (x, y, z,
1) для каждого узла (итого 4 столбца) матрица 4х4
B: обратный (и), он называет это базисной матрицей, матрицей 4х4
P: каждый столбец - это вектор, содержащий координаты реального мира (x, y,
z) для каждого узла я устанавливаю P изначально равным u, так как объект
не деформируется в состоянии покоя, матрица 3х4
V: дают некоторые начальные скорости для (x, y, z) в каждом узле, так что 3x4
матрица
дельта: в основном единичная матрица, {{1, 0, 0}, {0, 1, 0}, {0, 0,
1}, {0, 0, 0}}
Я получаю x(u) = P*B*u
и v(u) = V*B*u
, но не уверен, где их использовать ...
Кроме того, я получаю dx = P*B*delta
и dv = V*B*delta
Я тогда получаю деформацию по тензору деформации Грина, epsilon = 1/2(dx+transpose(dx)) - Identity_3x3
А потом стресс, sigma = lambda*trace(epsilon)*Identity_3x3 + 2*mu*epsilon
Я получаю силу упругости по уравнению (24) на странице 4 статьи. Это просто большое суммирование.
Затем я использую явное интегрирование для обновления координат реального мира P. Идея состоит в том, что обновление скорости включает в себя силу на узле тетраэдра и, следовательно, влияет на положение координат реального мира, вызывая деформацию объекта.
Проблема, однако, в том, что сила невероятно мала ... что-то х 10 ^ -19 и т. Д. Итак, c ++ обычно округляется до 0. Я прошел вычисления и не могу понять, почему.
Я знаю, что я что-то здесь упускаю, просто не могу понять, что. Какое обновление я делаю неправильно?