Matrix::transpose()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 8
rs 9.4285
cc 1
eloc 5
nc 1
nop 0
1
<?php
2
/**
3
 * Matrix.php
4
 *
5
 * PHP version 5.6+
6
 *
7
 * @author Philippe Gaultier <[email protected]>
8
 * @copyright 2010-2016 Philippe Gaultier
9
 * @license http://www.sweelix.net/license license
10
 * @version XXX
11
 * @link http://www.sweelix.net
12
 * @package sweelix\tree
13
 */
14
15
namespace sweelix\tree;
16
17
/**
18
 * Simple Matrix 2x2 tools
19
 *
20
 *  Matrix | a, b | is written in array [a, b, c, d]
21
 *         | c, d |
22
 *
23
 * @author Philippe Gaultier <[email protected]>
24
 * @copyright 2010-2016 Philippe Gaultier
25
 * @license http://www.sweelix.net/license license
26
 * @version XXX
27
 * @link http://www.sweelix.net
28
 * @package sweelix\tree
29
 * @since XXX
30
 */
31
class Matrix
32
{
33
    /**
34
     * @var number a11
35
     */
36
    public $a;
37
38
    /**
39
     * @var number a12
40
     */
41
    public $b;
42
43
    /**
44
     * @var number a21
45
     */
46
    public $c;
47
48
    /**
49
     * @var number a22
50
     */
51
    public $d;
52
53
    private $determinant;
0 ignored issues
show
Unused Code introduced by
The property $determinant is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
54
55
    /**
56
     * Matrix constructor.
57
     * @param array $data array must be in format [a, b, c, d]
58
     */
59
    public function __construct(array $data)
60
    {
61
        list($this->a, $this->b, $this->c, $this->d) = $data;
62
    }
63
64
    /**
65
     * @return number matrix determinant
66
     * @since XXX
67
     */
68
    public function getDeterminant()
69
    {
70
        return ($this->a * $this->d) - ($this->b * $this->c);
71
    }
72
73
    /**
74
     * @param Matrix|number $element element to multiply to the matrix
75
     * @since XXX
76
     */
77
    public function multiply($element)
78
    {
79
        if ($element instanceof Matrix) {
80
            $resultMatrix = [
81
                $this->a * $element->a + $this->b * $element->c,
82
                $this->a * $element->b + $this->b * $element->d,
83
                $this->c * $element->a + $this->d * $element->c,
84
                $this->c * $element->b + $this->d * $element->d,
85
            ];
86
            list($this->a, $this->b, $this->c, $this->d) = $resultMatrix;
87
        } else {
88
            $this->a *= $element;
89
            $this->b *= $element;
90
            $this->c *= $element;
91
            $this->d *= $element;
92
        }
93
    }
94
95
    /**
96
     * Transform matrix to its own adjugate
97
     * @since XXX
98
     */
99
    public function adjugate()
100
    {
101
        $resultMatrix = [
102
            $this->d, -1 * $this->b,
103
            -1 * $this->c, $this->a,
104
        ];
105
        list($this->a, $this->b, $this->c, $this->d) = $resultMatrix;
106
    }
107
108
    /**
109
     * Transform matrix to its own inverse
110
     * @since XXX
111
     */
112
    public function inverse()
113
    {
114
        $determinant = $this->getDeterminant();
115
        $this->adjugate();
116
        $this->multiply(1 / $determinant);
117
    }
118
119
    /**
120
     * Transpose matrix
121
     * @since XXX
122
     */
123
    public function transpose()
124
    {
125
        $resultMatrix = [
126
            $this->a, $this->c,
127
            $this->b, $this->d,
128
        ];
129
        list($this->a, $this->b, $this->c, $this->d) = $resultMatrix;
130
    }
131
132
    /**
133
     * Convert matrix to array
134
     * @return array
135
     * @since XXX
136
     */
137
    public function toArray()
138
    {
139
        return [
140
            $this->a, $this->b,
141
            $this->c, $this->d,
142
        ];
143
    }
144
}