Code

update to latest 2geom. (eol-style fix needed enters at end of some files) 2geom...
[inkscape.git] / src / 2geom / sbasis-2d.cpp
1 #include "sbasis-2d.h"
3 namespace Geom{
5 SBasis extract_u(SBasis2d const &a, double u) {
6     SBasis sb;
7     double s = u*(1-u);
8     
9     for(unsigned vi = 0; vi < a.vs; vi++) {
10         double sk = 1;
11         Linear bo(0,0);
12         for(unsigned ui = 0; ui < a.us; ui++) {
13             bo += (extract_u(a.index(ui, vi), u))*sk;
14             sk *= s;
15         }
16         sb.push_back(bo);
17     }
18     
19     return sb;
20 }
22 SBasis extract_v(SBasis2d const &a, double v) {
23     SBasis sb;
24     double s = v*(1-v);
25     
26     for(unsigned ui = 0; ui < a.us; ui++) {
27         double sk = 1;
28         Linear bo(0,0);
29         for(unsigned vi = 0; vi < a.vs; vi++) {
30             bo += (extract_v(a.index(ui, vi), v))*sk;
31             sk *= s;
32         }
33         sb.push_back(bo);
34     }
35     
36     return sb;
37 }
39 SBasis compose(Linear2d const &a, D2<SBasis> const &p) {
40     D2<SBasis> omp(-p[X] + 1, -p[Y] + 1);
41     return multiply(omp[0], omp[1])*a[0] +
42            multiply(p[0], omp[1])*a[1] +
43            multiply(omp[0], p[1])*a[2] +
44            multiply(p[0], p[1])*a[3];
45 }
47 SBasis 
48 compose(SBasis2d const &fg, D2<SBasis> const &p) {
49     SBasis B;
50     SBasis s[2];
51     SBasis ss[2];
52     for(unsigned dim = 0; dim < 2; dim++) 
53         s[dim] = p[dim]*(Linear(1) - p[dim]);
54     ss[1] = Linear(1);
55     for(unsigned vi = 0; vi < fg.vs; vi++) {
56         ss[0] = ss[1];
57         for(unsigned ui = 0; ui < fg.us; ui++) {
58             unsigned i = ui + vi*fg.us;
59             B += ss[0]*compose(fg[i], p);
60             ss[0] *= s[0];
61         }
62         ss[1] *= s[1];
63     }
64     return B;
65 }
67 D2<SBasis>
68 compose_each(D2<SBasis2d> const &fg, D2<SBasis> const &p) {
69     return D2<SBasis>(compose(fg[X], p), compose(fg[Y], p));
70 }
72 };
74 /*
75   Local Variables:
76   mode:c++
77   c-file-style:"stroustrup"
78   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
79   indent-tabs-mode:nil
80   fill-column:99
81   End:
82 */
83 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :