1d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com/* 2d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com * Copyright 2014 Google Inc. 3d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com * 4d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com * Use of this source code is governed by a BSD-style license that can be 5d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com * found in the LICENSE file. 6d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com */ 7d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com 8d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com#include "SkMatrix.h" 92cfa3200fda29279eba1240170c7e873d12f9d48commit-bot@chromium.org#include "SkMatrix22.h" 10d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com#include "SkPoint.h" 11d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com#include "SkScalar.h" 12d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com 13d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.comvoid SkComputeGivensRotation(const SkVector& h, SkMatrix* G) { 14d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com const SkScalar& a = h.fX; 15d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com const SkScalar& b = h.fY; 16d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com SkScalar c, s; 17d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com if (0 == b) { 18d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com c = SkScalarCopySign(SK_Scalar1, a); 19d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com s = 0; 20d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com //r = SkScalarAbs(a); 21d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com } else if (0 == a) { 22d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com c = 0; 23d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com s = -SkScalarCopySign(SK_Scalar1, b); 24d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com //r = SkScalarAbs(b); 25d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com } else if (SkScalarAbs(b) > SkScalarAbs(a)) { 26d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com SkScalar t = a / b; 27d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com SkScalar u = SkScalarCopySign(SkScalarSqrt(SK_Scalar1 + t*t), b); 28d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com s = -SK_Scalar1 / u; 29d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com c = -s * t; 30d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com //r = b * u; 31d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com } else { 32d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com SkScalar t = b / a; 33d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com SkScalar u = SkScalarCopySign(SkScalarSqrt(SK_Scalar1 + t*t), a); 34d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com c = SK_Scalar1 / u; 35d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com s = -c * t; 36d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com //r = a * u; 37d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com } 38d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com 39d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com G->setSinCos(s, c); 40d3fbd34099a530b5415c95b1f2f8149ac417b9b3bungeman@google.com} 41