-LY_DEFINE(ly_solve_spring_rod_problem, "ly:solve-spring-rod-problem",
- 4, 1, 0, (SCM springs, SCM rods, SCM length, SCM ragged),
- "Solve a spring and rod problem for @var{count} objects, that "
- "are connected by @var{count-1} springs, and an arbitrary number of rods "
- "Springs have the format (ideal, hooke) and rods (idx1, idx2, distance) "
- "@var{length} is a number, @var{ragged} a boolean "
- "Return: a list containing the force (positive for stretching, "
- "negative for compressing and #f for non-satisfied constraints) "
- "followed by the @var{spring-count}+1 positions of the objects. "
- )
-{
- int len = scm_ilength (springs);
- if (len == 0)
- return scm_list_2 (scm_from_double (0.0), scm_from_double (0.0));
-
- SCM_ASSERT_TYPE (len >= 0, springs, SCM_ARG1, __FUNCTION__, "list of springs");
- SCM_ASSERT_TYPE (scm_ilength (rods) >= 0, rods, SCM_ARG2, __FUNCTION__, "list of rods");
- SCM_ASSERT_TYPE (scm_is_number (length) || length == SCM_BOOL_F,
- length, SCM_ARG3, __FUNCTION__, "number or #f");