libdmtx 0.7.8.7
libdmtx is a software library that enables programs to read and write Data Matrix barcodes of the modern ECC200 variety.
Loading...
Searching...
No Matches
dmtxmatrix3.c
Go to the documentation of this file.
1
17#include <assert.h>
18#include <float.h>
19#include <math.h>
20#include <stdio.h>
21#include <string.h>
22
23#include "dmtx.h"
24#include "dmtxstatic.h"
25
35{
36 memcpy(m0, m1, sizeof(DmtxMatrix3));
37}
38
57{
58 static DmtxMatrix3 tmp = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
59 dmtxMatrix3Copy(m, tmp);
60}
61
82void dmtxMatrix3Translate(OUT DmtxMatrix3 m, double tx, double ty)
83{
85 m[2][0] = tx;
86 m[2][1] = ty;
87}
88
107extern void dmtxMatrix3Rotate(OUT DmtxMatrix3 m, double angle)
108{
109 double sinAngle, cosAngle;
110
111 sinAngle = sin(angle);
112 cosAngle = cos(angle);
113
115 m[0][0] = cosAngle;
116 m[0][1] = sinAngle;
117 m[1][0] = -sinAngle;
118 m[1][1] = cosAngle;
119}
120
141extern void dmtxMatrix3Scale(OUT DmtxMatrix3 m, double sx, double sy)
142{
144 m[0][0] = sx;
145 m[1][1] = sy;
146}
147
164extern void dmtxMatrix3Shear(OUT DmtxMatrix3 m, double shx, double shy)
165{
167 m[1][0] = shx;
168 m[0][1] = shy;
169}
170
200extern void dmtxMatrix3LineSkewTop(OUT DmtxMatrix3 m, double b0, double b1, double sz)
201{
203
205 m[0][0] = b1 / b0;
206 m[1][1] = sz / b0;
207 m[0][2] = (b1 - b0) / (sz * b0);
208}
209
217extern void dmtxMatrix3LineSkewTopInv(OUT DmtxMatrix3 m, double b0, double b1, double sz)
218{
220
222 m[0][0] = b0 / b1;
223 m[1][1] = b0 / sz;
224 m[0][2] = (b0 - b1) / (sz * b1);
225}
226
234extern void dmtxMatrix3LineSkewSide(OUT DmtxMatrix3 m, double b0, double b1, double sz)
235{
237
239 m[0][0] = sz / b0;
240 m[1][1] = b1 / b0;
241 m[1][2] = (b1 - b0) / (sz * b0);
242}
243
251extern void dmtxMatrix3LineSkewSideInv(OUT DmtxMatrix3 m, double b0, double b1, double sz)
252{
254
256 m[0][0] = b0 / sz;
257 m[1][1] = b0 / b1;
258 m[1][2] = (b0 - b1) / (sz * b1);
259}
260
271{
272 int i, j, k;
273 double val;
274
275 for (i = 0; i < 3; i++) {
276 for (j = 0; j < 3; j++) {
277 val = 0.0;
278 for (k = 0; k < 3; k++) {
279 val += m0[i][k] * m1[k][j];
280 }
281 mOut[i][j] = val;
282 }
283 }
284}
285
295{
296 DmtxMatrix3 mTmp;
297
298 dmtxMatrix3Copy(mTmp, m0);
299 dmtxMatrix3Multiply(m0, mTmp, m1);
300}
301
313{
314 double w;
315
316 w = vIn->x * m[0][2] + vIn->y * m[1][2] + m[2][2];
317 if (fabs(w) <= DmtxAlmostZero) {
318 vOut->x = FLT_MAX;
319 vOut->y = FLT_MAX;
320 return DmtxFail;
321 }
322
323 vOut->x = (vIn->x * m[0][0] + vIn->y * m[1][0] + m[2][0]) / w;
324 vOut->y = (vIn->x * m[0][1] + vIn->y * m[1][1] + m[2][1]) / w;
325
326 return DmtxPass;
327}
328
339{
340 DmtxPassFail success;
341 DmtxVector2 vOut;
342
343 success = dmtxMatrix3VMultiply(&vOut, v, m);
344 *v = vOut;
345
346 return success;
347}
348
354{
355 dmtxLogInfo("%8.8f\t%8.8f\t%8.8f", m[0][0], m[0][1], m[0][2]);
356 dmtxLogInfo("%8.8f\t%8.8f\t%8.8f", m[1][0], m[1][1], m[1][2]);
357 dmtxLogInfo("%8.8f\t%8.8f\t%8.8f", m[2][0], m[2][1], m[2][2]);
358}
libdmtx - Data Matrix Encoding/Decoding Library Copyright 2008, 2009 Mike Laughton.
#define DmtxPassFail
Definition dmtx.h:42
double DmtxMatrix3[3][3]
DmtxMatrix3 类型定义,表示一个3x3的双精度浮点数矩阵
Definition dmtx.h:262
#define DmtxPass
Definition dmtx.h:43
#define INOUT
Definition dmtx.h:76
#define dmtxLogInfo(...)
Definition dmtx.h:69
#define DmtxFail
Definition dmtx.h:44
#define OUT
Definition dmtx.h:75
DmtxPassFail dmtxMatrix3VMultiply(OUT DmtxVector2 *vOut, DmtxVector2 *vIn, DmtxMatrix3 m)
将向量与矩阵相乘
void dmtxMatrix3LineSkewSide(OUT DmtxMatrix3 m, double b0, double b1, double sz)
Generate side line skew transformation.
void dmtxMatrix3Multiply(OUT DmtxMatrix3 mOut, DmtxMatrix3 m0, DmtxMatrix3 m1)
矩阵相乘
void dmtxMatrix3LineSkewTop(OUT DmtxMatrix3 m, double b0, double b1, double sz)
生成顶部线倾斜变换矩阵
void dmtxMatrix3Copy(OUT DmtxMatrix3 m0, DmtxMatrix3 m1)
复制3x3矩阵
Definition dmtxmatrix3.c:34
void dmtxMatrix3Rotate(OUT DmtxMatrix3 m, double angle)
生成旋转变换矩阵
DmtxPassFail dmtxMatrix3VMultiplyBy(INOUT DmtxVector2 *v, DmtxMatrix3 m)
将向量与矩阵相乘
void dmtxMatrix3Translate(OUT DmtxMatrix3 m, double tx, double ty)
生成平移变换矩阵
Definition dmtxmatrix3.c:82
void dmtxMatrix3Identity(OUT DmtxMatrix3 m)
生成单位变换矩阵
Definition dmtxmatrix3.c:56
void dmtxMatrix3LineSkewSideInv(OUT DmtxMatrix3 m, double b0, double b1, double sz)
Generate side line skew transformation (inverse)
void dmtxMatrix3Shear(OUT DmtxMatrix3 m, double shx, double shy)
生成剪切变换矩阵
void dmtxMatrix3Print(DmtxMatrix3 m)
Print matrix contents to STDOUT.
void dmtxMatrix3MultiplyBy(INOUT DmtxMatrix3 m0, DmtxMatrix3 m1)
矩阵相乘
void dmtxMatrix3Scale(OUT DmtxMatrix3 m, double sx, double sy)
生成缩放变换矩阵
void dmtxMatrix3LineSkewTopInv(OUT DmtxMatrix3 m, double b0, double b1, double sz)
Generate top line skew transformation (inverse)
libdmtx - Data Matrix Encoding/Decoding Library Copyright 2008, 2009 Mike Laughton.
#define DmtxAssert(expr)
Definition dmtxstatic.h:96
#define DmtxAlmostZero
Definition dmtxstatic.h:25
二维向量
Definition dmtx.h:277