20 |
|
#define TOLERANCE 1e-13 |
21 |
|
#define ZERO(x) ((x)<TOLERANCE && (x)>-TOLERANCE) |
22 |
|
|
23 |
< |
#define X(i) quad[i][0] /* quadrilateral x and y */ |
24 |
< |
#define Y(i) quad[i][1] |
23 |
> |
#define X(i) qdrl[i][0] /* quadrilateral x and y */ |
24 |
> |
#define Y(i) qdrl[i][1] |
25 |
|
|
26 |
|
/* |
27 |
|
* pmap_quad_rect: find mapping between quadrilateral and rectangle. |
28 |
|
* The correspondence is: |
29 |
|
* |
30 |
< |
* quad[0] --> (u0,v0) |
31 |
< |
* quad[1] --> (u1,v0) |
32 |
< |
* quad[2] --> (u1,v1) |
33 |
< |
* quad[3] --> (u0,v1) |
30 |
> |
* qdrl[0] --> (u0,v0) |
31 |
> |
* qdrl[1] --> (u1,v0) |
32 |
> |
* qdrl[2] --> (u1,v1) |
33 |
> |
* qdrl[3] --> (u0,v1) |
34 |
|
* |
35 |
|
* This method of computing the adjoint numerically is cheaper than |
36 |
|
* computing it symbolically. |
37 |
|
*/ |
38 |
|
|
39 |
< |
pmap_quad_rect(u0, v0, u1, v1, quad, QR) |
39 |
> |
pmap_quad_rect(u0, v0, u1, v1, qdrl, QR) |
40 |
|
double u0, v0, u1, v1; /* bounds of rectangle */ |
41 |
< |
double quad[4][2]; /* vertices of quadrilateral */ |
42 |
< |
double QR[3][3]; /* quad->rect transform (returned) */ |
41 |
> |
double qdrl[4][2]; /* vertices of quadrilateral */ |
42 |
> |
double QR[3][3]; /* qdrl->rect transform (returned) */ |
43 |
|
{ |
44 |
|
int ret; |
45 |
|
double du, dv; |
46 |
< |
double RQ[3][3]; /* rect->quad transform */ |
46 |
> |
double RQ[3][3]; /* rect->qdrl transform */ |
47 |
|
|
48 |
|
du = u1-u0; |
49 |
|
dv = v1-v0; |
53 |
|
} |
54 |
|
|
55 |
|
/* first find mapping from unit uv square to xy quadrilateral */ |
56 |
< |
ret = pmap_square_quad(quad, RQ); |
56 |
> |
ret = pmap_square_quad(qdrl, RQ); |
57 |
|
if (ret==PMAP_BAD) return PMAP_BAD; |
58 |
|
|
59 |
|
/* concatenate transform from uv rectangle (u0,v0,u1,v1) to unit square */ |
78 |
|
* pmap_square_quad: find mapping between unit square and quadrilateral. |
79 |
|
* The correspondence is: |
80 |
|
* |
81 |
< |
* (0,0) --> quad[0] |
82 |
< |
* (1,0) --> quad[1] |
83 |
< |
* (1,1) --> quad[2] |
84 |
< |
* (0,1) --> quad[3] |
81 |
> |
* (0,0) --> qdrl[0] |
82 |
> |
* (1,0) --> qdrl[1] |
83 |
> |
* (1,1) --> qdrl[2] |
84 |
> |
* (0,1) --> qdrl[3] |
85 |
|
*/ |
86 |
|
|
87 |
< |
pmap_square_quad(quad, SQ) |
88 |
< |
register double quad[4][2]; /* vertices of quadrilateral */ |
89 |
< |
register double SQ[3][3]; /* square->quad transform */ |
87 |
> |
pmap_square_quad(qdrl, SQ) |
88 |
> |
register double qdrl[4][2]; /* vertices of quadrilateral */ |
89 |
> |
register double SQ[3][3]; /* square->qdrl transform */ |
90 |
|
{ |
91 |
|
double px, py; |
92 |
|
|