transform.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1993 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  * This product includes software developed by the Computer Systems
  16.  * Engineering Group at Lawrence Berkeley Laboratory.
  17.  * 4. Neither the name of the University nor of the Laboratory may be used
  18.  *    to endorse or promote products derived from this software without
  19.  *    specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  * @(#) $Header: /cvsroot/nsnam/nam-1/transform.h,v 1.1.1.1 1997/06/16 22:40:29 mjh Exp $ (LBL)
  34.  *
  35.  * This code derived from InterViews library which is covered
  36.  * by the copyright below.
  37.  */
  38. /*
  39.  * Copyright (c) 1987, 1988, 1989, 1990, 1991 Stanford University
  40.  * Copyright (c) 1991 Silicon Graphics, Inc.
  41.  *
  42.  * Permission to use, copy, modify, distribute, and sell this software and 
  43.  * its documentation for any purpose is hereby granted without fee, provided
  44.  * that (i) the above copyright notices and this permission notice appear in
  45.  * all copies of the software and related documentation, and (ii) the names of
  46.  * Stanford and Silicon Graphics may not be used in any advertising or
  47.  * publicity relating to the software without the specific, prior written
  48.  * permission of Stanford and Silicon Graphics.
  49.  * 
  50.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  51.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  52.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  53.  *
  54.  * IN NO EVENT SHALL STANFORD OR SILICON GRAPHICS BE LIABLE FOR
  55.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  56.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  57.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  58.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  59.  * OF THIS SOFTWARE.
  60.  */
  61. #ifndef nam_transform_h
  62. #define nam_transform_h
  63. class Transform {
  64. public:
  65. Transform(); /* identity */
  66. Transform(const Transform&);
  67. Transform(const Transform*);
  68. Transform(float a00, float a01, float a10,
  69.   float a11, float a20, float a21);
  70. void clear();
  71. int identity() const;
  72. int invertible() const;
  73. int operator ==(const Transform&) const;
  74. int operator !=(const Transform&) const;
  75. Transform& operator =(const Transform&);
  76. void premultiply(const Transform&);
  77. void postmultiply(const Transform&);
  78. void invert();
  79. void translate(float dx, float dy);
  80. void scale(float sx, float sy);
  81. void rotate(float angle);
  82. void skew(float sx, float sy);
  83. void map(float& x, float& y) const;
  84. void map(float x, float y, float& tx, float& ty) const;
  85. inline void map(float x, float y, int& tx, int& ty) const {
  86. float fx, fy;
  87. map(x, y, fx, fy);
  88. tx = int(fx);
  89. ty = int(fy);
  90. }
  91. void imap(float& tx, float& ty) const;
  92. void imap(float tx, float ty, float& x, float& y) const;
  93. float det() const;
  94. private:
  95. int identity_;
  96. float mat00, mat01, mat10, mat11, mat20, mat21;
  97. void update();
  98. };
  99. inline float Transform::det() const { return mat00*mat11 - mat01*mat10; }
  100. inline int Transform::identity() const { return identity_; }
  101. inline int Transform::invertible() const { return det() != 0; }
  102. #endif