官术网_书友最值得收藏!

  • Game Physics Cookbook
  • Gabor Szauer
  • 358字
  • 2021-04-02 20:27:28

Cofactor

To get a cofactor of matrix, you first need to find the matrix of minor for that matrix. Given matrix M, find the cofactor of element Cofactor and multiply the minor of that element by -1 raised to the Cofactor power:

Cofactor

Getting ready

We're going to create a generic function that will find the matrix of cofactors for any sized matrix, given the matrix of minors. We're going to call this generic Cofactor function from more specific Cofactor functions for 2 X 2 and 3 X 3 matrices.

How to do it…

Follow these steps to implement a generic cofactor function which will work on matrices of any size. We will use this generic function to implement the specific two and three dimensional square matrix cofactor functions:

  1. Declare all versions of the Cofactor function in matrices.h:
    void Cofactor(float* out, const float* minor, 
       int rows, int cols);
    mat3 Cofactor(const mat3& mat);
    mat2 Cofactor(const mat2& mat);
  2. Implement the generic Cofactor function in matrices.cpp:
    void Cofactor(float* out, const float* minor, 
    int rows, int cols) {
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
               int t = cols * j + i; // Target index
               int s = cols * j + i; // Source index
               float sign = powf(-1.0f, i + j); // + or –
               out[t] = minor[s] * sign;
            }
        }
    }
  3. Implement the 2 X 2 and 3 X 3 Cofactor function in matrices.cpp. These functions just call the generic Cofactor function with the proper arguments:
    mat2 Cofactor(const mat2& mat) {
        mat2 result;
        Cofactor(result.asArray, Minor(mat).asArray, 2, 2);
        return result;
    }
    
    mat3 Cofactor(const mat3& mat) {
        mat3 result;
        Cofactor(result.asArray, Minor(mat).asArray, 3, 3);
        return result;
    }

How it works…

If we calculate the value of How it works… for every element of a matrix, you will notice it creates a checkered pattern. This is because a negative number to an even power results in a positive number, where a negative number to an odd power remains negative:

How it works…

An easy way to remember how to calculate the cofactor matrix is to apply this checkered positive/negative pattern to the matrix of minors.

主站蜘蛛池模板: 咸阳市| 闽侯县| 洪雅县| 濉溪县| 浏阳市| 班戈县| 泸定县| 太仆寺旗| 乌苏市| 健康| 泸定县| 定日县| 辽阳市| 额敏县| 红安县| 徐汇区| 德令哈市| 麻城市| 二连浩特市| 崇仁县| 松阳县| 龙江县| 金川县| 河曲县| 清水河县| 兴文县| 绿春县| 句容市| 益阳市| 长白| 沂南县| 墨竹工卡县| 江西省| 类乌齐县| 二连浩特市| 电白县| 阳城县| 新巴尔虎左旗| 邓州市| 巴东县| 乐清市|