Lines Matching refs:eps
103 * @param eps Numerical tolerance
109 bool Affine::isIdentity(Coord eps) const {
110 return are_near(_c[0], 1.0, eps) && are_near(_c[1], 0.0, eps) &&
111 are_near(_c[2], 0.0, eps) && are_near(_c[3], 1.0, eps) &&
112 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
117 * @param eps Numerical tolerance
123 bool Affine::isTranslation(Coord eps) const {
124 return are_near(_c[0], 1.0, eps) && are_near(_c[1], 0.0, eps) &&
125 are_near(_c[2], 0.0, eps) && are_near(_c[3], 1.0, eps);
128 * @param eps Numerical tolerance
134 bool Affine::isNonzeroTranslation(Coord eps) const {
135 return are_near(_c[0], 1.0, eps) && are_near(_c[1], 0.0, eps) &&
136 are_near(_c[2], 0.0, eps) && are_near(_c[3], 1.0, eps) &&
137 (!are_near(_c[4], 0.0, eps) || !are_near(_c[5], 0.0, eps));
141 * @param eps Numerical tolerance
147 bool Affine::isScale(Coord eps) const {
148 if (isSingular(eps)) return false;
149 return are_near(_c[1], 0.0, eps) && are_near(_c[2], 0.0, eps) &&
150 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
154 * @param eps Numerical tolerance
160 bool Affine::isNonzeroScale(Coord eps) const {
161 if (isSingular(eps)) return false;
162 return (!are_near(_c[0], 1.0, eps) || !are_near(_c[3], 1.0, eps)) && //NOTE: these are the diags, and the next line opposite diags
163 are_near(_c[1], 0.0, eps) && are_near(_c[2], 0.0, eps) &&
164 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
168 * @param eps Numerical tolerance
174 bool Affine::isUniformScale(Coord eps) const {
175 if (isSingular(eps)) return false;
176 return are_near(fabs(_c[0]), fabs(_c[3]), eps) &&
177 are_near(_c[1], 0.0, eps) && are_near(_c[2], 0.0, eps) &&
178 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
182 * @param eps Numerical tolerance
189 bool Affine::isNonzeroUniformScale(Coord eps) const {
190 if (isSingular(eps)) return false;
193 return !(are_near(_c[0], 1.0, eps) && are_near(_c[3], 1.0, eps)) &&
194 are_near(fabs(_c[0]), fabs(_c[3]), eps) &&
195 are_near(_c[1], 0.0, eps) && are_near(_c[2], 0.0, eps) &&
196 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
200 * @param eps Numerical tolerance
206 bool Affine::isRotation(Coord eps) const {
207 return are_near(_c[0], _c[3], eps) && are_near(_c[1], -_c[2], eps) &&
208 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps) &&
209 are_near(_c[0]*_c[0] + _c[1]*_c[1], 1.0, eps);
213 * @param eps Numerical tolerance
219 bool Affine::isNonzeroRotation(Coord eps) const {
220 return !are_near(_c[0], 1.0, eps) &&
221 are_near(_c[0], _c[3], eps) && are_near(_c[1], -_c[2], eps) &&
222 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps) &&
223 are_near(_c[0]*_c[0] + _c[1]*_c[1], 1.0, eps);
227 * @param eps Numerical tolerance
233 bool Affine::isNonzeroNonpureRotation(Coord eps) const {
234 return !are_near(_c[0], 1.0, eps) &&
235 are_near(_c[0], _c[3], eps) && are_near(_c[1], -_c[2], eps) &&
236 are_near(_c[0]*_c[0] + _c[1]*_c[1], 1.0, eps);
250 * @param eps Numerical tolerance
256 bool Affine::isHShear(Coord eps) const {
257 return are_near(_c[0], 1.0, eps) && are_near(_c[1], 0.0, eps) &&
258 are_near(_c[3], 1.0, eps) && are_near(_c[4], 0.0, eps) &&
259 are_near(_c[5], 0.0, eps);
262 * @param eps Numerical tolerance
268 bool Affine::isNonzeroHShear(Coord eps) const {
269 return are_near(_c[0], 1.0, eps) && are_near(_c[1], 0.0, eps) &&
270 !are_near(_c[2], 0.0, eps) && are_near(_c[3], 1.0, eps) &&
271 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
275 * @param eps Numerical tolerance
281 bool Affine::isVShear(Coord eps) const {
282 return are_near(_c[0], 1.0, eps) && are_near(_c[2], 0.0, eps) &&
283 are_near(_c[3], 1.0, eps) && are_near(_c[4], 0.0, eps) &&
284 are_near(_c[5], 0.0, eps);
288 * @param eps Numerical tolerance
294 bool Affine::isNonzeroVShear(Coord eps) const {
295 return are_near(_c[0], 1.0, eps) && !are_near(_c[1], 0.0, eps) &&
296 are_near(_c[2], 0.0, eps) && are_near(_c[3], 1.0, eps) &&
297 are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
304 * @param eps Numerical tolerance
310 bool Affine::isZoom(Coord eps) const {
311 if (isSingular(eps)) return false;
312 return are_near(_c[0], _c[3], eps) && are_near(_c[1], 0, eps) && are_near(_c[2], 0, eps);
319 * @param eps Numerical tolerance
321 bool Affine::preservesArea(Coord eps) const
323 return are_near(descrim2(), 1.0, eps);
329 * @param eps Numerical tolerance
339 bool Affine::preservesAngles(Coord eps) const
341 if (isSingular(eps)) return false;
342 return (are_near(_c[0], _c[3], eps) && are_near(_c[1], -_c[2], eps)) ||
343 (are_near(_c[0], -_c[3], eps) && are_near(_c[1], _c[2], eps));
349 * @param eps Numerical tolerance
359 bool Affine::preservesDistances(Coord eps) const
361 return ((are_near(_c[0], _c[3], eps) && are_near(_c[1], -_c[2], eps)) ||
362 (are_near(_c[0], -_c[3], eps) && are_near(_c[1], _c[2], eps))) &&
363 are_near(_c[0] * _c[0] + _c[1] * _c[1], 1.0, eps);
375 * @param eps Numerical tolerance
377 bool Affine::isSingular(Coord eps) const {
378 return are_near(det(), 0.0, eps);
385 * @param eps Numerical tolerance
502 * @returns True if all entries of matrices are within eps of each other.
504 bool are_near(Affine const &a, Affine const &b, Coord eps)
506 return are_near(a[0], b[0], eps) && are_near(a[1], b[1], eps) &&
507 are_near(a[2], b[2], eps) && are_near(a[3], b[3], eps) &&
508 are_near(a[4], b[4], eps) && are_near(a[5], b[5], eps);