Date:2012-03-20 23:02:50 (11 years 11 months ago)
Author:Werner Almesberger
Commit:d79424d9ae932a4dcc9ba0434b42383c6e0bc89c
Message:cameo/area.c: move equation solving from "intersect", for future sharing

Files: cameo/area.c (2 diffs)

Change Details

cameo/area.c
8484/*
8585 * Solve
8686 *
87 * ax+by = e
88 * cx+dy = f
89 *
90 * with Cramer's rule:
91 * http://en.wikipedia.org/wiki/Cramer's_rule
92 */
93
94static int cramer2(double a, double b, double c, double d, double e, double f,
95    double *x, double *y)
96{
97    double det;
98
99    det = a*d-b*c;
100    if (fabs(det) < EPSILON)
101        return 0;
102    *x = (e*d-b*f)/det;
103    *y = (a*f-e*c)/det;
104    return 1;
105}
106
107
108/*
109 * Solve
87110 * ax+na*bx = cx+nb*dx
88111 * ay+na*by = cy+nb*dy
89112 *
...... 
91114 *
92115 * na*bx + nb*-dx = cx-ax
93116 * na*by + nb*-dy = cy-ay
94 *
95 * which we the solve with Cramer's rule:
96 * http://en.wikipedia.org/wiki/Cramer's_rule
97117 */
98118
99119static int intersect(double ax, double ay, double bx, double by,
100120    double cx, double cy, double dx, double dy, double *na, double *nb)
101121{
102    double det;
103
104    det = dx*by-bx*dy;
105    if (fabs(det) < EPSILON)
106        return 0;
107
108    *na = (dx*(cy-ay)-dy*(cx-ax))/det;
109    *nb = (bx*(cy-ay)-by*(cx-ax))/det;
110    return 1;
122    return cramer2(bx, -dx, by, -dy, cx-ax, cy-ay, na, nb);
111123}
112124
113125

Archive Download the corresponding diff file

Branches:
master



interactive