/** * @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 void dmtxMatrix3Shear(DmtxMatrix3 m, double shx, double shy) { dmtxMatrix3Identity(m); m[1][0] = shx; m[0][1] = shy; }
/** * @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 void dmtxMatrix3Scale(DmtxMatrix3 m, double sx, double sy) { dmtxMatrix3Identity(m); m[0][0] = sx; m[1][1] = sy; }
/** * \brief Initialize encode struct with default values * \return Initialized DmtxEncode struct */ extern DmtxEncode * dmtxEncodeCreate(void) { DmtxEncode *enc; enc = (DmtxEncode *)calloc(1, sizeof(DmtxEncode)); if(enc == NULL) return NULL; enc->scheme = DmtxSchemeAscii; enc->sizeIdxRequest = DmtxSymbolSquareAuto; enc->marginSize = 10; enc->moduleSize = 5; enc->pixelPacking = DmtxPack24bppRGB; enc->imageFlip = DmtxFlipNone; enc->rowPadBytes = 0; enc->fnc1 = DmtxUndefined; /* Initialize background color to white */ /* enc.region.gradient.ray.p.R = 255.0; enc.region.gradient.ray.p.G = 255.0; enc.region.gradient.ray.p.B = 255.0; */ /* Initialize foreground color to black */ /* enc.region.gradient.tMin = 0.0; enc.region.gradient.tMax = xyz; */ dmtxMatrix3Identity(enc->xfrm); return enc; }
/** * @brief Generate side line skew transformation (inverse) * @param m * @param b0 * @param b1 * @param sz * @return void */ extern void dmtxMatrix3LineSkewSideInv(DmtxMatrix3 m, double b0, double b1, double sz) { assert(b1 >= DmtxAlmostZero); dmtxMatrix3Identity(m); m[0][0] = b0/sz; m[1][1] = b0/b1; m[1][2] = (b0 - b1)/(sz*b1); }
/** * @brief Generate side line skew transformation * @param m * @param b0 * @param b1 * @param sz * @return void */ extern void dmtxMatrix3LineSkewSide(DmtxMatrix3 m, double b0, double b1, double sz) { assert(b0 >= DmtxAlmostZero); dmtxMatrix3Identity(m); m[0][0] = sz/b0; m[1][1] = b1/b0; m[1][2] = (b1 - b0)/(sz*b0); }
/** * @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 void dmtxMatrix3Rotate(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 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; }