columns(); // We want to ensure, that the matrix stays 3x3 if ( ( $this->columns !== $matrix->rows() ) && ( $this->rows !== $mColumns ) ) { throw new ezcGraphMatrixInvalidDimensionsException( $this->columns, $this->rows, $mColumns, $matrix->rows() ); } $result = parent::multiply( $matrix ); // The matrix dimensions stay the same, so that we can modify $this. for ( $i = 0; $i < $this->rows; ++$i ) { for ( $j = 0; $j < $mColumns; ++$j ) { $this->set( $i, $j, $result->get( $i, $j ) ); } } return $this; } /** * Transform a coordinate with the current transformation matrix. * * @param ezcGraphCoordinate $coordinate * @return ezcGraphCoordinate */ public function transformCoordinate( ezcGraphCoordinate $coordinate ) { $vector = new ezcGraphMatrix( 3, 1, array( array( $coordinate->x ), array( $coordinate->y ), array( 1 ) ) ); $vector = parent::multiply( $vector ); return new ezcGraphCoordinate( $vector->get( 0, 0 ), $vector->get( 1, 0 ) ); } } ?>