⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dmtxmatrix3.c

📁 Datamatrix二维码库和测试程序,运行于linux,仔细研究可以很容易转化成VC程序,有这就没必要化钱买个控件了,本人libdmtx-0.3版本转化过,的确可行,现在把找到该版本的libdmtx
💻 C
字号:
/*libdmtx - Data Matrix Encoding/Decoding LibraryCopyright (c) 2008 Mike LaughtonThis library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USAContact: mike@dragonflylogic.com*//* $Id: dmtxmatrix3.c 495 2008-11-06 22:10:06Z mblaughton $ *//** * @file dmtxmatrix3.c * @brief 2D Matrix (3x3) math *//** * @brief  Copy matrix contents * @param  m0 Copy target * @param  m1 Copy source * @return void */extern voiddmtxMatrix3Copy(DmtxMatrix3 m0, DmtxMatrix3 m1){   memcpy(m0, m1, sizeof(DmtxMatrix3));}/** * @brief  Generate identity transformation matrix * @param  m Generated matrix * @return void * *      | 1  0  0 | *  m = | 0  1  0 | *      | 0  0  1 | * *                  Transform "m" *            (doesn't change anything) *                       |\ *  (0,1)  x----o     +--+ \    (0,1)  x----o *         |    |     |     \          |    | *         |    |     |     /          |    | *         +----*     +--+ /           +----* *  (0,0)     (1,0)      |/     (0,0)     (1,0) * */extern voiddmtxMatrix3Identity(DmtxMatrix3 m){   static DmtxMatrix3 tmp = { {1, 0, 0},                              {0, 1, 0},                              {0, 0, 1} };   dmtxMatrix3Copy(m, tmp);}/** * @brief  Generate translate transformation matrix * @param  m Generated matrix * @param  tx * @param  ty * @return void * *      | 1  0  0 | *  m = | 0  1  0 | *      | tx ty 1 | * *                  Transform "m" *                      _____    (tx,1+ty)  x----o  (1+tx,1+ty) *                      \   |               |    | *  (0,1)  x----o       /   |      (0,1)  +-|--+ | *         |    |      /  /\|             | +----*  (1+tx,ty) *         |    |      \ /                |    | *         +----*       `                 +----+ *  (0,0)     (1,0)                (0,0)     (1,0) * */void dmtxMatrix3Translate(DmtxMatrix3 m, double tx, double ty){   dmtxMatrix3Identity(m);   m[2][0] = tx;   m[2][1] = ty;}/** * @brief  Generate rotate transformation * @param  m Generated matrix * @param  angle * @return void * *     |  cos(a)  sin(a)  0 | * m = | -sin(a)  cos(a)  0 | *     |  0       0       1 | *                                       o *                  Transform "m"      /   ` *                       ___         /       ` *  (0,1)  x----o      |/   \       x          *  (cos(a),sin(a)) *         |    |      '--   |       `        / *         |    |        ___/          `    /  a *         +----*                        `+  - - - - - - *  (0,0)     (1,0)                     (0,0) * */extern voiddmtxMatrix3Rotate(DmtxMatrix3 m, double angle){   double sinAngle, cosAngle;   sinAngle = sin(angle);   cosAngle = cos(angle);   dmtxMatrix3Identity(m);   m[0][0] = cosAngle;   m[0][1] = sinAngle;   m[1][0] = -sinAngle;   m[1][1] = cosAngle;}/** * @brief  Generate scale transformation matrix * @param  m Generated matrix * @param  sx * @param  sy * @return void * *     | sx 0  0 | * m = | 0  sy 0 | *     | 0  0  1 | * *                  Transform "m" *                      _____     (0,sy)  x-------o (sx,sy) *                      \   |             |       | *  (0,1)  x----o       /   |      (0,1)  +----+  | *         |    |      /  /\|             |    |  | *         |    |      \ /                |    |  | *         +----*       `                 +----+--* *  (0,0)     (1,0)                (0,0)            (sx,0) * */extern voiddmtxMatrix3Scale(DmtxMatrix3 m, double sx, double sy){   dmtxMatrix3Identity(m);   m[0][0] = sx;   m[1][1] = sy;}/** * @brief  Generate shear transformation matrix * @param  m Generated matrix * @param  shx * @param  shy * @return void * *     | 0    shy  0 | * m = | shx  0    0 | *     | 0    0    1 | */extern voiddmtxMatrix3Shear(DmtxMatrix3 m, double shx, double shy){   dmtxMatrix3Identity(m);   m[1][0] = shx;   m[0][1] = shy;}/** * @brief  Generate top line skew transformation * @param  m * @param  b0 * @param  b1 * @param  sz * @return void * *     | b1/b0    0    (b1-b0)/(sz*b0) | * m = |   0    sz/b0         0        | *     |   0      0           1        | * *     (sz,b1)  o *             /|    Transform "m" *            / | *           /  |        +--+ *          /   |        |  | * (0,b0)  x    |        |  | *         |    |      +-+  +-+ * (0,sz)  +----+       \    /    (0,sz)  x----o *         |    |        \  /             |    | *         |    |         \/              |    | *         +----+                         +----+ *  (0,0)    (sz,0)                (0,0)    (sz,0) * */extern voiddmtxMatrix3LineSkewTop(DmtxMatrix3 m, double b0, double b1, double sz){   assert(b0 >= DMTX_ALMOST_ZERO);   dmtxMatrix3Identity(m);   m[0][0] = b1/b0;   m[1][1] = sz/b0;   m[0][2] = (b1 - b0)/(sz*b0);}/** * @brief  Generate top line skew transformation (inverse) * @param  m * @param  b0 * @param  b1 * @param  sz * @return void */extern voiddmtxMatrix3LineSkewTopInv(DmtxMatrix3 m, double b0, double b1, double sz){   assert(b1 >= DMTX_ALMOST_ZERO);   dmtxMatrix3Identity(m);   m[0][0] = b0/b1;   m[1][1] = b0/sz;   m[0][2] = (b0 - b1)/(sz*b1);}/** * @brief  Generate side line skew transformation * @param  m * @param  b0 * @param  b1 * @param  sz * @return void */extern voiddmtxMatrix3LineSkewSide(DmtxMatrix3 m, double b0, double b1, double sz){   assert(b0 >= DMTX_ALMOST_ZERO);   dmtxMatrix3Identity(m);   m[0][0] = sz/b0;   m[1][1] = b1/b0;   m[1][2] = (b1 - b0)/(sz*b0);}/** * @brief  Generate side line skew transformation (inverse) * @param  m * @param  b0 * @param  b1 * @param  sz * @return void */extern voiddmtxMatrix3LineSkewSideInv(DmtxMatrix3 m, double b0, double b1, double sz){   assert(b1 >= DMTX_ALMOST_ZERO);   dmtxMatrix3Identity(m);   m[0][0] = b0/sz;   m[1][1] = b0/b1;   m[1][2] = (b0 - b1)/(sz*b1);}/** * @brief  Multiply two matrices to create a third * @param  mOut * @param  m0 * @param  m1 * @return void */extern voiddmtxMatrix3Multiply(DmtxMatrix3 mOut, DmtxMatrix3 m0, DmtxMatrix3 m1){   int i, j, k;   double val;   for(i = 0; i < 3; i++) {      for(j = 0; j < 3; j++) {         val = 0.0;         for(k = 0; k < 3; k++) {            val += m0[i][k] * m1[k][j];         }         mOut[i][j] = val;      }   }}/** * @brief  Multiply two matrices in place * @param  m0 * @param  m1 * @return void */extern voiddmtxMatrix3MultiplyBy(DmtxMatrix3 m0, DmtxMatrix3 m1){   DmtxMatrix3 mTmp;   dmtxMatrix3Copy(mTmp, m0);   dmtxMatrix3Multiply(m0, mTmp, m1);}/** * @brief  Multiply vector and matrix * @param  vOut Vector (output) * @param  vIn Vector (input) * @param  m Matrix to be multiplied * @return DMTX_SUCCESS | DMTX_FAILURE */extern intdmtxMatrix3VMultiply(DmtxVector2 *vOut, DmtxVector2 *vIn, DmtxMatrix3 m){   double w;   w = vIn->X*m[0][2] + vIn->Y*m[1][2] + m[2][2];   if(fabs(w) <= DMTX_ALMOST_ZERO) {      vOut->X = FLT_MAX;      vOut->Y = FLT_MAX;      return DMTX_FAILURE;   }   vOut->X = (vIn->X*m[0][0] + vIn->Y*m[1][0] + m[2][0])/w;   vOut->Y = (vIn->X*m[0][1] + vIn->Y*m[1][1] + m[2][1])/w;   return DMTX_SUCCESS;}/** * @brief  Multiply vector and matrix in place * @param  v Vector (input and output) * @param  m Matrix to be multiplied * @return DMTX_SUCCESS | DMTX_FAILURE */extern intdmtxMatrix3VMultiplyBy(DmtxVector2 *v, DmtxMatrix3 m){   int success;   DmtxVector2 vOut;   success = dmtxMatrix3VMultiply(&vOut, v, m);   *v = vOut;   return success;}/** * @brief  Print matrix contents to STDOUT * @param  m * @return void */extern voiddmtxMatrix3Print(DmtxMatrix3 m){   fprintf(stdout, "%8.8f\t%8.8f\t%8.8f\n", m[0][0], m[0][1], m[0][2]);   fprintf(stdout, "%8.8f\t%8.8f\t%8.8f\n", m[1][0], m[1][1], m[1][2]);   fprintf(stdout, "%8.8f\t%8.8f\t%8.8f\n", m[2][0], m[2][1], m[2][2]);   fprintf(stdout, "\n");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -