%-----------------------------------------------------------------% %----Tensor product toolbox---------------------------------------% %-----------------------------------------------------------------% DEF UDOMAIN=(INTERVALS:1:16); DEF UVDOMAIN=(INTERVALS:1:16)*(INTERVALS:1:16); DEF ConstFunTensor = IF:; DEF TensorInnerProd = InnerProd ~ AA:FlatTensor ; DEF FlatTensor = IF: ; DEF TensorProd = AA:DistlTerm ~ DISTR; DEF DistlTerm = IF:; DEF FunProd (f,g::IsFun) = f ~ [S1] * g ~ TAIL; DEF myTensorProdSurface (uBasis,vBasis::IsSeq)(ControlPoints::IsMatOf:IsPoint) = (AA:TensorInnerProd ~ DISTL): < BivariateBasis, AA:ConstFunTensor:CoordTensors > WHERE CoordTensors = (TRANS~AA:TRANS):controlPoints, BivariateBasis = TensorProd:< uBasis, vBasis > END; %-----------------------------------------------------------------% %----Bilinear --------------------------------% %-----------------------------------------------------------------% DEF myBilinearSurface (ControlPoints::IsMatOf:IsPoint) = TensorProdSurface:< BernsteinBasis:S1:1, BernsteinBasis:S1:1>:ControlPoints; DEF OUT=STRUCT:,<1,1,0>>,<<0,1,1>,<1,1,1>>>):UVDOMAIN, MKFRAME>; DEF OUT=STRUCT:,<1,1,0>>,<<1,0,1>,<1,1,1>>>):UVDOMAIN, MKFRAME>; %-----------------------------------------------------------------% %----Biquadratic surface generator--------------------------------% %-----------------------------------------------------------------% DEF myBiquadraticSurface (ControlPoints::IsMatOf:IsPoint) = TensorProdSurface:< Basis, Basis >:ControlPoints WHERE Basis = < u2, u1, u0 >, u2 = (k:2 * uu) - (K:3 * u) + K:1, u1 = (k:4 * u) - (k:4 * uu), u0 = (k:2 * uu) - u, uu = u * u, u = s1 END; DEF Mapping = myBiquadraticSurface:< <<0,0,1>, <1,0,0>,<2,0,1>>, <<0,1,-1>, <1,1,0>,<2,1,2>>, <<0,2,0>, <1,2,1>,<2,2,0>> >; DEF out = STRUCT:; DEF Mapping = myBiquadraticSurface:< <<0,0,1>, <1,0,0>,<2,0,1>>, <<0,1,0.5>, <1,1,0.5>,<2,1,0.5>>, <<0,2,0>, <1,2,1>,<2,2,0>> >; DEF out = STRUCT:; DEF Mapping = BiquadraticSurface:< <<0,0,0>, <2,0,1>,<3,1,1>>, <<1,3,-1>,<3,2,0>,<4,2,0>>, <<0,9,0>, <2,5,1>,<3,3,2>> >; DEF out = MAP:Mapping:(Intervals:1:10 * Intervals:1:10); %-----------------------------------------------------------------% %---Bicubic Hermite surface generator-----------------------------% %-----------------------------------------------------------------% DEF HermiteSurface (ControlPoints::IsMatOf:IsPoint) = TensorProdSurface:< HermiteBasis:S1, HermiteBasis:S1 >:ControlPoints; DEF Mapping1 = HermiteSurface: < <<0,0,0>, <1,0,0>, <0,0,1>, <0,0,-1>>, <<0,1,0>, <1,1,0>, <0,0,-1>,<0,0,1>>, <<0,0,1>, <0,0,-1>,<0,0,1>, <0,0,-1>>, <<0,0,-1>,<0,0,1>, <0,0,-1>, <0,0,1>> >; DEF out1 = STRUCT:; DEF Mapping2 = HermiteSurface: < <<0,0,0>, <1,0,0>, <0,0,1>, <0,0,-1>>, <<0,1,0>, <1,1,0>, <0,0,-1>,<0,0,1>>, <<0,0,1>, <0,0,-1>,<1,1,0>, <-1,1,0>>, <<0,0,-1>,<0,0,1>, <1,-1,0>, <-1,-1,0>> >; DEF out2 = STRUCT:; DEF Mapping3 = HermiteSurface: < <<0,0,0>, <1,0,0>, <0,0,1>, <0,0,-1>>, <<0,1,0>, <1,1,0>, <0,0,-1>,<0,0,1>>, <<0,0,1>, <0,0,-1>,<0,0,-1>, <0,0,1>>, <<0,0,-1>,<0,0,1>, <0,0,1>, <0,0,-1>> >; DEF out3 = STRUCT:; CLASS MATERIAL_T(color::IsRGBColor) ISA BASEMATERIAL =; DEF out=STRUCT:; DEF Mapping = HermiteSurface: < <<0,0,0>, <2,0,1>, <3,1,1>, <4,1,1>>, <<1,3,-1>,<3,2,0>, <4,2,0>, <4,2,0>>, <<0,4,0>, <2,4,1>, <3,3,2>, <5,3,2>>, <<0,6,0>, <2,5,1>, <3,4,1>, <4,4,0>> >; DEF out = MAP:Mapping:(Intervals:1:10 * Intervals:1:10); %-----------------------------------------------------------------% %----Bezier surface generator (arbitrary degrees)-----------------% %-----------------------------------------------------------------% DEF BezierSurface (ControlPoints::IsMatOf:IsPoint) = TensorProdSurface: < BernsteinBasis:S1:m, BernsteinBasis:S1:n >:ControlPoints WHERE m = LEN:ControlPoints - 1, n = (LEN ~ S1):ControlPoints - 1 END; DEF points1 = <<0,0,0>,<1,0,1>>; DEF points2 = <<0,1,1>,<1,1,0>>; DEF pointArray = < points1, points2 >; DEF surf = MAP:(BezierSurface:pointArray):UVDOMAIN; DEF OUT = STRUCT:; DEF points1 = <<0,0,0>,<1,0,1>,<2,0,0>>; DEF points2 = <<0,1,1>,<1,1,2>,<2,1,1>>; DEF points3 = <<0,2,0>,<1,2,1>,<2,2,0>>; DEF pointArray = < points1, points2,points3 >; DEF surf = MAP:(BezierSurface:pointArray):UVDOMAIN; DEF OUT = STRUCT:; DEF points1 = <<0,0,0>,<1,0,1>,<2,0,0>>; DEF points2 = <<0,1,0.5>,<1,1,0.5>,<2,1,0.5>>; DEF points3 = <<0,2,1>,<1,2,0>,<2,2,1>>; DEF pointArray = < points1, points2,points3 >; DEF surf = MAP:(BezierSurface:pointArray):UVDOMAIN; DEF OUT = STRUCT:; DEF points1 = <<0,0,0>,<1,0,1>,<2,0,-1>,<3,0,0>>; DEF points2 = <<0,1,-1>,<1,1,2>,<2,1,-2>,<3,1,1>>; DEF points3 = <<0,2,1>,<1,2,-2>,<2,2,2>,<3,2,-1>>; DEF points4 = <<0,3,0>,<1,3,-1>,<2,3,1>,<3,3,0>>; DEF pointArray = < points1, points2,points3,points4 >; DEF surf = MAP:(BezierSurface:pointArray):UVDOMAIN; DEF OUT = STRUCT:; DEF points1 = <<0,0,0>,<0,3,4>,<0,6,3>,<0,10,0>>; DEF points2 = <<3,0,2>,<2,2.5,5>,<3,6,5>,<4,8,2>>; DEF points3 = <<6,0,2>,<8,3,5>,<7,6,4.5>,<6,10,2.5>>; DEF points4 = <<10,0,0>,<11,3,4>,<11,6,3>,<10,9,0>>; DEF pointArray = < points1, points2, points3, points4 >; DEF out = MAP:(BezierSurface:pointArray):UVDOMAIN;