1
unit LUX.Curve.BSpline.D2;
11
LUX.Curve, LUX.Curve.BSpline;
13
function BSpline4(const X_, Y_: Single): Single; overload;
14
function BSpline4(const X_, Y_: Double): Double; overload;
15
function BSpline4(const X_, Y_: TdSingle): TdSingle; overload;
16
function BSpline4(const X_, Y_: TdDouble): TdDouble; overload;
18
procedure BSplin4(const T_: TSingle2D; out Ws_: TSingleM4); overload;
19
procedure BSplin4(const T_: TDouble2D; out Ws_: TDoubleM4); overload;
20
procedure BSplin4(const T_: TdSingle2D; out Ws_: TdSingleM4); overload;
21
procedure BSplin4(const T_: TdDouble2D; out Ws_: TdDoubleM4); overload;
23
function BSplin4(const Ps_: TSingleM4; const T_: TSingle2D): Single; overload;
24
function BSplin4(const Ps_: TDoubleM4; const T_: TDouble2D): Double; overload;
25
function BSplin4(const Ps_: TdSingleM4; const T_: TdSingle2D)
27
function BSplin4(const Ps_: TdDoubleM4; const T_: TdDouble2D)
32
function BSpline4(const X_, Y_: Single): Single;
34
Result := BSpline4(Y_) * BSpline4(X_);
37
function BSpline4(const X_, Y_: Double): Double;
39
Result := BSpline4(Y_) * BSpline4(X_);
42
function BSpline4(const X_, Y_: TdSingle): TdSingle;
44
Result := BSpline4(Y_) * BSpline4(X_);
47
function BSpline4(const X_, Y_: TdDouble): TdDouble;
49
Result := BSpline4(Y_) * BSpline4(X_);
52
// ------------------------------------------------------------------------------
54
procedure BSplin4(const T_: TSingle2D; out Ws_: TSingleM4);
82
procedure BSplin4(const T_: TDouble2D; out Ws_: TDoubleM4);
100
_32 := WY._3 * WX._2;
101
_33 := WY._3 * WX._3;
102
_34 := WY._3 * WX._4;
103
_41 := WY._4 * WX._1;
104
_42 := WY._4 * WX._2;
105
_43 := WY._4 * WX._3;
106
_44 := WY._4 * WX._4;
110
procedure BSplin4(const T_: TdSingle2D; out Ws_: TdSingleM4);
119
_11 := WY._1 * WX._1;
120
_12 := WY._1 * WX._2;
121
_13 := WY._1 * WX._3;
122
_14 := WY._1 * WX._4;
123
_21 := WY._2 * WX._1;
124
_22 := WY._2 * WX._2;
125
_23 := WY._2 * WX._3;
126
_24 := WY._2 * WX._4;
127
_31 := WY._3 * WX._1;
128
_32 := WY._3 * WX._2;
129
_33 := WY._3 * WX._3;
130
_34 := WY._3 * WX._4;
131
_41 := WY._4 * WX._1;
132
_42 := WY._4 * WX._2;
133
_43 := WY._4 * WX._3;
134
_44 := WY._4 * WX._4;
138
procedure BSplin4(const T_: TdDouble2D; out Ws_: TdDoubleM4);
147
_11 := WY._1 * WX._1;
148
_12 := WY._1 * WX._2;
149
_13 := WY._1 * WX._3;
150
_14 := WY._1 * WX._4;
151
_21 := WY._2 * WX._1;
152
_22 := WY._2 * WX._2;
153
_23 := WY._2 * WX._3;
154
_24 := WY._2 * WX._4;
155
_31 := WY._3 * WX._1;
156
_32 := WY._3 * WX._2;
157
_33 := WY._3 * WX._3;
158
_34 := WY._3 * WX._4;
159
_41 := WY._4 * WX._1;
160
_42 := WY._4 * WX._2;
161
_43 := WY._4 * WX._3;
162
_44 := WY._4 * WX._4;
166
// ------------------------------------------------------------------------------
168
function BSplin4(const Ps_: TSingleM4; const T_: TSingle2D): Single;
171
P1, P2, P3, P4: Single;
178
P1 := _1 * Ps_._11 + _2 * Ps_._12 + _3 * Ps_._13 + _4 * Ps_._14;
179
P2 := _1 * Ps_._21 + _2 * Ps_._22 + _3 * Ps_._23 + _4 * Ps_._24;
180
P3 := _1 * Ps_._31 + _2 * Ps_._32 + _3 * Ps_._33 + _4 * Ps_._34;
181
P4 := _1 * Ps_._41 + _2 * Ps_._42 + _3 * Ps_._43 + _4 * Ps_._44;
186
Result := _1 * P1 + _2 * P2 + _3 * P3 + _4 * P4;
190
function BSplin4(const Ps_: TDoubleM4; const T_: TDouble2D): Double;
193
P1, P2, P3, P4: Double;
200
P1 := _1 * Ps_._11 + _2 * Ps_._12 + _3 * Ps_._13 + _4 * Ps_._14;
201
P2 := _1 * Ps_._21 + _2 * Ps_._22 + _3 * Ps_._23 + _4 * Ps_._24;
202
P3 := _1 * Ps_._31 + _2 * Ps_._32 + _3 * Ps_._33 + _4 * Ps_._34;
203
P4 := _1 * Ps_._41 + _2 * Ps_._42 + _3 * Ps_._43 + _4 * Ps_._44;
208
Result := _1 * P1 + _2 * P2 + _3 * P3 + _4 * P4;
212
function BSplin4(const Ps_: TdSingleM4; const T_: TdSingle2D): TdSingle;
215
P1, P2, P3, P4: TdSingle;
222
P1 := _1 * Ps_._11 + _2 * Ps_._12 + _3 * Ps_._13 + _4 * Ps_._14;
223
P2 := _1 * Ps_._21 + _2 * Ps_._22 + _3 * Ps_._23 + _4 * Ps_._24;
224
P3 := _1 * Ps_._31 + _2 * Ps_._32 + _3 * Ps_._33 + _4 * Ps_._34;
225
P4 := _1 * Ps_._41 + _2 * Ps_._42 + _3 * Ps_._43 + _4 * Ps_._44;
230
Result := _1 * P1 + _2 * P2 + _3 * P3 + _4 * P4;
234
function BSplin4(const Ps_: TdDoubleM4; const T_: TdDouble2D): TdDouble;
237
P1, P2, P3, P4: TdDouble;
244
P1 := _1 * Ps_._11 + _2 * Ps_._12 + _3 * Ps_._13 + _4 * Ps_._14;
245
P2 := _1 * Ps_._21 + _2 * Ps_._22 + _3 * Ps_._23 + _4 * Ps_._24;
246
P3 := _1 * Ps_._31 + _2 * Ps_._32 + _3 * Ps_._33 + _4 * Ps_._34;
247
P4 := _1 * Ps_._41 + _2 * Ps_._42 + _3 * Ps_._43 + _4 * Ps_._44;
252
Result := _1 * P1 + _2 * P2 + _3 * P3 + _4 * P4;