Blender V5.0
eigenvalues.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2015 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#ifndef __EIGEN3_EIGENVALUES_C_API_CC__
6#define __EIGEN3_EIGENVALUES_C_API_CC__
7
8/* Eigen gives annoying huge amount of warnings here, silence them! */
9#if defined(__GNUC__) && !defined(__clang__)
10# pragma GCC diagnostic ignored "-Wlogical-op"
11#endif
12
13#include <Eigen/Core>
14#include <Eigen/Eigenvalues>
15
16#include "eigenvalues.h"
17
18using Eigen::SelfAdjointEigenSolver;
19
20using Eigen::Map;
21using Eigen::MatrixXf;
22using Eigen::VectorXf;
23
24using Eigen::Success;
25
27 const float *matrix,
28 float *r_eigen_values,
29 float *r_eigen_vectors)
30{
31 SelfAdjointEigenSolver<MatrixXf> eigen_solver;
32
33 /* Blender and Eigen matrices are both column-major. */
34 eigen_solver.compute(Map<MatrixXf>((float *)matrix, size, size));
35
36 if (eigen_solver.info() != Success) {
37 return false;
38 }
39
40 if (r_eigen_values) {
41 Map<VectorXf>(r_eigen_values, size) = eigen_solver.eigenvalues().transpose();
42 }
43
44 if (r_eigen_vectors) {
45 Map<MatrixXf>(r_eigen_vectors, size, size) = eigen_solver.eigenvectors();
46 }
47
48 return true;
49}
50
51#endif /* __EIGEN3_EIGENVALUES_C_API_CC__ */
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
bool EIG_self_adjoint_eigen_solve(const int size, const float *matrix, float *r_eigen_values, float *r_eigen_vectors)