Home | History | Annotate | Download | only in utils
      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 "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