29#define QUADRIC_FLT_TOT (sizeof(Quadric) / sizeof(double))
50static void quadric_to_tensor_m3(
const Quadric *q,
double m[3][3])
78 const double det = (q->
a2 * (q->
b2 * q->
c2 - q->
bc * q->
bc) -
82 if (
fabs(det) > epsilon) {
83 const double invdet = 1.0 / det;
85 m[0][0] = (q->
b2 * q->
c2 - q->
bc * q->
bc) * invdet;
86 m[1][0] = (q->
bc * q->
ac - q->
ab * q->
c2) * invdet;
87 m[2][0] = (q->
ab * q->
bc - q->
b2 * q->
ac) * invdet;
89 m[0][1] = (q->
ac * q->
bc - q->
ab * q->
c2) * invdet;
90 m[1][1] = (q->
a2 * q->
c2 - q->
ac * q->
ac) * invdet;
91 m[2][1] = (q->
ab * q->
ac - q->
a2 * q->
bc) * invdet;
93 m[0][2] = (q->
ab * q->
bc - q->
ac * q->
b2) * invdet;
94 m[1][2] = (q->
ac * q->
ab - q->
a2 * q->
bc) * invdet;
95 m[2][2] = (q->
a2 * q->
b2 - q->
ab * q->
ab) * invdet;
112 memset(q, 0,
sizeof(*q));
132 const double v00 =
v[0] *
v[0], v01 =
v[0] *
v[1], v02 =
v[0] *
v[2];
133 const double v11 =
v[1] *
v[1], v12 =
v[1] *
v[2];
134 const double v22 =
v[2] *
v[2];
135 return ((q->
a2 * v00) + (q->
ab * 2 * v01) + (q->
ac * 2 * v02) + (q->
ad * 2 *
v[0]) +
136 (q->
b2 * v11) + (q->
bc * 2 * v12) + (q->
bd * 2 *
v[1]) +
137 (q->
c2 * v22) + (q->
cd * 2 *
v[2]) +
void mul_m3_v3_db(const double M[3][3], double r[3])
void add_vn_vnvn_d(double *array_tar, const double *array_src_a, const double *array_src_b, int size)
MINLINE void negate_v3_db(double r[3])
void add_vn_vn_d(double *array_tar, const double *array_src, int size)
void mul_vn_db(double *array_tar, int size, double f)
ATTR_WARN_UNUSED_RESULT const BMVert * v
local_group_size(16, 16) .push_constant(Type b
ccl_device_inline float2 fabs(const float2 a)
void BLI_quadric_mul(Quadric *a, const double scalar)
bool BLI_quadric_optimize(const Quadric *q, double v[3], const double epsilon)
void BLI_quadric_from_plane(Quadric *q, const double v[4])
void BLI_quadric_to_vector_v3(const Quadric *q, double v[3])
static bool quadric_to_tensor_m3_inverse(const Quadric *q, double m[3][3], double epsilon)
double BLI_quadric_evaluate(const Quadric *q, const double v[3])
void BLI_quadric_add_qu_qu(Quadric *a, const Quadric *b)
void BLI_quadric_clear(Quadric *q)
void BLI_quadric_add_qu_ququ(Quadric *r, const Quadric *a, const Quadric *b)