Chromium Code Reviews| Index: src/utils/SkMatrix22.cpp |
| =================================================================== |
| --- src/utils/SkMatrix22.cpp (revision 0) |
| +++ src/utils/SkMatrix22.cpp (working copy) |
| @@ -0,0 +1,37 @@ |
| +/* |
| + * Copyright 2014 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#include "SkMatrix.h" |
| +#include "SkPoint.h" |
| +#include "SkScalar.h" |
| + |
| +void Sk2x2Givens(SkVector h, SkMatrix* G) { |
| + const SkScalar& a = h.fX; |
| + const SkScalar& b = h.fY; |
| + SkScalar c, s; |
| + if (0 == b) { |
| + c = SkScalarCopySign(SK_Scalar1, a); |
| + s = 0; |
| + } else if (0 == a) { |
| + c = 0; |
| + s = -SkScalarCopySign(SK_Scalar1, b); |
| + } else if (SkScalarAbs(b) > SkScalarAbs(a)) { |
| + SkScalar t = a / b; |
| + SkScalar u = SkScalarCopySign(SkScalarSqrt(SK_Scalar1 + t*t), b); |
| + s = -SK_Scalar1 / u; |
| + c = -s * t; |
| + } else { |
| + SkScalar t = b / a; |
| + SkScalar u = SkScalarCopySign(SkScalarSqrt(SK_Scalar1 + t*t), a); |
| + c = SK_Scalar1 / u; |
| + s = -c * t; |
| + } |
| + |
| + G->setAll(c, -s, 0, |
|
reed1
2014/03/26 20:19:57
SkMatrix::setSinCos(-s, c)
bungeman-skia
2014/04/08 21:33:39
Done.
|
| + s, c, 0, |
| + 0, 0, SkScalarToPersp(SK_Scalar1)); |
| +} |