1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkMatrix22_DEFINED 9 #define SkMatrix22_DEFINED 10 11 #include "include/core/SkPoint.h" 12 13 class SkMatrix; 14 15 /** Find the Givens matrix G, which is the rotational matrix 16 * that rotates the vector h to the positive hoizontal axis. 17 * G * h = [hypot(h), 0] 18 * 19 * This is equivalent to 20 * 21 * SkScalar r = h.length(); 22 * SkScalar r_inv = r ? SkScalarInvert(r) : 0; 23 * h.scale(r_inv); 24 * G->setSinCos(-h.fY, h.fX); 25 * 26 * but has better numerical stability by using (partial) hypot, 27 * and saves a multiply by not computing r. 28 */ 29 void SkComputeGivensRotation(const SkVector& h, SkMatrix* G); 30 31 #endif 32