61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
/*
|
|
Copyright 2018 The pdfcpu Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package pdfcpu
|
|
|
|
import "fmt"
|
|
|
|
type matrix [3][3]float64
|
|
|
|
var identMatrix = matrix{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}
|
|
|
|
func (m matrix) multiply(n matrix) matrix {
|
|
var p matrix
|
|
for i := 0; i < 3; i++ {
|
|
for j := 0; j < 3; j++ {
|
|
for k := 0; k < 3; k++ {
|
|
p[i][j] += m[i][k] * n[k][j]
|
|
}
|
|
}
|
|
}
|
|
return p
|
|
}
|
|
|
|
func (m matrix) String() string {
|
|
return fmt.Sprintf("%3.2f %3.2f %3.2f\n%3.2f %3.2f %3.2f\n%3.2f %3.2f %3.2f\n",
|
|
m[0][0], m[0][1], m[0][2],
|
|
m[1][0], m[1][1], m[1][2],
|
|
m[2][0], m[2][1], m[2][2])
|
|
}
|
|
|
|
func calcTransformMatrix(sx, sy, sin, cos, dx, dy float64) matrix {
|
|
// Scale
|
|
m1 := identMatrix
|
|
m1[0][0] = sx
|
|
m1[1][1] = sy
|
|
// Rotate
|
|
m2 := identMatrix
|
|
m2[0][0] = cos
|
|
m2[0][1] = sin
|
|
m2[1][0] = -sin
|
|
m2[1][1] = cos
|
|
// Translate
|
|
m3 := identMatrix
|
|
m3[2][0] = dx
|
|
m3[2][1] = dy
|
|
return m1.multiply(m2).multiply(m3)
|
|
}
|