diff options
Diffstat (limited to 'Build/source/utils/asymptote/base')
47 files changed, 4920 insertions, 4804 deletions
diff --git a/Build/source/utils/asymptote/base/animation.asy b/Build/source/utils/asymptote/base/animation.asy index f12ee75f2ba..1ce89c60e6e 100644 --- a/Build/source/utils/asymptote/base/animation.asy +++ b/Build/source/utils/asymptote/base/animation.asy @@ -30,14 +30,14 @@ struct animation { string prefix; bool global; // If true, use a global scaling for all frames; this requires // extra memory since the actual shipout is deferred until all frames have - // been generated. + // been generated. void operator init(string prefix="", bool global=true) { prefix=replace(stripdirectory(outprefix(prefix))," ","_"); this.prefix=prefix; this.global=global; } - + string basename(string prefix=stripextension(prefix)) { return "_"+prefix; } @@ -57,14 +57,14 @@ struct animation { plain.shipout(name,f,format=format,view=false); files.push(name+"."+format); } - + void add(picture pic=currentpicture, enclosure enclosure=NoBox) { if(global) { ++index; pictures.push(pic.copy()); } else this.shipout(enclosure(pic.fit())); } - + void purge(bool keep=settings.keep) { if(!keep) { for(int i=0; i < files.length; ++i) @@ -130,7 +130,7 @@ struct animation { return s; } - bool pdflatex() + bool pdflatex() { return latex() && pdf(); } @@ -143,13 +143,13 @@ struct animation { if(!pdflatex()) abort("inline pdf animations require -tex pdflatex or -tex xelatex"); if(settings.outformat != "") settings.outformat="pdf"; - + string filename=basename(); string pdfname=filename+".pdf"; if(global) export(filename,enclosure,multipage=multipage); - + if(!keep) { exitfcn currentexitfunction=atexit(); void exitfunction() { diff --git a/Build/source/utils/asymptote/base/asy-mode.el b/Build/source/utils/asymptote/base/asy-mode.el index c1960e23035..ec3a3746d74 100644 --- a/Build/source/utils/asymptote/base/asy-mode.el +++ b/Build/source/utils/asymptote/base/asy-mode.el @@ -102,7 +102,7 @@ This package has been tested in: This package seems to work with XEmacs 21.4 but not all the features are available (in particular syntax highlighting). -Report bugs to http://asymptote.sourceforge.net +Report bugs to https://github.com/vectorgraphics/asymptote/issues Some variables can be customized: M-x customize-group <RET> asymptote <RET>." diff --git a/Build/source/utils/asymptote/base/babel.asy b/Build/source/utils/asymptote/base/babel.asy index e93dec2a5cb..ada173c8a96 100644 --- a/Build/source/utils/asymptote/base/babel.asy +++ b/Build/source/utils/asymptote/base/babel.asy @@ -1,4 +1,4 @@ -void babel(string s) +void babel(string s) { usepackage("babel",s); } diff --git a/Build/source/utils/asymptote/base/bezulate.asy b/Build/source/utils/asymptote/base/bezulate.asy index 38d35718d4a..756ee00ac31 100644 --- a/Build/source/utils/asymptote/base/bezulate.asy +++ b/Build/source/utils/asymptote/base/bezulate.asy @@ -106,29 +106,29 @@ void connect(path[] paths, path[] result, path[] patch) //if(direction == 0) // Try a random direction // direction=expi(2pi*unitrand()); //pair start=point(inners[curveIndex],0); - + // find shortest distance between a node on the inner curve and a node // on the outer curve - + real mindist = d; int inner_i = 0; int outer_i = 0; for(int ni = 0; ni < length(inners[curveIndex]); ++ni) - { + { for(int no = 0; no < length(outer); ++no) - { + { real dist = abs(point(inners[curveIndex],ni)-point(outer,no)); if(dist < mindist) - { + { inner_i = ni; outer_i = no; mindist = dist; - } - } - } + } + } + } pair start=point(inners[curveIndex],inner_i); - pair end = point(outer,outer_i); - + pair end = point(outer,outer_i); + // find first intersection of line segment with outer curve //real[][] ints=intersections(start,start+d*direction,outer); real[][] ints=intersections(start,end,outer); @@ -140,7 +140,7 @@ void connect(path[] paths, path[] result, path[] patch) real earliestTime=1; for(int j=0; j < inners.length; ++j) { real[][] ints=intersections(end,start,inners[j]); - + if(ints.length > 0 && ints[0][0] < earliestTime) { earliestTime=ints[0][0]; // time on end--start starttime=ints[0][1]; // time on inner curve @@ -148,8 +148,8 @@ void connect(path[] paths, path[] result, path[] patch) } } start=point(inners[curveIndex],starttime); - - + + bool found_forward = false; real timeoffset_forward = 2; path portion_forward; @@ -162,7 +162,7 @@ void connect(path[] paths, path[] result, path[] patch) point(outer,endtime+timeoffset_forward)) == 2) { portion_forward = subpath(outer,endtime,endtime+timeoffset_forward)--start--cycle; - + found_forward=true; // check if an inner curve is inside the portion for(int k = 0; found_forward && k < inners.length; ++k) @@ -173,7 +173,7 @@ void connect(path[] paths, path[] result, path[] patch) } } } - + bool found_backward = false; real timeoffset_backward = -2; path portion_backward; @@ -197,29 +197,29 @@ void connect(path[] paths, path[] result, path[] patch) real timeoffset; path portion; if(found_forward && !found_backward) - { - timeoffset = timeoffset_forward; - portion = portion_forward; - } - else if(found_backward && !found_forward) - { - timeoffset = timeoffset_backward; - portion = portion_backward; - } - else // assert handles case of neither found - { - if(timeoffset_forward > -timeoffset_backward) { timeoffset = timeoffset_forward; portion = portion_forward; } - else + else if(found_backward && !found_forward) { timeoffset = timeoffset_backward; portion = portion_backward; - } - } - + } + else // assert handles case of neither found + { + if(timeoffset_forward > -timeoffset_backward) + { + timeoffset = timeoffset_forward; + portion = portion_forward; + } + else + { + timeoffset = timeoffset_backward; + portion = portion_backward; + } + } + endtime=min(endtime,endtime+timeoffset); // or go from timeoffset+timeoffset_backward to timeoffset+timeoffset_forward? timeoffset=abs(timeoffset); diff --git a/Build/source/utils/asymptote/base/binarytree.asy b/Build/source/utils/asymptote/base/binarytree.asy index 31e0e3aab61..4906c6ee58d 100644 --- a/Build/source/utils/asymptote/base/binarytree.asy +++ b/Build/source/utils/asymptote/base/binarytree.asy @@ -48,8 +48,8 @@ struct binarytreeNode { int right_span,total_right_span; void update_spans(); - // Get the horizontal span of the tree consisting of the current - // node plus the whole subtree that is rooted at the right child + // Get the horizontal span of the tree consisting of the current + // node plus the whole subtree that is rooted at the right child // (condensed mode) int getTotalRightSpan() { if(spans_calculated == false) { @@ -59,8 +59,8 @@ struct binarytreeNode { return total_right_span; } - // Get the horizontal span of the tree consisting of the current - // node plus the whole subtree that is rooted at the left child + // Get the horizontal span of the tree consisting of the current + // node plus the whole subtree that is rooted at the left child // (condensed mode) int getTotalLeftSpan() { if(spans_calculated == false) { @@ -87,27 +87,27 @@ struct binarytreeNode { return left_span; } - // Update all span figures for this node. + // Update all span figures for this node. // condensed mode) update_spans=new void() { - if(spans_calculated == true) - return; - - left_span=0; - total_left_span=0; - right_span=0; - total_right_span=0; - - if(left != null) { - left_span=left.getTotalRightSpan()+1; - total_left_span=left_span+left.getTotalLeftSpan(); - } - - if(right != null) { - right_span=right.getTotalLeftSpan()+1; - total_right_span=right_span+right.getTotalRightSpan(); - } - spans_calculated=true; + if(spans_calculated == true) + return; + + left_span=0; + total_left_span=0; + right_span=0; + total_right_span=0; + + if(left != null) { + left_span=left.getTotalRightSpan()+1; + total_left_span=left_span+left.getTotalLeftSpan(); + } + + if(right != null) { + right_span=right.getTotalLeftSpan()+1; + total_right_span=right_span+right.getTotalRightSpan(); + } + spans_calculated=true; }; // set the left child of this node @@ -134,20 +134,20 @@ struct binarytreeNode { else return parent.getLevel()+1; } - + // set the children of this binarytreeNode void setChildren(binarytreeNode left, binarytreeNode right) { setLeft(left); setRight(right); } - - // create a new binarytreeNode with key <key> + + // create a new binarytreeNode with key <key> static binarytreeNode binarytreeNode(int key) { binarytreeNode toReturn=new binarytreeNode; toReturn.key=key; return toReturn; } - + // returns the height of the subtree rooted at this node. int getHeight() { if(left == null && right == null) @@ -156,7 +156,7 @@ struct binarytreeNode { return right.getHeight()+1; if(right == null) return left.getHeight()+1; - + return max(left.getHeight(),right.getHeight())+1; } } @@ -175,12 +175,12 @@ object draw(picture pic=currentpicture, binarytreeNode node, pair pos, int height, real minDist, real levelDist, real nodeDiameter, pen p=currentpen, bool condensed=false) { Label label=Label(math((string) node.key),pos); - - binarytreeNode left=node.left; + + binarytreeNode left=node.left; binarytreeNode right=node.right; // return the distance for two nodes at the given <level> when the - // containing tree has height <height> + // containing tree has height <height> // and the minimal distance between two nodes is <minDist> . real getDistance(int level, int height, real minDist) { return(nodeDiameter+minDist)*2^(height-level); @@ -205,15 +205,15 @@ object draw(picture pic=currentpicture, binarytreeNode node, pair pos, // arrow. void deferredDrawNodeConnection(pair parentPos, pair childPos) { pic.add(new void(frame f, transform t) { - pair start,end; - // calculate connection path - transform T=shift(nodeDiameter/2*unit(t*childPos-t*parentPos)); - path arr=(T*t*parentPos)--(inverse(T)*t*childPos); - draw(f,PenMargin(arr,p).g,p,Arrow(5)); - }); + pair start,end; + // calculate connection path + transform T=shift(nodeDiameter/2*unit(t*childPos-t*parentPos)); + path arr=(T*t*parentPos)--(inverse(T)*t*childPos); + draw(f,PenMargin(arr,p).g,p,Arrow(5)); + }); pic.addPoint(parentPos); pic.addPoint(childPos); - } + } if(left != null) { pair childPos; @@ -238,13 +238,13 @@ object draw(picture pic=currentpicture, binarytreeNode node, pair pos, draw(pic,right,childPos,height,minDist,levelDist,nodeDiameter,p,condensed); deferredDrawNodeConnection(pos,childPos); } - + picture obj; draw(obj,circle((0,0),nodeDiameter/2),p); label(obj,label,(0,0),p); - + add(pic,obj,pos); - + return label; } @@ -270,18 +270,18 @@ key nil=key(0,false); struct binarytree { binarytreeNode root; int[] keys; - + // add the given <key> to the tree by searching for its place and // inserting it there. void addKey(int key) { binarytreeNode newNode=binarytreeNode(key); - + if(root == null) { root=newNode; keys.push(key); - return; + return; } - + binarytreeNode n=root; while(n != null) { if(key < n.key) { @@ -303,7 +303,7 @@ struct binarytree { } } } - + // return the height of the tree int getHeight() { if(root == null) @@ -311,7 +311,7 @@ struct binarytree { else return root.getHeight(); } - + // add all given keys to the tree sequentially void addSearchKeys(int[] keys) { for(int i=0; i < keys.length; ++i) { @@ -321,7 +321,7 @@ struct binarytree { addKey(key); } } - + binarytreeNode build(key[] keys, int[] ind) { if(ind[0] >= keys.length) return null; key k=keys[ind[0]]; @@ -369,9 +369,9 @@ void draw(picture pic=currentpicture, binarytree tree, pen p=currentpen, bool condensed=false) { int[] keys=tree.getKeys(); - + // calculate the node diameter so that all keys fit into it - frame f; + frame f; for(int i=0; i < keys.length; ++i) label(f,math(string(keys[i])),p); diff --git a/Build/source/utils/asymptote/base/bsp.asy b/Build/source/utils/asymptote/base/bsp.asy index cf9d7e0781f..526f264a772 100644 --- a/Build/source/utils/asymptote/base/bsp.asy +++ b/Build/source/utils/asymptote/base/bsp.asy @@ -33,13 +33,13 @@ struct face { picture operator cast(face f) {return f.pic;} face operator cast(path3 p) {return face(p);} - + struct line { triple point; triple dir; } -private line intersection(face a, face b) +private line intersection(face a, face b) { line L; L.point=intersectionpoint(a.normal,a.point,b.normal,b.point); @@ -49,12 +49,12 @@ private line intersection(face a, face b) struct half { pair[] left,right; - + // Sort the points in the pair array z according to whether they lie on the // left or right side of the line L in the direction dir passing through P. // Points exactly on L are considered to be on the right side. // Also push any points of intersection of L with the path operator --(... z) - // onto each of the arrays left and right. + // onto each of the arrays left and right. void operator init(pair dir, pair P ... pair[] z) { pair lastz; pair invdir=dir != 0 ? 1/dir : 0; @@ -73,7 +73,7 @@ struct half { } } } - + struct splitface { face back,front; } @@ -84,7 +84,7 @@ splitface split(face a, face cut, projection P) splitface S; void nointersection() { - if(abs(dot(a.point-P.camera,a.normal)) >= + if(abs(dot(a.point-P.camera,a.normal)) >= abs(dot(cut.point-P.camera,cut.normal))) { S.back=a; S.front=null; @@ -113,7 +113,7 @@ splitface split(face a, face cut, projection P) nointersection(); return S; } - + pair point=a.t*project(L.point,P); pair dir=a.t*project(L.point+L.dir,P)-point; pair invdir=dir != 0 ? 1/dir : 0; @@ -122,7 +122,7 @@ splitface split(face a, face cut, projection P) real t=intersect(apoint,P.camera,cut.normal,cut.point); bool rightfront=left ^ (t <= 0 || t >= 1); - + face back=a, front=a.copy(); pair max=max(a.fit); pair min=min(a.fit); @@ -151,7 +151,7 @@ struct bsp bsp back; bsp front; face node; - + // Construct the bsp. void operator init(face[] faces, projection P) { if(faces.length != 0) { @@ -166,7 +166,7 @@ struct bsp this.back=bsp(back,P); } } - + // Draw from back to front. void add(frame f) { if(back != null) back.add(f); @@ -183,22 +183,22 @@ void add(picture pic=currentpicture, face[] faces, face[] Faces=new face[n]; for(int i=0; i < n; ++i) Faces[i]=faces[i].copy(); - + pic.add(new void (frame f, transform t, transform T, - pair m, pair M) { - // Fit all of the pictures so we know their exact sizes. - face[] faces=new face[n]; - for(int i=0; i < n; ++i) { - faces[i]=Faces[i].copy(); - face F=faces[i]; - F.t=t*T*F.pic.T; - F.fit=F.pic.fit(t,T*F.pic.T,m,M); - } - - bsp bsp=bsp(faces,P); - if(bsp != null) bsp.add(f); + pair m, pair M) { + // Fit all of the pictures so we know their exact sizes. + face[] faces=new face[n]; + for(int i=0; i < n; ++i) { + faces[i]=Faces[i].copy(); + face F=faces[i]; + F.t=t*T*F.pic.T; + F.fit=F.pic.fit(t,T*F.pic.T,m,M); + } + + bsp bsp=bsp(faces,P); + if(bsp != null) bsp.add(f); }); - + for(int i=0; i < n; ++i) { picture F=Faces[i].pic; pic.userBox3(F.userMin3(), F.userMax3()); diff --git a/Build/source/utils/asymptote/base/colormap.asy b/Build/source/utils/asymptote/base/colormap.asy index 4b2242d6615..8ab4e420d1f 100644 --- a/Build/source/utils/asymptote/base/colormap.asy +++ b/Build/source/utils/asymptote/base/colormap.asy @@ -10,7 +10,7 @@ // pen[] Palette = wistia.palette() // // There are two types of palettes. For a complete list see below: -// +// // 1) The segmented palettes can be used as // <name>.palette(int NColors=256, real gamma=1.) // NColors are the number of colors in the palette @@ -19,7 +19,7 @@ // 2) The listed palettes can only be used as // <name>.palette() // -// Both functions return pen[] that can be used as a palette in the +// Both functions return pen[] that can be used as a palette in the // module palette. // list of palettes @@ -112,7 +112,7 @@ // SOURCE CODE // private real[] makeMappingArray(int N, triple[] data, real gamma=1.) { - real[] x; + real[] x; real[] y0; real[] y1; @@ -121,13 +121,13 @@ private real[] makeMappingArray(int N, triple[] data, real gamma=1.) { y0.push(data[i].y); y1.push(data[i].z); }; - + x = x*(N-1); - real[] lut = new real[N]; + real[] lut = new real[N]; real[] xind = (N - 1) * uniform(0, 1, N-1) ** gamma; int[] ind = map(new int(real xi) {return search(x, xi);}, xind); ind = ind[1:N-1]; // note that the index is shifted from python - + real[] dist = (xind[1:N-1] - x[ind])/(x[ind+1] - x[ind]); lut[1:N-1] = dist * (y0[ind+1] - y1[ind]) + y1[ind]; @@ -153,9 +153,9 @@ struct seg_data { real[] green = makeMappingArray(NColors, this.g, gamma); real[] blue = makeMappingArray(NColors, this.b, gamma); - pen[] pal = - sequence(new pen(int i) {return rgb(red[i], green[i], blue[i]);}, - NColors); + pen[] pal = + sequence(new pen(int i) {return rgb(red[i], green[i], blue[i]);}, + NColors); return pal; } @@ -174,3717 +174,3717 @@ struct list_data { // DATA // list_data Accent = list_data(new pen[] { - rgb (0.4980392156862745, 0.788235294117647, 0.4980392156862745) , - rgb (0.7450980392156863, 0.6823529411764706, 0.8313725490196079) , - rgb (0.9921568627450981, 0.7529411764705882, 0.5254901960784314) , - rgb (1.0, 1.0, 0.6) , - rgb (0.2196078431372549, 0.4235294117647059, 0.6901960784313725) , - rgb (0.9411764705882353, 0.00784313725490196, 0.4980392156862745) , - rgb (0.7490196078431373, 0.3568627450980392, 0.09019607843137253) , - rgb (0.4, 0.4, 0.4) -}); + rgb (0.4980392156862745, 0.788235294117647, 0.4980392156862745) , + rgb (0.7450980392156863, 0.6823529411764706, 0.8313725490196079) , + rgb (0.9921568627450981, 0.7529411764705882, 0.5254901960784314) , + rgb (1.0, 1.0, 0.6) , + rgb (0.2196078431372549, 0.4235294117647059, 0.6901960784313725) , + rgb (0.9411764705882353, 0.00784313725490196, 0.4980392156862745) , + rgb (0.7490196078431373, 0.3568627450980392, 0.09019607843137253) , + rgb (0.4, 0.4, 0.4) + }); list_data Blues = list_data(new pen[] { - rgb (0.9686274509803922, 0.984313725490196, 1.0) , - rgb (0.8705882352941177, 0.9215686274509803, 0.9686274509803922) , - rgb (0.7764705882352941, 0.8588235294117647, 0.9372549019607843) , - rgb (0.6196078431372549, 0.792156862745098, 0.8823529411764706) , - rgb (0.4196078431372549, 0.6823529411764706, 0.8392156862745098) , - rgb (0.25882352941176473, 0.5725490196078431, 0.7764705882352941) , - rgb (0.12941176470588237, 0.44313725490196076, 0.7098039215686275) , - rgb (0.03137254901960784, 0.3176470588235294, 0.611764705882353) , - rgb (0.03137254901960784, 0.18823529411764706, 0.4196078431372549) -}); + rgb (0.9686274509803922, 0.984313725490196, 1.0) , + rgb (0.8705882352941177, 0.9215686274509803, 0.9686274509803922) , + rgb (0.7764705882352941, 0.8588235294117647, 0.9372549019607843) , + rgb (0.6196078431372549, 0.792156862745098, 0.8823529411764706) , + rgb (0.4196078431372549, 0.6823529411764706, 0.8392156862745098) , + rgb (0.25882352941176473, 0.5725490196078431, 0.7764705882352941) , + rgb (0.12941176470588237, 0.44313725490196076, 0.7098039215686275) , + rgb (0.03137254901960784, 0.3176470588235294, 0.611764705882353) , + rgb (0.03137254901960784, 0.18823529411764706, 0.4196078431372549) + }); list_data BrBG = list_data(new pen[] { - rgb (0.32941176470588235, 0.18823529411764706, 0.0196078431372549) , - rgb (0.5490196078431373, 0.3176470588235294, 0.0392156862745098) , - rgb (0.7490196078431373, 0.5058823529411764, 0.17647058823529413) , - rgb (0.8745098039215686, 0.7607843137254902, 0.49019607843137253) , - rgb (0.9647058823529412, 0.9098039215686274, 0.7647058823529411) , - rgb (0.9607843137254902, 0.9607843137254902, 0.9607843137254902) , - rgb (0.7803921568627451, 0.9176470588235294, 0.8980392156862745) , - rgb (0.5019607843137255, 0.803921568627451, 0.7568627450980392) , - rgb (0.20784313725490197, 0.592156862745098, 0.5607843137254902) , - rgb (0.00392156862745098, 0.4, 0.3686274509803922) , - rgb (0.0, 0.23529411764705882, 0.18823529411764706) -}); + rgb (0.32941176470588235, 0.18823529411764706, 0.0196078431372549) , + rgb (0.5490196078431373, 0.3176470588235294, 0.0392156862745098) , + rgb (0.7490196078431373, 0.5058823529411764, 0.17647058823529413) , + rgb (0.8745098039215686, 0.7607843137254902, 0.49019607843137253) , + rgb (0.9647058823529412, 0.9098039215686274, 0.7647058823529411) , + rgb (0.9607843137254902, 0.9607843137254902, 0.9607843137254902) , + rgb (0.7803921568627451, 0.9176470588235294, 0.8980392156862745) , + rgb (0.5019607843137255, 0.803921568627451, 0.7568627450980392) , + rgb (0.20784313725490197, 0.592156862745098, 0.5607843137254902) , + rgb (0.00392156862745098, 0.4, 0.3686274509803922) , + rgb (0.0, 0.23529411764705882, 0.18823529411764706) + }); list_data BuGn = list_data(new pen[] { - rgb (0.9686274509803922, 0.9882352941176471, 0.9921568627450981) , - rgb (0.8980392156862745, 0.9607843137254902, 0.9764705882352941) , - rgb (0.8, 0.9254901960784314, 0.9019607843137255) , - rgb (0.6, 0.8470588235294118, 0.788235294117647) , - rgb (0.4, 0.7607843137254902, 0.6431372549019608) , - rgb (0.2549019607843137, 0.6823529411764706, 0.4627450980392157) , - rgb (0.13725490196078433, 0.5450980392156862, 0.27058823529411763) , - rgb (0.0, 0.42745098039215684, 0.17254901960784313) , - rgb (0.0, 0.26666666666666666, 0.10588235294117647) -}); + rgb (0.9686274509803922, 0.9882352941176471, 0.9921568627450981) , + rgb (0.8980392156862745, 0.9607843137254902, 0.9764705882352941) , + rgb (0.8, 0.9254901960784314, 0.9019607843137255) , + rgb (0.6, 0.8470588235294118, 0.788235294117647) , + rgb (0.4, 0.7607843137254902, 0.6431372549019608) , + rgb (0.2549019607843137, 0.6823529411764706, 0.4627450980392157) , + rgb (0.13725490196078433, 0.5450980392156862, 0.27058823529411763) , + rgb (0.0, 0.42745098039215684, 0.17254901960784313) , + rgb (0.0, 0.26666666666666666, 0.10588235294117647) + }); list_data BuPu = list_data(new pen[] { - rgb (0.9686274509803922, 0.9882352941176471, 0.9921568627450981) , - rgb (0.8784313725490196, 0.9254901960784314, 0.9568627450980393) , - rgb (0.7490196078431373, 0.8274509803921568, 0.9019607843137255) , - rgb (0.6196078431372549, 0.7372549019607844, 0.8549019607843137) , - rgb (0.5490196078431373, 0.5882352941176471, 0.7764705882352941) , - rgb (0.5490196078431373, 0.4196078431372549, 0.6941176470588235) , - rgb (0.5333333333333333, 0.2549019607843137, 0.615686274509804) , - rgb (0.5058823529411764, 0.05882352941176471, 0.48627450980392156) , - rgb (0.30196078431372547, 0.0, 0.29411764705882354) -}); + rgb (0.9686274509803922, 0.9882352941176471, 0.9921568627450981) , + rgb (0.8784313725490196, 0.9254901960784314, 0.9568627450980393) , + rgb (0.7490196078431373, 0.8274509803921568, 0.9019607843137255) , + rgb (0.6196078431372549, 0.7372549019607844, 0.8549019607843137) , + rgb (0.5490196078431373, 0.5882352941176471, 0.7764705882352941) , + rgb (0.5490196078431373, 0.4196078431372549, 0.6941176470588235) , + rgb (0.5333333333333333, 0.2549019607843137, 0.615686274509804) , + rgb (0.5058823529411764, 0.05882352941176471, 0.48627450980392156) , + rgb (0.30196078431372547, 0.0, 0.29411764705882354) + }); seg_data CMRmap = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (0.125, 0.15, 0.15) , - (0.25, 0.3, 0.3) , - (0.375, 0.6, 0.6) , - (0.5, 1.0, 1.0) , - (0.625, 0.9, 0.9) , - (0.75, 0.9, 0.9) , - (0.875, 0.9, 0.9) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (0.125, 0.15, 0.15) , - (0.25, 0.15, 0.15) , - (0.375, 0.2, 0.2) , - (0.5, 0.25, 0.25) , - (0.625, 0.5, 0.5) , - (0.75, 0.75, 0.75) , - (0.875, 0.9, 0.9) , - (1.0, 1.0, 1.0) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (0.125, 0.5, 0.5) , - (0.25, 0.75, 0.75) , - (0.375, 0.5, 0.5) , - (0.5, 0.15, 0.15) , - (0.625, 0.0, 0.0) , - (0.75, 0.1, 0.1) , - (0.875, 0.5, 0.5) , - (1.0, 1.0, 1.0) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (0.125, 0.15, 0.15) , + (0.25, 0.3, 0.3) , + (0.375, 0.6, 0.6) , + (0.5, 1.0, 1.0) , + (0.625, 0.9, 0.9) , + (0.75, 0.9, 0.9) , + (0.875, 0.9, 0.9) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (0.125, 0.15, 0.15) , + (0.25, 0.15, 0.15) , + (0.375, 0.2, 0.2) , + (0.5, 0.25, 0.25) , + (0.625, 0.5, 0.5) , + (0.75, 0.75, 0.75) , + (0.875, 0.9, 0.9) , + (1.0, 1.0, 1.0) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (0.125, 0.5, 0.5) , + (0.25, 0.75, 0.75) , + (0.375, 0.5, 0.5) , + (0.5, 0.15, 0.15) , + (0.625, 0.0, 0.0) , + (0.75, 0.1, 0.1) , + (0.875, 0.5, 0.5) , + (1.0, 1.0, 1.0) + } + ); list_data Dark2 = list_data(new pen[] { - rgb (0.10588235294117647, 0.6196078431372549, 0.4666666666666667) , - rgb (0.8509803921568627, 0.37254901960784315, 0.00784313725490196) , - rgb (0.4588235294117647, 0.4392156862745098, 0.7019607843137254) , - rgb (0.9058823529411765, 0.1607843137254902, 0.5411764705882353) , - rgb (0.4, 0.6509803921568628, 0.11764705882352941) , - rgb (0.9019607843137255, 0.6705882352941176, 0.00784313725490196) , - rgb (0.6509803921568628, 0.4627450980392157, 0.11372549019607843) , - rgb (0.4, 0.4, 0.4) -}); + rgb (0.10588235294117647, 0.6196078431372549, 0.4666666666666667) , + rgb (0.8509803921568627, 0.37254901960784315, 0.00784313725490196) , + rgb (0.4588235294117647, 0.4392156862745098, 0.7019607843137254) , + rgb (0.9058823529411765, 0.1607843137254902, 0.5411764705882353) , + rgb (0.4, 0.6509803921568628, 0.11764705882352941) , + rgb (0.9019607843137255, 0.6705882352941176, 0.00784313725490196) , + rgb (0.6509803921568628, 0.4627450980392157, 0.11372549019607843) , + rgb (0.4, 0.4, 0.4) + }); list_data GnBu = list_data(new pen[] { - rgb (0.9686274509803922, 0.9882352941176471, 0.9411764705882353) , - rgb (0.8784313725490196, 0.9529411764705882, 0.8588235294117647) , - rgb (0.8, 0.9215686274509803, 0.7725490196078432) , - rgb (0.6588235294117647, 0.8666666666666667, 0.7098039215686275) , - rgb (0.4823529411764706, 0.8, 0.7686274509803922) , - rgb (0.3058823529411765, 0.7019607843137254, 0.8274509803921568) , - rgb (0.16862745098039217, 0.5490196078431373, 0.7450980392156863) , - rgb (0.03137254901960784, 0.40784313725490196, 0.6745098039215687) , - rgb (0.03137254901960784, 0.25098039215686274, 0.5058823529411764) -}); + rgb (0.9686274509803922, 0.9882352941176471, 0.9411764705882353) , + rgb (0.8784313725490196, 0.9529411764705882, 0.8588235294117647) , + rgb (0.8, 0.9215686274509803, 0.7725490196078432) , + rgb (0.6588235294117647, 0.8666666666666667, 0.7098039215686275) , + rgb (0.4823529411764706, 0.8, 0.7686274509803922) , + rgb (0.3058823529411765, 0.7019607843137254, 0.8274509803921568) , + rgb (0.16862745098039217, 0.5490196078431373, 0.7450980392156863) , + rgb (0.03137254901960784, 0.40784313725490196, 0.6745098039215687) , + rgb (0.03137254901960784, 0.25098039215686274, 0.5058823529411764) + }); list_data Greens = list_data(new pen[] { - rgb (0.9686274509803922, 0.9882352941176471, 0.9607843137254902) , - rgb (0.8980392156862745, 0.9607843137254902, 0.8784313725490196) , - rgb (0.7803921568627451, 0.9137254901960784, 0.7529411764705882) , - rgb (0.6313725490196078, 0.8509803921568627, 0.6078431372549019) , - rgb (0.4549019607843137, 0.7686274509803922, 0.4627450980392157) , - rgb (0.2549019607843137, 0.6705882352941176, 0.36470588235294116) , - rgb (0.13725490196078433, 0.5450980392156862, 0.27058823529411763) , - rgb (0.0, 0.42745098039215684, 0.17254901960784313) , - rgb (0.0, 0.26666666666666666, 0.10588235294117647) -}); + rgb (0.9686274509803922, 0.9882352941176471, 0.9607843137254902) , + rgb (0.8980392156862745, 0.9607843137254902, 0.8784313725490196) , + rgb (0.7803921568627451, 0.9137254901960784, 0.7529411764705882) , + rgb (0.6313725490196078, 0.8509803921568627, 0.6078431372549019) , + rgb (0.4549019607843137, 0.7686274509803922, 0.4627450980392157) , + rgb (0.2549019607843137, 0.6705882352941176, 0.36470588235294116) , + rgb (0.13725490196078433, 0.5450980392156862, 0.27058823529411763) , + rgb (0.0, 0.42745098039215684, 0.17254901960784313) , + rgb (0.0, 0.26666666666666666, 0.10588235294117647) + }); list_data Greys = list_data(new pen[] { - rgb (1.0, 1.0, 1.0) , - rgb (0.9411764705882353, 0.9411764705882353, 0.9411764705882353) , - rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) , - rgb (0.7411764705882353, 0.7411764705882353, 0.7411764705882353) , - rgb (0.5882352941176471, 0.5882352941176471, 0.5882352941176471) , - rgb (0.45098039215686275, 0.45098039215686275, 0.45098039215686275) , - rgb (0.3215686274509804, 0.3215686274509804, 0.3215686274509804) , - rgb (0.1450980392156863, 0.1450980392156863, 0.1450980392156863) , - rgb (0.0, 0.0, 0.0) -}); + rgb (1.0, 1.0, 1.0) , + rgb (0.9411764705882353, 0.9411764705882353, 0.9411764705882353) , + rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) , + rgb (0.7411764705882353, 0.7411764705882353, 0.7411764705882353) , + rgb (0.5882352941176471, 0.5882352941176471, 0.5882352941176471) , + rgb (0.45098039215686275, 0.45098039215686275, 0.45098039215686275) , + rgb (0.3215686274509804, 0.3215686274509804, 0.3215686274509804) , + rgb (0.1450980392156863, 0.1450980392156863, 0.1450980392156863) , + rgb (0.0, 0.0, 0.0) + }); list_data OrRd = list_data(new pen[] { - rgb (1.0, 0.9686274509803922, 0.9254901960784314) , - rgb (0.996078431372549, 0.9098039215686274, 0.7843137254901961) , - rgb (0.9921568627450981, 0.8313725490196079, 0.6196078431372549) , - rgb (0.9921568627450981, 0.7333333333333333, 0.5176470588235295) , - rgb (0.9882352941176471, 0.5529411764705883, 0.34901960784313724) , - rgb (0.9372549019607843, 0.396078431372549, 0.2823529411764706) , - rgb (0.8431372549019608, 0.18823529411764706, 0.12156862745098039) , - rgb (0.7019607843137254, 0.0, 0.0) , - rgb (0.4980392156862745, 0.0, 0.0) -}); + rgb (1.0, 0.9686274509803922, 0.9254901960784314) , + rgb (0.996078431372549, 0.9098039215686274, 0.7843137254901961) , + rgb (0.9921568627450981, 0.8313725490196079, 0.6196078431372549) , + rgb (0.9921568627450981, 0.7333333333333333, 0.5176470588235295) , + rgb (0.9882352941176471, 0.5529411764705883, 0.34901960784313724) , + rgb (0.9372549019607843, 0.396078431372549, 0.2823529411764706) , + rgb (0.8431372549019608, 0.18823529411764706, 0.12156862745098039) , + rgb (0.7019607843137254, 0.0, 0.0) , + rgb (0.4980392156862745, 0.0, 0.0) + }); list_data Oranges = list_data(new pen[] { - rgb (1.0, 0.9607843137254902, 0.9215686274509803) , - rgb (0.996078431372549, 0.9019607843137255, 0.807843137254902) , - rgb (0.9921568627450981, 0.8156862745098039, 0.6352941176470588) , - rgb (0.9921568627450981, 0.6823529411764706, 0.4196078431372549) , - rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) , - rgb (0.9450980392156862, 0.4117647058823529, 0.07450980392156863) , - rgb (0.8509803921568627, 0.2823529411764706, 0.00392156862745098) , - rgb (0.6509803921568628, 0.21176470588235294, 0.01176470588235294) , - rgb (0.4980392156862745, 0.15294117647058825, 0.01568627450980392) -}); + rgb (1.0, 0.9607843137254902, 0.9215686274509803) , + rgb (0.996078431372549, 0.9019607843137255, 0.807843137254902) , + rgb (0.9921568627450981, 0.8156862745098039, 0.6352941176470588) , + rgb (0.9921568627450981, 0.6823529411764706, 0.4196078431372549) , + rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) , + rgb (0.9450980392156862, 0.4117647058823529, 0.07450980392156863) , + rgb (0.8509803921568627, 0.2823529411764706, 0.00392156862745098) , + rgb (0.6509803921568628, 0.21176470588235294, 0.01176470588235294) , + rgb (0.4980392156862745, 0.15294117647058825, 0.01568627450980392) + }); list_data PRGn = list_data(new pen[] { - rgb (0.25098039215686274, 0.0, 0.29411764705882354) , - rgb (0.4627450980392157, 0.16470588235294117, 0.5137254901960784) , - rgb (0.6, 0.4392156862745098, 0.6705882352941176) , - rgb (0.7607843137254902, 0.6470588235294118, 0.8117647058823529) , - rgb (0.9058823529411765, 0.8313725490196079, 0.9098039215686274) , - rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) , - rgb (0.8509803921568627, 0.9411764705882353, 0.8274509803921568) , - rgb (0.6509803921568628, 0.8588235294117647, 0.6274509803921569) , - rgb (0.35294117647058826, 0.6823529411764706, 0.3803921568627451) , - rgb (0.10588235294117647, 0.47058823529411764, 0.21568627450980393) , - rgb (0.0, 0.26666666666666666, 0.10588235294117647) -}); + rgb (0.25098039215686274, 0.0, 0.29411764705882354) , + rgb (0.4627450980392157, 0.16470588235294117, 0.5137254901960784) , + rgb (0.6, 0.4392156862745098, 0.6705882352941176) , + rgb (0.7607843137254902, 0.6470588235294118, 0.8117647058823529) , + rgb (0.9058823529411765, 0.8313725490196079, 0.9098039215686274) , + rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) , + rgb (0.8509803921568627, 0.9411764705882353, 0.8274509803921568) , + rgb (0.6509803921568628, 0.8588235294117647, 0.6274509803921569) , + rgb (0.35294117647058826, 0.6823529411764706, 0.3803921568627451) , + rgb (0.10588235294117647, 0.47058823529411764, 0.21568627450980393) , + rgb (0.0, 0.26666666666666666, 0.10588235294117647) + }); list_data Paired = list_data(new pen[] { - rgb (0.6509803921568628, 0.807843137254902, 0.8901960784313725) , - rgb (0.12156862745098039, 0.47058823529411764, 0.7058823529411765) , - rgb (0.6980392156862745, 0.8745098039215686, 0.5411764705882353) , - rgb (0.2, 0.6274509803921569, 0.17254901960784313) , - rgb (0.984313725490196, 0.6039215686274509, 0.6) , - rgb (0.8901960784313725, 0.10196078431372549, 0.10980392156862745) , - rgb (0.9921568627450981, 0.7490196078431373, 0.43529411764705883) , - rgb (1.0, 0.4980392156862745, 0.0) , - rgb (0.792156862745098, 0.6980392156862745, 0.8392156862745098) , - rgb (0.41568627450980394, 0.23921568627450981, 0.6039215686274509) , - rgb (1.0, 1.0, 0.6) , - rgb (0.6941176470588235, 0.34901960784313724, 0.1568627450980392) -}); + rgb (0.6509803921568628, 0.807843137254902, 0.8901960784313725) , + rgb (0.12156862745098039, 0.47058823529411764, 0.7058823529411765) , + rgb (0.6980392156862745, 0.8745098039215686, 0.5411764705882353) , + rgb (0.2, 0.6274509803921569, 0.17254901960784313) , + rgb (0.984313725490196, 0.6039215686274509, 0.6) , + rgb (0.8901960784313725, 0.10196078431372549, 0.10980392156862745) , + rgb (0.9921568627450981, 0.7490196078431373, 0.43529411764705883) , + rgb (1.0, 0.4980392156862745, 0.0) , + rgb (0.792156862745098, 0.6980392156862745, 0.8392156862745098) , + rgb (0.41568627450980394, 0.23921568627450981, 0.6039215686274509) , + rgb (1.0, 1.0, 0.6) , + rgb (0.6941176470588235, 0.34901960784313724, 0.1568627450980392) + }); list_data Pastel1 = list_data(new pen[] { - rgb (0.984313725490196, 0.7058823529411765, 0.6823529411764706) , - rgb (0.7019607843137254, 0.803921568627451, 0.8901960784313725) , - rgb (0.8, 0.9215686274509803, 0.7725490196078432) , - rgb (0.8705882352941177, 0.796078431372549, 0.8941176470588236) , - rgb (0.996078431372549, 0.8509803921568627, 0.6509803921568628) , - rgb (1.0, 1.0, 0.8) , - rgb (0.8980392156862745, 0.8470588235294118, 0.7411764705882353) , - rgb (0.9921568627450981, 0.8549019607843137, 0.9254901960784314) , - rgb (0.9490196078431372, 0.9490196078431372, 0.9490196078431372) -}); + rgb (0.984313725490196, 0.7058823529411765, 0.6823529411764706) , + rgb (0.7019607843137254, 0.803921568627451, 0.8901960784313725) , + rgb (0.8, 0.9215686274509803, 0.7725490196078432) , + rgb (0.8705882352941177, 0.796078431372549, 0.8941176470588236) , + rgb (0.996078431372549, 0.8509803921568627, 0.6509803921568628) , + rgb (1.0, 1.0, 0.8) , + rgb (0.8980392156862745, 0.8470588235294118, 0.7411764705882353) , + rgb (0.9921568627450981, 0.8549019607843137, 0.9254901960784314) , + rgb (0.9490196078431372, 0.9490196078431372, 0.9490196078431372) + }); list_data Pastel2 = list_data(new pen[] { - rgb (0.7019607843137254, 0.8862745098039215, 0.803921568627451) , - rgb (0.9921568627450981, 0.803921568627451, 0.6745098039215687) , - rgb (0.796078431372549, 0.8352941176470589, 0.9098039215686274) , - rgb (0.9568627450980393, 0.792156862745098, 0.8941176470588236) , - rgb (0.9019607843137255, 0.9607843137254902, 0.788235294117647) , - rgb (1.0, 0.9490196078431372, 0.6823529411764706) , - rgb (0.9450980392156862, 0.8862745098039215, 0.8) , - rgb (0.8, 0.8, 0.8) -}); + rgb (0.7019607843137254, 0.8862745098039215, 0.803921568627451) , + rgb (0.9921568627450981, 0.803921568627451, 0.6745098039215687) , + rgb (0.796078431372549, 0.8352941176470589, 0.9098039215686274) , + rgb (0.9568627450980393, 0.792156862745098, 0.8941176470588236) , + rgb (0.9019607843137255, 0.9607843137254902, 0.788235294117647) , + rgb (1.0, 0.9490196078431372, 0.6823529411764706) , + rgb (0.9450980392156862, 0.8862745098039215, 0.8) , + rgb (0.8, 0.8, 0.8) + }); list_data PiYG = list_data(new pen[] { - rgb (0.5568627450980392, 0.00392156862745098, 0.3215686274509804) , - rgb (0.7725490196078432, 0.10588235294117647, 0.49019607843137253) , - rgb (0.8705882352941177, 0.4666666666666667, 0.6823529411764706) , - rgb (0.9450980392156862, 0.7137254901960784, 0.8549019607843137) , - rgb (0.9921568627450981, 0.8784313725490196, 0.9372549019607843) , - rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) , - rgb (0.9019607843137255, 0.9607843137254902, 0.8156862745098039) , - rgb (0.7215686274509804, 0.8823529411764706, 0.5254901960784314) , - rgb (0.4980392156862745, 0.7372549019607844, 0.2549019607843137) , - rgb (0.30196078431372547, 0.5725490196078431, 0.12941176470588237) , - rgb (0.15294117647058825, 0.39215686274509803, 0.09803921568627451) -}); + rgb (0.5568627450980392, 0.00392156862745098, 0.3215686274509804) , + rgb (0.7725490196078432, 0.10588235294117647, 0.49019607843137253) , + rgb (0.8705882352941177, 0.4666666666666667, 0.6823529411764706) , + rgb (0.9450980392156862, 0.7137254901960784, 0.8549019607843137) , + rgb (0.9921568627450981, 0.8784313725490196, 0.9372549019607843) , + rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) , + rgb (0.9019607843137255, 0.9607843137254902, 0.8156862745098039) , + rgb (0.7215686274509804, 0.8823529411764706, 0.5254901960784314) , + rgb (0.4980392156862745, 0.7372549019607844, 0.2549019607843137) , + rgb (0.30196078431372547, 0.5725490196078431, 0.12941176470588237) , + rgb (0.15294117647058825, 0.39215686274509803, 0.09803921568627451) + }); list_data PuBuGn = list_data(new pen[] { - rgb (1.0, 0.9686274509803922, 0.984313725490196) , - rgb (0.9254901960784314, 0.8862745098039215, 0.9411764705882353) , - rgb (0.8156862745098039, 0.8196078431372549, 0.9019607843137255) , - rgb (0.6509803921568628, 0.7411764705882353, 0.8588235294117647) , - rgb (0.403921568627451, 0.6627450980392157, 0.8117647058823529) , - rgb (0.21176470588235294, 0.5647058823529412, 0.7529411764705882) , - rgb (0.00784313725490196, 0.5058823529411764, 0.5411764705882353) , - rgb (0.00392156862745098, 0.4235294117647059, 0.34901960784313724) , - rgb (0.00392156862745098, 0.27450980392156865, 0.21176470588235294) -}); + rgb (1.0, 0.9686274509803922, 0.984313725490196) , + rgb (0.9254901960784314, 0.8862745098039215, 0.9411764705882353) , + rgb (0.8156862745098039, 0.8196078431372549, 0.9019607843137255) , + rgb (0.6509803921568628, 0.7411764705882353, 0.8588235294117647) , + rgb (0.403921568627451, 0.6627450980392157, 0.8117647058823529) , + rgb (0.21176470588235294, 0.5647058823529412, 0.7529411764705882) , + rgb (0.00784313725490196, 0.5058823529411764, 0.5411764705882353) , + rgb (0.00392156862745098, 0.4235294117647059, 0.34901960784313724) , + rgb (0.00392156862745098, 0.27450980392156865, 0.21176470588235294) + }); list_data PuBu = list_data(new pen[] { - rgb (1.0, 0.9686274509803922, 0.984313725490196) , - rgb (0.9254901960784314, 0.9058823529411765, 0.9490196078431372) , - rgb (0.8156862745098039, 0.8196078431372549, 0.9019607843137255) , - rgb (0.6509803921568628, 0.7411764705882353, 0.8588235294117647) , - rgb (0.4549019607843137, 0.6627450980392157, 0.8117647058823529) , - rgb (0.21176470588235294, 0.5647058823529412, 0.7529411764705882) , - rgb (0.0196078431372549, 0.4392156862745098, 0.6901960784313725) , - rgb (0.01568627450980392, 0.35294117647058826, 0.5529411764705883) , - rgb (0.00784313725490196, 0.2196078431372549, 0.34509803921568627) -}); + rgb (1.0, 0.9686274509803922, 0.984313725490196) , + rgb (0.9254901960784314, 0.9058823529411765, 0.9490196078431372) , + rgb (0.8156862745098039, 0.8196078431372549, 0.9019607843137255) , + rgb (0.6509803921568628, 0.7411764705882353, 0.8588235294117647) , + rgb (0.4549019607843137, 0.6627450980392157, 0.8117647058823529) , + rgb (0.21176470588235294, 0.5647058823529412, 0.7529411764705882) , + rgb (0.0196078431372549, 0.4392156862745098, 0.6901960784313725) , + rgb (0.01568627450980392, 0.35294117647058826, 0.5529411764705883) , + rgb (0.00784313725490196, 0.2196078431372549, 0.34509803921568627) + }); list_data PuOr = list_data(new pen[] { - rgb (0.4980392156862745, 0.23137254901960785, 0.03137254901960784) , - rgb (0.7019607843137254, 0.34509803921568627, 0.02352941176470588) , - rgb (0.8784313725490196, 0.5098039215686274, 0.0784313725490196) , - rgb (0.9921568627450981, 0.7215686274509804, 0.38823529411764707) , - rgb (0.996078431372549, 0.8784313725490196, 0.7137254901960784) , - rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) , - rgb (0.8470588235294118, 0.8549019607843137, 0.9215686274509803) , - rgb (0.6980392156862745, 0.6705882352941176, 0.8235294117647058) , - rgb (0.5019607843137255, 0.45098039215686275, 0.6745098039215687) , - rgb (0.32941176470588235, 0.15294117647058825, 0.5333333333333333) , - rgb (0.17647058823529413, 0.0, 0.29411764705882354) -}); + rgb (0.4980392156862745, 0.23137254901960785, 0.03137254901960784) , + rgb (0.7019607843137254, 0.34509803921568627, 0.02352941176470588) , + rgb (0.8784313725490196, 0.5098039215686274, 0.0784313725490196) , + rgb (0.9921568627450981, 0.7215686274509804, 0.38823529411764707) , + rgb (0.996078431372549, 0.8784313725490196, 0.7137254901960784) , + rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) , + rgb (0.8470588235294118, 0.8549019607843137, 0.9215686274509803) , + rgb (0.6980392156862745, 0.6705882352941176, 0.8235294117647058) , + rgb (0.5019607843137255, 0.45098039215686275, 0.6745098039215687) , + rgb (0.32941176470588235, 0.15294117647058825, 0.5333333333333333) , + rgb (0.17647058823529413, 0.0, 0.29411764705882354) + }); list_data PuRd = list_data(new pen[] { - rgb (0.9686274509803922, 0.9568627450980393, 0.9764705882352941) , - rgb (0.9058823529411765, 0.8823529411764706, 0.9372549019607843) , - rgb (0.8313725490196079, 0.7254901960784313, 0.8549019607843137) , - rgb (0.788235294117647, 0.5803921568627451, 0.7803921568627451) , - rgb (0.8745098039215686, 0.396078431372549, 0.6901960784313725) , - rgb (0.9058823529411765, 0.1607843137254902, 0.5411764705882353) , - rgb (0.807843137254902, 0.07058823529411765, 0.33725490196078434) , - rgb (0.596078431372549, 0.0, 0.2627450980392157) , - rgb (0.403921568627451, 0.0, 0.12156862745098039) -}); + rgb (0.9686274509803922, 0.9568627450980393, 0.9764705882352941) , + rgb (0.9058823529411765, 0.8823529411764706, 0.9372549019607843) , + rgb (0.8313725490196079, 0.7254901960784313, 0.8549019607843137) , + rgb (0.788235294117647, 0.5803921568627451, 0.7803921568627451) , + rgb (0.8745098039215686, 0.396078431372549, 0.6901960784313725) , + rgb (0.9058823529411765, 0.1607843137254902, 0.5411764705882353) , + rgb (0.807843137254902, 0.07058823529411765, 0.33725490196078434) , + rgb (0.596078431372549, 0.0, 0.2627450980392157) , + rgb (0.403921568627451, 0.0, 0.12156862745098039) + }); list_data Purples = list_data(new pen[] { - rgb (0.9882352941176471, 0.984313725490196, 0.9921568627450981) , - rgb (0.9372549019607843, 0.9294117647058824, 0.9607843137254902) , - rgb (0.8549019607843137, 0.8549019607843137, 0.9215686274509803) , - rgb (0.7372549019607844, 0.7411764705882353, 0.8627450980392157) , - rgb (0.6196078431372549, 0.6039215686274509, 0.7843137254901961) , - rgb (0.5019607843137255, 0.49019607843137253, 0.7294117647058823) , - rgb (0.41568627450980394, 0.3176470588235294, 0.6392156862745098) , - rgb (0.32941176470588235, 0.15294117647058825, 0.5607843137254902) , - rgb (0.24705882352941178, 0.0, 0.49019607843137253) -}); + rgb (0.9882352941176471, 0.984313725490196, 0.9921568627450981) , + rgb (0.9372549019607843, 0.9294117647058824, 0.9607843137254902) , + rgb (0.8549019607843137, 0.8549019607843137, 0.9215686274509803) , + rgb (0.7372549019607844, 0.7411764705882353, 0.8627450980392157) , + rgb (0.6196078431372549, 0.6039215686274509, 0.7843137254901961) , + rgb (0.5019607843137255, 0.49019607843137253, 0.7294117647058823) , + rgb (0.41568627450980394, 0.3176470588235294, 0.6392156862745098) , + rgb (0.32941176470588235, 0.15294117647058825, 0.5607843137254902) , + rgb (0.24705882352941178, 0.0, 0.49019607843137253) + }); list_data RdBu = list_data(new pen[] { - rgb (0.403921568627451, 0.0, 0.12156862745098039) , - rgb (0.6980392156862745, 0.09411764705882353, 0.16862745098039217) , - rgb (0.8392156862745098, 0.3764705882352941, 0.30196078431372547) , - rgb (0.9568627450980393, 0.6470588235294118, 0.5098039215686274) , - rgb (0.9921568627450981, 0.8588235294117647, 0.7803921568627451) , - rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) , - rgb (0.8196078431372549, 0.8980392156862745, 0.9411764705882353) , - rgb (0.5725490196078431, 0.7725490196078432, 0.8705882352941177) , - rgb (0.2627450980392157, 0.5764705882352941, 0.7647058823529411) , - rgb (0.12941176470588237, 0.4, 0.6745098039215687) , - rgb (0.0196078431372549, 0.18823529411764706, 0.3803921568627451) -}); + rgb (0.403921568627451, 0.0, 0.12156862745098039) , + rgb (0.6980392156862745, 0.09411764705882353, 0.16862745098039217) , + rgb (0.8392156862745098, 0.3764705882352941, 0.30196078431372547) , + rgb (0.9568627450980393, 0.6470588235294118, 0.5098039215686274) , + rgb (0.9921568627450981, 0.8588235294117647, 0.7803921568627451) , + rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) , + rgb (0.8196078431372549, 0.8980392156862745, 0.9411764705882353) , + rgb (0.5725490196078431, 0.7725490196078432, 0.8705882352941177) , + rgb (0.2627450980392157, 0.5764705882352941, 0.7647058823529411) , + rgb (0.12941176470588237, 0.4, 0.6745098039215687) , + rgb (0.0196078431372549, 0.18823529411764706, 0.3803921568627451) + }); list_data RdGy = list_data(new pen[] { - rgb (0.403921568627451, 0.0, 0.12156862745098039) , - rgb (0.6980392156862745, 0.09411764705882353, 0.16862745098039217) , - rgb (0.8392156862745098, 0.3764705882352941, 0.30196078431372547) , - rgb (0.9568627450980393, 0.6470588235294118, 0.5098039215686274) , - rgb (0.9921568627450981, 0.8588235294117647, 0.7803921568627451) , - rgb (1.0, 1.0, 1.0) , - rgb (0.8784313725490196, 0.8784313725490196, 0.8784313725490196) , - rgb (0.7294117647058823, 0.7294117647058823, 0.7294117647058823) , - rgb (0.5294117647058824, 0.5294117647058824, 0.5294117647058824) , - rgb (0.30196078431372547, 0.30196078431372547, 0.30196078431372547) , - rgb (0.10196078431372549, 0.10196078431372549, 0.10196078431372549) -}); + rgb (0.403921568627451, 0.0, 0.12156862745098039) , + rgb (0.6980392156862745, 0.09411764705882353, 0.16862745098039217) , + rgb (0.8392156862745098, 0.3764705882352941, 0.30196078431372547) , + rgb (0.9568627450980393, 0.6470588235294118, 0.5098039215686274) , + rgb (0.9921568627450981, 0.8588235294117647, 0.7803921568627451) , + rgb (1.0, 1.0, 1.0) , + rgb (0.8784313725490196, 0.8784313725490196, 0.8784313725490196) , + rgb (0.7294117647058823, 0.7294117647058823, 0.7294117647058823) , + rgb (0.5294117647058824, 0.5294117647058824, 0.5294117647058824) , + rgb (0.30196078431372547, 0.30196078431372547, 0.30196078431372547) , + rgb (0.10196078431372549, 0.10196078431372549, 0.10196078431372549) + }); list_data RdPu = list_data(new pen[] { - rgb (1.0, 0.9686274509803922, 0.9529411764705882) , - rgb (0.9921568627450981, 0.8784313725490196, 0.8666666666666667) , - rgb (0.9882352941176471, 0.7725490196078432, 0.7529411764705882) , - rgb (0.9803921568627451, 0.6235294117647059, 0.7098039215686275) , - rgb (0.9686274509803922, 0.40784313725490196, 0.6313725490196078) , - rgb (0.8666666666666667, 0.20392156862745098, 0.592156862745098) , - rgb (0.6823529411764706, 0.00392156862745098, 0.49411764705882355) , - rgb (0.47843137254901963, 0.00392156862745098, 0.4666666666666667) , - rgb (0.28627450980392155, 0.0, 0.41568627450980394) -}); + rgb (1.0, 0.9686274509803922, 0.9529411764705882) , + rgb (0.9921568627450981, 0.8784313725490196, 0.8666666666666667) , + rgb (0.9882352941176471, 0.7725490196078432, 0.7529411764705882) , + rgb (0.9803921568627451, 0.6235294117647059, 0.7098039215686275) , + rgb (0.9686274509803922, 0.40784313725490196, 0.6313725490196078) , + rgb (0.8666666666666667, 0.20392156862745098, 0.592156862745098) , + rgb (0.6823529411764706, 0.00392156862745098, 0.49411764705882355) , + rgb (0.47843137254901963, 0.00392156862745098, 0.4666666666666667) , + rgb (0.28627450980392155, 0.0, 0.41568627450980394) + }); list_data RdYlBu = list_data(new pen[] { - rgb (0.6470588235294118, 0.0, 0.14901960784313725) , - rgb (0.8431372549019608, 0.18823529411764706, 0.15294117647058825) , - rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) , - rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) , - rgb (0.996078431372549, 0.8784313725490196, 0.5647058823529412) , - rgb (1.0, 1.0, 0.7490196078431373) , - rgb (0.8784313725490196, 0.9529411764705882, 0.9725490196078431) , - rgb (0.6705882352941176, 0.8509803921568627, 0.9137254901960784) , - rgb (0.4549019607843137, 0.6784313725490196, 0.8196078431372549) , - rgb (0.27058823529411763, 0.4588235294117647, 0.7058823529411765) , - rgb (0.19215686274509805, 0.21176470588235294, 0.5843137254901961) -}); + rgb (0.6470588235294118, 0.0, 0.14901960784313725) , + rgb (0.8431372549019608, 0.18823529411764706, 0.15294117647058825) , + rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) , + rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) , + rgb (0.996078431372549, 0.8784313725490196, 0.5647058823529412) , + rgb (1.0, 1.0, 0.7490196078431373) , + rgb (0.8784313725490196, 0.9529411764705882, 0.9725490196078431) , + rgb (0.6705882352941176, 0.8509803921568627, 0.9137254901960784) , + rgb (0.4549019607843137, 0.6784313725490196, 0.8196078431372549) , + rgb (0.27058823529411763, 0.4588235294117647, 0.7058823529411765) , + rgb (0.19215686274509805, 0.21176470588235294, 0.5843137254901961) + }); list_data RdYlGn = list_data(new pen[] { - rgb (0.6470588235294118, 0.0, 0.14901960784313725) , - rgb (0.8431372549019608, 0.18823529411764706, 0.15294117647058825) , - rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) , - rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) , - rgb (0.996078431372549, 0.8784313725490196, 0.5450980392156862) , - rgb (1.0, 1.0, 0.7490196078431373) , - rgb (0.8509803921568627, 0.9372549019607843, 0.5450980392156862) , - rgb (0.6509803921568628, 0.8509803921568627, 0.41568627450980394) , - rgb (0.4, 0.7411764705882353, 0.38823529411764707) , - rgb (0.10196078431372549, 0.596078431372549, 0.3137254901960784) , - rgb (0.0, 0.40784313725490196, 0.21568627450980393) -}); + rgb (0.6470588235294118, 0.0, 0.14901960784313725) , + rgb (0.8431372549019608, 0.18823529411764706, 0.15294117647058825) , + rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) , + rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) , + rgb (0.996078431372549, 0.8784313725490196, 0.5450980392156862) , + rgb (1.0, 1.0, 0.7490196078431373) , + rgb (0.8509803921568627, 0.9372549019607843, 0.5450980392156862) , + rgb (0.6509803921568628, 0.8509803921568627, 0.41568627450980394) , + rgb (0.4, 0.7411764705882353, 0.38823529411764707) , + rgb (0.10196078431372549, 0.596078431372549, 0.3137254901960784) , + rgb (0.0, 0.40784313725490196, 0.21568627450980393) + }); list_data Reds = list_data(new pen[] { - rgb (1.0, 0.9607843137254902, 0.9411764705882353) , - rgb (0.996078431372549, 0.8784313725490196, 0.8235294117647058) , - rgb (0.9882352941176471, 0.7333333333333333, 0.6313725490196078) , - rgb (0.9882352941176471, 0.5725490196078431, 0.4470588235294118) , - rgb (0.984313725490196, 0.41568627450980394, 0.2901960784313726) , - rgb (0.9372549019607843, 0.23137254901960785, 0.17254901960784313) , - rgb (0.796078431372549, 0.09411764705882353, 0.11372549019607843) , - rgb (0.6470588235294118, 0.058823529411764705, 0.08235294117647057) , - rgb (0.403921568627451, 0.0, 0.05098039215686274) -}); + rgb (1.0, 0.9607843137254902, 0.9411764705882353) , + rgb (0.996078431372549, 0.8784313725490196, 0.8235294117647058) , + rgb (0.9882352941176471, 0.7333333333333333, 0.6313725490196078) , + rgb (0.9882352941176471, 0.5725490196078431, 0.4470588235294118) , + rgb (0.984313725490196, 0.41568627450980394, 0.2901960784313726) , + rgb (0.9372549019607843, 0.23137254901960785, 0.17254901960784313) , + rgb (0.796078431372549, 0.09411764705882353, 0.11372549019607843) , + rgb (0.6470588235294118, 0.058823529411764705, 0.08235294117647057) , + rgb (0.403921568627451, 0.0, 0.05098039215686274) + }); list_data Set1 = list_data(new pen[] { - rgb (0.8941176470588236, 0.10196078431372549, 0.10980392156862745) , - rgb (0.21568627450980393, 0.49411764705882355, 0.7215686274509804) , - rgb (0.30196078431372547, 0.6862745098039216, 0.2901960784313726) , - rgb (0.596078431372549, 0.3058823529411765, 0.6392156862745098) , - rgb (1.0, 0.4980392156862745, 0.0) , - rgb (1.0, 1.0, 0.2) , - rgb (0.6509803921568628, 0.33725490196078434, 0.1568627450980392) , - rgb (0.9686274509803922, 0.5058823529411764, 0.7490196078431373) , - rgb (0.6, 0.6, 0.6) -}); + rgb (0.8941176470588236, 0.10196078431372549, 0.10980392156862745) , + rgb (0.21568627450980393, 0.49411764705882355, 0.7215686274509804) , + rgb (0.30196078431372547, 0.6862745098039216, 0.2901960784313726) , + rgb (0.596078431372549, 0.3058823529411765, 0.6392156862745098) , + rgb (1.0, 0.4980392156862745, 0.0) , + rgb (1.0, 1.0, 0.2) , + rgb (0.6509803921568628, 0.33725490196078434, 0.1568627450980392) , + rgb (0.9686274509803922, 0.5058823529411764, 0.7490196078431373) , + rgb (0.6, 0.6, 0.6) + }); list_data Set2 = list_data(new pen[] { - rgb (0.4, 0.7607843137254902, 0.6470588235294118) , - rgb (0.9882352941176471, 0.5529411764705883, 0.3843137254901961) , - rgb (0.5529411764705883, 0.6274509803921569, 0.796078431372549) , - rgb (0.9058823529411765, 0.5411764705882353, 0.7647058823529411) , - rgb (0.6509803921568628, 0.8470588235294118, 0.32941176470588235) , - rgb (1.0, 0.8509803921568627, 0.1843137254901961) , - rgb (0.8980392156862745, 0.7686274509803922, 0.5803921568627451) , - rgb (0.7019607843137254, 0.7019607843137254, 0.7019607843137254) -}); + rgb (0.4, 0.7607843137254902, 0.6470588235294118) , + rgb (0.9882352941176471, 0.5529411764705883, 0.3843137254901961) , + rgb (0.5529411764705883, 0.6274509803921569, 0.796078431372549) , + rgb (0.9058823529411765, 0.5411764705882353, 0.7647058823529411) , + rgb (0.6509803921568628, 0.8470588235294118, 0.32941176470588235) , + rgb (1.0, 0.8509803921568627, 0.1843137254901961) , + rgb (0.8980392156862745, 0.7686274509803922, 0.5803921568627451) , + rgb (0.7019607843137254, 0.7019607843137254, 0.7019607843137254) + }); list_data Set3 = list_data(new pen[] { - rgb (0.5529411764705883, 0.8274509803921568, 0.7803921568627451) , - rgb (1.0, 1.0, 0.7019607843137254) , - rgb (0.7450980392156863, 0.7294117647058823, 0.8549019607843137) , - rgb (0.984313725490196, 0.5019607843137255, 0.4470588235294118) , - rgb (0.5019607843137255, 0.6941176470588235, 0.8274509803921568) , - rgb (0.9921568627450981, 0.7058823529411765, 0.3843137254901961) , - rgb (0.7019607843137254, 0.8705882352941177, 0.4117647058823529) , - rgb (0.9882352941176471, 0.803921568627451, 0.8980392156862745) , - rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) , - rgb (0.7372549019607844, 0.5019607843137255, 0.7411764705882353) , - rgb (0.8, 0.9215686274509803, 0.7725490196078432) , - rgb (1.0, 0.9294117647058824, 0.43529411764705883) -}); + rgb (0.5529411764705883, 0.8274509803921568, 0.7803921568627451) , + rgb (1.0, 1.0, 0.7019607843137254) , + rgb (0.7450980392156863, 0.7294117647058823, 0.8549019607843137) , + rgb (0.984313725490196, 0.5019607843137255, 0.4470588235294118) , + rgb (0.5019607843137255, 0.6941176470588235, 0.8274509803921568) , + rgb (0.9921568627450981, 0.7058823529411765, 0.3843137254901961) , + rgb (0.7019607843137254, 0.8705882352941177, 0.4117647058823529) , + rgb (0.9882352941176471, 0.803921568627451, 0.8980392156862745) , + rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) , + rgb (0.7372549019607844, 0.5019607843137255, 0.7411764705882353) , + rgb (0.8, 0.9215686274509803, 0.7725490196078432) , + rgb (1.0, 0.9294117647058824, 0.43529411764705883) + }); list_data Spectral = list_data(new pen[] { - rgb (0.6196078431372549, 0.00392156862745098, 0.25882352941176473) , - rgb (0.8352941176470589, 0.24313725490196078, 0.30980392156862746) , - rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) , - rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) , - rgb (0.996078431372549, 0.8784313725490196, 0.5450980392156862) , - rgb (1.0, 1.0, 0.7490196078431373) , - rgb (0.9019607843137255, 0.9607843137254902, 0.596078431372549) , - rgb (0.6705882352941176, 0.8666666666666667, 0.6431372549019608) , - rgb (0.4, 0.7607843137254902, 0.6470588235294118) , - rgb (0.19607843137254902, 0.5333333333333333, 0.7411764705882353) , - rgb (0.3686274509803922, 0.30980392156862746, 0.6352941176470588) -}); + rgb (0.6196078431372549, 0.00392156862745098, 0.25882352941176473) , + rgb (0.8352941176470589, 0.24313725490196078, 0.30980392156862746) , + rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) , + rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) , + rgb (0.996078431372549, 0.8784313725490196, 0.5450980392156862) , + rgb (1.0, 1.0, 0.7490196078431373) , + rgb (0.9019607843137255, 0.9607843137254902, 0.596078431372549) , + rgb (0.6705882352941176, 0.8666666666666667, 0.6431372549019608) , + rgb (0.4, 0.7607843137254902, 0.6470588235294118) , + rgb (0.19607843137254902, 0.5333333333333333, 0.7411764705882353) , + rgb (0.3686274509803922, 0.30980392156862746, 0.6352941176470588) + }); list_data YlGnBu = list_data(new pen[] { - rgb (1.0, 1.0, 0.8509803921568627) , - rgb (0.9294117647058824, 0.9725490196078431, 0.6941176470588235) , - rgb (0.7803921568627451, 0.9137254901960784, 0.7058823529411765) , - rgb (0.4980392156862745, 0.803921568627451, 0.7333333333333333) , - rgb (0.2549019607843137, 0.7137254901960784, 0.7686274509803922) , - rgb (0.11372549019607843, 0.5686274509803921, 0.7529411764705882) , - rgb (0.13333333333333333, 0.3686274509803922, 0.6588235294117647) , - rgb (0.1450980392156863, 0.20392156862745098, 0.5803921568627451) , - rgb (0.03137254901960784, 0.11372549019607843, 0.34509803921568627) -}); + rgb (1.0, 1.0, 0.8509803921568627) , + rgb (0.9294117647058824, 0.9725490196078431, 0.6941176470588235) , + rgb (0.7803921568627451, 0.9137254901960784, 0.7058823529411765) , + rgb (0.4980392156862745, 0.803921568627451, 0.7333333333333333) , + rgb (0.2549019607843137, 0.7137254901960784, 0.7686274509803922) , + rgb (0.11372549019607843, 0.5686274509803921, 0.7529411764705882) , + rgb (0.13333333333333333, 0.3686274509803922, 0.6588235294117647) , + rgb (0.1450980392156863, 0.20392156862745098, 0.5803921568627451) , + rgb (0.03137254901960784, 0.11372549019607843, 0.34509803921568627) + }); list_data YlGn = list_data(new pen[] { - rgb (1.0, 1.0, 0.8980392156862745) , - rgb (0.9686274509803922, 0.9882352941176471, 0.7254901960784313) , - rgb (0.8509803921568627, 0.9411764705882353, 0.6392156862745098) , - rgb (0.6784313725490196, 0.8666666666666667, 0.5568627450980392) , - rgb (0.47058823529411764, 0.7764705882352941, 0.4745098039215686) , - rgb (0.2549019607843137, 0.6705882352941176, 0.36470588235294116) , - rgb (0.13725490196078433, 0.5176470588235295, 0.2627450980392157) , - rgb (0.0, 0.40784313725490196, 0.21568627450980393) , - rgb (0.0, 0.27058823529411763, 0.1607843137254902) -}); + rgb (1.0, 1.0, 0.8980392156862745) , + rgb (0.9686274509803922, 0.9882352941176471, 0.7254901960784313) , + rgb (0.8509803921568627, 0.9411764705882353, 0.6392156862745098) , + rgb (0.6784313725490196, 0.8666666666666667, 0.5568627450980392) , + rgb (0.47058823529411764, 0.7764705882352941, 0.4745098039215686) , + rgb (0.2549019607843137, 0.6705882352941176, 0.36470588235294116) , + rgb (0.13725490196078433, 0.5176470588235295, 0.2627450980392157) , + rgb (0.0, 0.40784313725490196, 0.21568627450980393) , + rgb (0.0, 0.27058823529411763, 0.1607843137254902) + }); list_data YlOrBr = list_data(new pen[] { - rgb (1.0, 1.0, 0.8980392156862745) , - rgb (1.0, 0.9686274509803922, 0.7372549019607844) , - rgb (0.996078431372549, 0.8901960784313725, 0.5686274509803921) , - rgb (0.996078431372549, 0.7686274509803922, 0.30980392156862746) , - rgb (0.996078431372549, 0.6, 0.1607843137254902) , - rgb (0.9254901960784314, 0.4392156862745098, 0.0784313725490196) , - rgb (0.8, 0.2980392156862745, 0.00784313725490196) , - rgb (0.6, 0.20392156862745098, 0.01568627450980392) , - rgb (0.4, 0.1450980392156863, 0.02352941176470588) -}); + rgb (1.0, 1.0, 0.8980392156862745) , + rgb (1.0, 0.9686274509803922, 0.7372549019607844) , + rgb (0.996078431372549, 0.8901960784313725, 0.5686274509803921) , + rgb (0.996078431372549, 0.7686274509803922, 0.30980392156862746) , + rgb (0.996078431372549, 0.6, 0.1607843137254902) , + rgb (0.9254901960784314, 0.4392156862745098, 0.0784313725490196) , + rgb (0.8, 0.2980392156862745, 0.00784313725490196) , + rgb (0.6, 0.20392156862745098, 0.01568627450980392) , + rgb (0.4, 0.1450980392156863, 0.02352941176470588) + }); list_data YlOrRd = list_data(new pen[] { - rgb (1.0, 1.0, 0.8) , - rgb (1.0, 0.9294117647058824, 0.6274509803921569) , - rgb (0.996078431372549, 0.8509803921568627, 0.4627450980392157) , - rgb (0.996078431372549, 0.6980392156862745, 0.2980392156862745) , - rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) , - rgb (0.9882352941176471, 0.3058823529411765, 0.16470588235294117) , - rgb (0.8901960784313725, 0.10196078431372549, 0.10980392156862745) , - rgb (0.7411764705882353, 0.0, 0.14901960784313725) , - rgb (0.5019607843137255, 0.0, 0.14901960784313725) -}); + rgb (1.0, 1.0, 0.8) , + rgb (1.0, 0.9294117647058824, 0.6274509803921569) , + rgb (0.996078431372549, 0.8509803921568627, 0.4627450980392157) , + rgb (0.996078431372549, 0.6980392156862745, 0.2980392156862745) , + rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) , + rgb (0.9882352941176471, 0.3058823529411765, 0.16470588235294117) , + rgb (0.8901960784313725, 0.10196078431372549, 0.10980392156862745) , + rgb (0.7411764705882353, 0.0, 0.14901960784313725) , + rgb (0.5019607843137255, 0.0, 0.14901960784313725) + }); seg_data autumn = seg_data( - new triple[] { // red - (0.0, 1.0, 1.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (1.0, 0.0, 0.0) - } -); + new triple[] { // red + (0.0, 1.0, 1.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (1.0, 0.0, 0.0) + } + ); seg_data binary = seg_data( - new triple[] { // red - (0.0, 1.0, 1.0) , - (1.0, 0.0, 0.0) - }, - new triple[] { // green - (0.0, 1.0, 1.0) , - (1.0, 0.0, 0.0) - }, - new triple[] { // blue - (0.0, 1.0, 1.0) , - (1.0, 0.0, 0.0) - } -); + new triple[] { // red + (0.0, 1.0, 1.0) , + (1.0, 0.0, 0.0) + }, + new triple[] { // green + (0.0, 1.0, 1.0) , + (1.0, 0.0, 0.0) + }, + new triple[] { // blue + (0.0, 1.0, 1.0) , + (1.0, 0.0, 0.0) + } + ); seg_data bone = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (0.746032, 0.652778, 0.652778) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (0.365079, 0.319444, 0.319444) , - (0.746032, 0.777778, 0.777778) , - (1.0, 1.0, 1.0) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (0.365079, 0.444444, 0.444444) , - (1.0, 1.0, 1.0) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (0.746032, 0.652778, 0.652778) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (0.365079, 0.319444, 0.319444) , + (0.746032, 0.777778, 0.777778) , + (1.0, 1.0, 1.0) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (0.365079, 0.444444, 0.444444) , + (1.0, 1.0, 1.0) + } + ); list_data brg = list_data(new pen[] { - rgb (0.0, 0.0, 1.0) , - rgb (1.0, 0.0, 0.0) , - rgb (0.0, 1.0, 0.0) -}); + rgb (0.0, 0.0, 1.0) , + rgb (1.0, 0.0, 0.0) , + rgb (0.0, 1.0, 0.0) + }); list_data bwr = list_data(new pen[] { - rgb (0.0, 0.0, 1.0) , - rgb (1.0, 1.0, 1.0) , - rgb (1.0, 0.0, 0.0) -}); + rgb (0.0, 0.0, 1.0) , + rgb (1.0, 1.0, 1.0) , + rgb (1.0, 0.0, 0.0) + }); seg_data cool = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 1.0, 1.0) , - (1.0, 0.0, 0.0) - }, - new triple[] { // blue - (0.0, 1.0, 1.0) , - (1.0, 1.0, 1.0) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 1.0, 1.0) , + (1.0, 0.0, 0.0) + }, + new triple[] { // blue + (0.0, 1.0, 1.0) , + (1.0, 1.0, 1.0) + } + ); seg_data coolwarm = seg_data( - new triple[] { // red - (0.0, 0.2298057, 0.2298057) , - (0.03125, 0.26623388, 0.26623388) , - (0.0625, 0.30386891, 0.30386891) , - (0.09375, 0.342804478, 0.342804478) , - (0.125, 0.38301334, 0.38301334) , - (0.15625, 0.424369608, 0.424369608) , - (0.1875, 0.46666708, 0.46666708) , - (0.21875, 0.509635204, 0.509635204) , - (0.25, 0.552953156, 0.552953156) , - (0.28125, 0.596262162, 0.596262162) , - (0.3125, 0.639176211, 0.639176211) , - (0.34375, 0.681291281, 0.681291281) , - (0.375, 0.722193294, 0.722193294) , - (0.40625, 0.761464949, 0.761464949) , - (0.4375, 0.798691636, 0.798691636) , - (0.46875, 0.833466556, 0.833466556) , - (0.5, 0.865395197, 0.865395197) , - (0.53125, 0.897787179, 0.897787179) , - (0.5625, 0.924127593, 0.924127593) , - (0.59375, 0.944468518, 0.944468518) , - (0.625, 0.958852946, 0.958852946) , - (0.65625, 0.96732803, 0.96732803) , - (0.6875, 0.969954137, 0.969954137) , - (0.71875, 0.966811177, 0.966811177) , - (0.75, 0.958003065, 0.958003065) , - (0.78125, 0.943660866, 0.943660866) , - (0.8125, 0.923944917, 0.923944917) , - (0.84375, 0.89904617, 0.89904617) , - (0.875, 0.869186849, 0.869186849) , - (0.90625, 0.834620542, 0.834620542) , - (0.9375, 0.795631745, 0.795631745) , - (0.96875, 0.752534934, 0.752534934) , - (1.0, 0.705673158, 0.705673158) - }, - new triple[] { // green - (0.0, 0.298717966, 0.298717966) , - (0.03125, 0.353094838, 0.353094838) , - (0.0625, 0.406535296, 0.406535296) , - (0.09375, 0.458757618, 0.458757618) , - (0.125, 0.50941904, 0.50941904) , - (0.15625, 0.558148092, 0.558148092) , - (0.1875, 0.604562568, 0.604562568) , - (0.21875, 0.648280772, 0.648280772) , - (0.25, 0.688929332, 0.688929332) , - (0.28125, 0.726149107, 0.726149107) , - (0.3125, 0.759599947, 0.759599947) , - (0.34375, 0.788964712, 0.788964712) , - (0.375, 0.813952739, 0.813952739) , - (0.40625, 0.834302879, 0.834302879) , - (0.4375, 0.849786142, 0.849786142) , - (0.46875, 0.860207984, 0.860207984) , - (0.5, 0.86541021, 0.86541021) , - (0.53125, 0.848937047, 0.848937047) , - (0.5625, 0.827384882, 0.827384882) , - (0.59375, 0.800927443, 0.800927443) , - (0.625, 0.769767752, 0.769767752) , - (0.65625, 0.734132809, 0.734132809) , - (0.6875, 0.694266682, 0.694266682) , - (0.71875, 0.650421156, 0.650421156) , - (0.75, 0.602842431, 0.602842431) , - (0.78125, 0.551750968, 0.551750968) , - (0.8125, 0.49730856, 0.49730856) , - (0.84375, 0.439559467, 0.439559467) , - (0.875, 0.378313092, 0.378313092) , - (0.90625, 0.312874446, 0.312874446) , - (0.9375, 0.24128379, 0.24128379) , - (0.96875, 0.157246067, 0.157246067) , - (1.0, 0.01555616, 0.01555616) - }, - new triple[] { // blue - (0.0, 0.753683153, 0.753683153) , - (0.03125, 0.801466763, 0.801466763) , - (0.0625, 0.84495867, 0.84495867) , - (0.09375, 0.883725899, 0.883725899) , - (0.125, 0.917387822, 0.917387822) , - (0.15625, 0.945619588, 0.945619588) , - (0.1875, 0.968154911, 0.968154911) , - (0.21875, 0.98478814, 0.98478814) , - (0.25, 0.995375608, 0.995375608) , - (0.28125, 0.999836203, 0.999836203) , - (0.3125, 0.998151185, 0.998151185) , - (0.34375, 0.990363227, 0.990363227) , - (0.375, 0.976574709, 0.976574709) , - (0.40625, 0.956945269, 0.956945269) , - (0.4375, 0.931688648, 0.931688648) , - (0.46875, 0.901068838, 0.901068838) , - (0.5, 0.865395561, 0.865395561) , - (0.53125, 0.820880546, 0.820880546) , - (0.5625, 0.774508472, 0.774508472) , - (0.59375, 0.726736146, 0.726736146) , - (0.625, 0.678007945, 0.678007945) , - (0.65625, 0.628751763, 0.628751763) , - (0.6875, 0.579375448, 0.579375448) , - (0.71875, 0.530263762, 0.530263762) , - (0.75, 0.481775914, 0.481775914) , - (0.78125, 0.434243684, 0.434243684) , - (0.8125, 0.387970225, 0.387970225) , - (0.84375, 0.343229596, 0.343229596) , - (0.875, 0.300267182, 0.300267182) , - (0.90625, 0.259301199, 0.259301199) , - (0.9375, 0.220525627, 0.220525627) , - (0.96875, 0.184115123, 0.184115123) , - (1.0, 0.150232812, 0.150232812) - } -); + new triple[] { // red + (0.0, 0.2298057, 0.2298057) , + (0.03125, 0.26623388, 0.26623388) , + (0.0625, 0.30386891, 0.30386891) , + (0.09375, 0.342804478, 0.342804478) , + (0.125, 0.38301334, 0.38301334) , + (0.15625, 0.424369608, 0.424369608) , + (0.1875, 0.46666708, 0.46666708) , + (0.21875, 0.509635204, 0.509635204) , + (0.25, 0.552953156, 0.552953156) , + (0.28125, 0.596262162, 0.596262162) , + (0.3125, 0.639176211, 0.639176211) , + (0.34375, 0.681291281, 0.681291281) , + (0.375, 0.722193294, 0.722193294) , + (0.40625, 0.761464949, 0.761464949) , + (0.4375, 0.798691636, 0.798691636) , + (0.46875, 0.833466556, 0.833466556) , + (0.5, 0.865395197, 0.865395197) , + (0.53125, 0.897787179, 0.897787179) , + (0.5625, 0.924127593, 0.924127593) , + (0.59375, 0.944468518, 0.944468518) , + (0.625, 0.958852946, 0.958852946) , + (0.65625, 0.96732803, 0.96732803) , + (0.6875, 0.969954137, 0.969954137) , + (0.71875, 0.966811177, 0.966811177) , + (0.75, 0.958003065, 0.958003065) , + (0.78125, 0.943660866, 0.943660866) , + (0.8125, 0.923944917, 0.923944917) , + (0.84375, 0.89904617, 0.89904617) , + (0.875, 0.869186849, 0.869186849) , + (0.90625, 0.834620542, 0.834620542) , + (0.9375, 0.795631745, 0.795631745) , + (0.96875, 0.752534934, 0.752534934) , + (1.0, 0.705673158, 0.705673158) + }, + new triple[] { // green + (0.0, 0.298717966, 0.298717966) , + (0.03125, 0.353094838, 0.353094838) , + (0.0625, 0.406535296, 0.406535296) , + (0.09375, 0.458757618, 0.458757618) , + (0.125, 0.50941904, 0.50941904) , + (0.15625, 0.558148092, 0.558148092) , + (0.1875, 0.604562568, 0.604562568) , + (0.21875, 0.648280772, 0.648280772) , + (0.25, 0.688929332, 0.688929332) , + (0.28125, 0.726149107, 0.726149107) , + (0.3125, 0.759599947, 0.759599947) , + (0.34375, 0.788964712, 0.788964712) , + (0.375, 0.813952739, 0.813952739) , + (0.40625, 0.834302879, 0.834302879) , + (0.4375, 0.849786142, 0.849786142) , + (0.46875, 0.860207984, 0.860207984) , + (0.5, 0.86541021, 0.86541021) , + (0.53125, 0.848937047, 0.848937047) , + (0.5625, 0.827384882, 0.827384882) , + (0.59375, 0.800927443, 0.800927443) , + (0.625, 0.769767752, 0.769767752) , + (0.65625, 0.734132809, 0.734132809) , + (0.6875, 0.694266682, 0.694266682) , + (0.71875, 0.650421156, 0.650421156) , + (0.75, 0.602842431, 0.602842431) , + (0.78125, 0.551750968, 0.551750968) , + (0.8125, 0.49730856, 0.49730856) , + (0.84375, 0.439559467, 0.439559467) , + (0.875, 0.378313092, 0.378313092) , + (0.90625, 0.312874446, 0.312874446) , + (0.9375, 0.24128379, 0.24128379) , + (0.96875, 0.157246067, 0.157246067) , + (1.0, 0.01555616, 0.01555616) + }, + new triple[] { // blue + (0.0, 0.753683153, 0.753683153) , + (0.03125, 0.801466763, 0.801466763) , + (0.0625, 0.84495867, 0.84495867) , + (0.09375, 0.883725899, 0.883725899) , + (0.125, 0.917387822, 0.917387822) , + (0.15625, 0.945619588, 0.945619588) , + (0.1875, 0.968154911, 0.968154911) , + (0.21875, 0.98478814, 0.98478814) , + (0.25, 0.995375608, 0.995375608) , + (0.28125, 0.999836203, 0.999836203) , + (0.3125, 0.998151185, 0.998151185) , + (0.34375, 0.990363227, 0.990363227) , + (0.375, 0.976574709, 0.976574709) , + (0.40625, 0.956945269, 0.956945269) , + (0.4375, 0.931688648, 0.931688648) , + (0.46875, 0.901068838, 0.901068838) , + (0.5, 0.865395561, 0.865395561) , + (0.53125, 0.820880546, 0.820880546) , + (0.5625, 0.774508472, 0.774508472) , + (0.59375, 0.726736146, 0.726736146) , + (0.625, 0.678007945, 0.678007945) , + (0.65625, 0.628751763, 0.628751763) , + (0.6875, 0.579375448, 0.579375448) , + (0.71875, 0.530263762, 0.530263762) , + (0.75, 0.481775914, 0.481775914) , + (0.78125, 0.434243684, 0.434243684) , + (0.8125, 0.387970225, 0.387970225) , + (0.84375, 0.343229596, 0.343229596) , + (0.875, 0.300267182, 0.300267182) , + (0.90625, 0.259301199, 0.259301199) , + (0.9375, 0.220525627, 0.220525627) , + (0.96875, 0.184115123, 0.184115123) , + (1.0, 0.150232812, 0.150232812) + } + ); seg_data copper = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (0.809524, 1.0, 1.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (1.0, 0.7812, 0.7812) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (1.0, 0.4975, 0.4975) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (0.809524, 1.0, 1.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (1.0, 0.7812, 0.7812) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (1.0, 0.4975, 0.4975) + } + ); seg_data gist_earth = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (0.2824, 0.1882, 0.1882) , - (0.4588, 0.2714, 0.2714) , - (0.549, 0.4719, 0.4719) , - (0.698, 0.7176, 0.7176) , - (0.7882, 0.7553, 0.7553) , - (1.0, 0.9922, 0.9922) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (0.0275, 0.0, 0.0) , - (0.1098, 0.1893, 0.1893) , - (0.1647, 0.3035, 0.3035) , - (0.2078, 0.3841, 0.3841) , - (0.2824, 0.502, 0.502) , - (0.5216, 0.6397, 0.6397) , - (0.698, 0.7171, 0.7171) , - (0.7882, 0.6392, 0.6392) , - (0.7922, 0.6413, 0.6413) , - (0.8, 0.6447, 0.6447) , - (0.8078, 0.6481, 0.6481) , - (0.8157, 0.6549, 0.6549) , - (0.8667, 0.6991, 0.6991) , - (0.8745, 0.7103, 0.7103) , - (0.8824, 0.7216, 0.7216) , - (0.8902, 0.7323, 0.7323) , - (0.898, 0.743, 0.743) , - (0.9412, 0.8275, 0.8275) , - (0.9569, 0.8635, 0.8635) , - (0.9647, 0.8816, 0.8816) , - (0.9961, 0.9733, 0.9733) , - (1.0, 0.9843, 0.9843) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (0.0039, 0.1684, 0.1684) , - (0.0078, 0.2212, 0.2212) , - (0.0275, 0.4329, 0.4329) , - (0.0314, 0.4549, 0.4549) , - (0.2824, 0.5004, 0.5004) , - (0.4667, 0.2748, 0.2748) , - (0.5451, 0.3205, 0.3205) , - (0.7843, 0.3961, 0.3961) , - (0.8941, 0.6651, 0.6651) , - (1.0, 0.9843, 0.9843) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (0.2824, 0.1882, 0.1882) , + (0.4588, 0.2714, 0.2714) , + (0.549, 0.4719, 0.4719) , + (0.698, 0.7176, 0.7176) , + (0.7882, 0.7553, 0.7553) , + (1.0, 0.9922, 0.9922) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (0.0275, 0.0, 0.0) , + (0.1098, 0.1893, 0.1893) , + (0.1647, 0.3035, 0.3035) , + (0.2078, 0.3841, 0.3841) , + (0.2824, 0.502, 0.502) , + (0.5216, 0.6397, 0.6397) , + (0.698, 0.7171, 0.7171) , + (0.7882, 0.6392, 0.6392) , + (0.7922, 0.6413, 0.6413) , + (0.8, 0.6447, 0.6447) , + (0.8078, 0.6481, 0.6481) , + (0.8157, 0.6549, 0.6549) , + (0.8667, 0.6991, 0.6991) , + (0.8745, 0.7103, 0.7103) , + (0.8824, 0.7216, 0.7216) , + (0.8902, 0.7323, 0.7323) , + (0.898, 0.743, 0.743) , + (0.9412, 0.8275, 0.8275) , + (0.9569, 0.8635, 0.8635) , + (0.9647, 0.8816, 0.8816) , + (0.9961, 0.9733, 0.9733) , + (1.0, 0.9843, 0.9843) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (0.0039, 0.1684, 0.1684) , + (0.0078, 0.2212, 0.2212) , + (0.0275, 0.4329, 0.4329) , + (0.0314, 0.4549, 0.4549) , + (0.2824, 0.5004, 0.5004) , + (0.4667, 0.2748, 0.2748) , + (0.5451, 0.3205, 0.3205) , + (0.7843, 0.3961, 0.3961) , + (0.8941, 0.6651, 0.6651) , + (1.0, 0.9843, 0.9843) + } + ); seg_data gist_ncar = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (0.3098, 0.0, 0.0) , - (0.3725, 0.3993, 0.3993) , - (0.4235, 0.5003, 0.5003) , - (0.5333, 1.0, 1.0) , - (0.7922, 1.0, 1.0) , - (0.8471, 0.6218, 0.6218) , - (0.898, 0.9235, 0.9235) , - (1.0, 0.9961, 0.9961) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (0.051, 0.3722, 0.3722) , - (0.1059, 0.0, 0.0) , - (0.1569, 0.7202, 0.7202) , - (0.1608, 0.7537, 0.7537) , - (0.1647, 0.7752, 0.7752) , - (0.2157, 1.0, 1.0) , - (0.2588, 0.9804, 0.9804) , - (0.2706, 0.9804, 0.9804) , - (0.3176, 1.0, 1.0) , - (0.3686, 0.8081, 0.8081) , - (0.4275, 1.0, 1.0) , - (0.5216, 1.0, 1.0) , - (0.6314, 0.7292, 0.7292) , - (0.6863, 0.2796, 0.2796) , - (0.7451, 0.0, 0.0) , - (0.7922, 0.0, 0.0) , - (0.8431, 0.1753, 0.1753) , - (0.898, 0.5, 0.5) , - (1.0, 0.9725, 0.9725) - }, - new triple[] { // blue - (0.0, 0.502, 0.502) , - (0.051, 0.0222, 0.0222) , - (0.1098, 1.0, 1.0) , - (0.2039, 1.0, 1.0) , - (0.2627, 0.6145, 0.6145) , - (0.3216, 0.0, 0.0) , - (0.4157, 0.0, 0.0) , - (0.4745, 0.2342, 0.2342) , - (0.5333, 0.0, 0.0) , - (0.5804, 0.0, 0.0) , - (0.6314, 0.0549, 0.0549) , - (0.6902, 0.0, 0.0) , - (0.7373, 0.0, 0.0) , - (0.7922, 0.9738, 0.9738) , - (0.8, 1.0, 1.0) , - (0.8431, 1.0, 1.0) , - (0.898, 0.9341, 0.9341) , - (1.0, 0.9961, 0.9961) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (0.3098, 0.0, 0.0) , + (0.3725, 0.3993, 0.3993) , + (0.4235, 0.5003, 0.5003) , + (0.5333, 1.0, 1.0) , + (0.7922, 1.0, 1.0) , + (0.8471, 0.6218, 0.6218) , + (0.898, 0.9235, 0.9235) , + (1.0, 0.9961, 0.9961) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (0.051, 0.3722, 0.3722) , + (0.1059, 0.0, 0.0) , + (0.1569, 0.7202, 0.7202) , + (0.1608, 0.7537, 0.7537) , + (0.1647, 0.7752, 0.7752) , + (0.2157, 1.0, 1.0) , + (0.2588, 0.9804, 0.9804) , + (0.2706, 0.9804, 0.9804) , + (0.3176, 1.0, 1.0) , + (0.3686, 0.8081, 0.8081) , + (0.4275, 1.0, 1.0) , + (0.5216, 1.0, 1.0) , + (0.6314, 0.7292, 0.7292) , + (0.6863, 0.2796, 0.2796) , + (0.7451, 0.0, 0.0) , + (0.7922, 0.0, 0.0) , + (0.8431, 0.1753, 0.1753) , + (0.898, 0.5, 0.5) , + (1.0, 0.9725, 0.9725) + }, + new triple[] { // blue + (0.0, 0.502, 0.502) , + (0.051, 0.0222, 0.0222) , + (0.1098, 1.0, 1.0) , + (0.2039, 1.0, 1.0) , + (0.2627, 0.6145, 0.6145) , + (0.3216, 0.0, 0.0) , + (0.4157, 0.0, 0.0) , + (0.4745, 0.2342, 0.2342) , + (0.5333, 0.0, 0.0) , + (0.5804, 0.0, 0.0) , + (0.6314, 0.0549, 0.0549) , + (0.6902, 0.0, 0.0) , + (0.7373, 0.0, 0.0) , + (0.7922, 0.9738, 0.9738) , + (0.8, 1.0, 1.0) , + (0.8431, 1.0, 1.0) , + (0.898, 0.9341, 0.9341) , + (1.0, 0.9961, 0.9961) + } + ); seg_data gist_stern = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (0.0547, 1.0, 1.0) , - (0.25, 0.027, 0.25) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0, 0, 0) , - (1, 1, 1) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (0.5, 1.0, 1.0) , - (0.735, 0.0, 0.0) , - (1.0, 1.0, 1.0) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (0.0547, 1.0, 1.0) , + (0.25, 0.027, 0.25) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0, 0, 0) , + (1, 1, 1) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (0.5, 1.0, 1.0) , + (0.735, 0.0, 0.0) , + (1.0, 1.0, 1.0) + } + ); seg_data gray = seg_data( - new triple[] { // red - (0.0, 0, 0) , - (1.0, 1, 1) - }, - new triple[] { // green - (0.0, 0, 0) , - (1.0, 1, 1) - }, - new triple[] { // blue - (0.0, 0, 0) , - (1.0, 1, 1) - } -); + new triple[] { // red + (0.0, 0, 0) , + (1.0, 1, 1) + }, + new triple[] { // green + (0.0, 0, 0) , + (1.0, 1, 1) + }, + new triple[] { // blue + (0.0, 0, 0) , + (1.0, 1, 1) + } + ); seg_data hot = seg_data( - new triple[] { // red - (0.0, 0.0416, 0.0416) , - (0.365079, 1.0, 1.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (0.365079, 0.0, 0.0) , - (0.746032, 1.0, 1.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (0.746032, 0.0, 0.0) , - (1.0, 1.0, 1.0) - } -); + new triple[] { // red + (0.0, 0.0416, 0.0416) , + (0.365079, 1.0, 1.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (0.365079, 0.0, 0.0) , + (0.746032, 1.0, 1.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (0.746032, 0.0, 0.0) , + (1.0, 1.0, 1.0) + } + ); seg_data hsv = seg_data( - new triple[] { // red - (0.0, 1.0, 1.0) , - (0.15873, 1.0, 1.0) , - (0.174603, 0.96875, 0.96875) , - (0.333333, 0.03125, 0.03125) , - (0.349206, 0.0, 0.0) , - (0.666667, 0.0, 0.0) , - (0.68254, 0.03125, 0.03125) , - (0.84127, 0.96875, 0.96875) , - (0.857143, 1.0, 1.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (0.15873, 0.9375, 0.9375) , - (0.174603, 1.0, 1.0) , - (0.507937, 1.0, 1.0) , - (0.666667, 0.0625, 0.0625) , - (0.68254, 0.0, 0.0) , - (1.0, 0.0, 0.0) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (0.333333, 0.0, 0.0) , - (0.349206, 0.0625, 0.0625) , - (0.507937, 1.0, 1.0) , - (0.84127, 1.0, 1.0) , - (0.857143, 0.9375, 0.9375) , - (1.0, 0.09375, 0.09375) - } -); + new triple[] { // red + (0.0, 1.0, 1.0) , + (0.15873, 1.0, 1.0) , + (0.174603, 0.96875, 0.96875) , + (0.333333, 0.03125, 0.03125) , + (0.349206, 0.0, 0.0) , + (0.666667, 0.0, 0.0) , + (0.68254, 0.03125, 0.03125) , + (0.84127, 0.96875, 0.96875) , + (0.857143, 1.0, 1.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (0.15873, 0.9375, 0.9375) , + (0.174603, 1.0, 1.0) , + (0.507937, 1.0, 1.0) , + (0.666667, 0.0625, 0.0625) , + (0.68254, 0.0, 0.0) , + (1.0, 0.0, 0.0) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (0.333333, 0.0, 0.0) , + (0.349206, 0.0625, 0.0625) , + (0.507937, 1.0, 1.0) , + (0.84127, 1.0, 1.0) , + (0.857143, 0.9375, 0.9375) , + (1.0, 0.09375, 0.09375) + } + ); seg_data jet = seg_data( - new triple[] { // red - (0.0, 0, 0) , - (0.35, 0, 0) , - (0.66, 1, 1) , - (0.89, 1, 1) , - (1, 0.5, 0.5) - }, - new triple[] { // green - (0.0, 0, 0) , - (0.125, 0, 0) , - (0.375, 1, 1) , - (0.64, 1, 1) , - (0.91, 0, 0) , - (1, 0, 0) - }, - new triple[] { // blue - (0.0, 0.5, 0.5) , - (0.11, 1, 1) , - (0.34, 1, 1) , - (0.65, 0, 0) , - (1, 0, 0) - } -); + new triple[] { // red + (0.0, 0, 0) , + (0.35, 0, 0) , + (0.66, 1, 1) , + (0.89, 1, 1) , + (1, 0.5, 0.5) + }, + new triple[] { // green + (0.0, 0, 0) , + (0.125, 0, 0) , + (0.375, 1, 1) , + (0.64, 1, 1) , + (0.91, 0, 0) , + (1, 0, 0) + }, + new triple[] { // blue + (0.0, 0.5, 0.5) , + (0.11, 1, 1) , + (0.34, 1, 1) , + (0.65, 0, 0) , + (1, 0, 0) + } + ); seg_data nipy_spectral = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (0.05, 0.4667, 0.4667) , - (0.1, 0.5333, 0.5333) , - (0.15, 0.0, 0.0) , - (0.2, 0.0, 0.0) , - (0.25, 0.0, 0.0) , - (0.3, 0.0, 0.0) , - (0.35, 0.0, 0.0) , - (0.4, 0.0, 0.0) , - (0.45, 0.0, 0.0) , - (0.5, 0.0, 0.0) , - (0.55, 0.0, 0.0) , - (0.6, 0.0, 0.0) , - (0.65, 0.7333, 0.7333) , - (0.7, 0.9333, 0.9333) , - (0.75, 1.0, 1.0) , - (0.8, 1.0, 1.0) , - (0.85, 1.0, 1.0) , - (0.9, 0.8667, 0.8667) , - (0.95, 0.8, 0.8) , - (1.0, 0.8, 0.8) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (0.05, 0.0, 0.0) , - (0.1, 0.0, 0.0) , - (0.15, 0.0, 0.0) , - (0.2, 0.0, 0.0) , - (0.25, 0.4667, 0.4667) , - (0.3, 0.6, 0.6) , - (0.35, 0.6667, 0.6667) , - (0.4, 0.6667, 0.6667) , - (0.45, 0.6, 0.6) , - (0.5, 0.7333, 0.7333) , - (0.55, 0.8667, 0.8667) , - (0.6, 1.0, 1.0) , - (0.65, 1.0, 1.0) , - (0.7, 0.9333, 0.9333) , - (0.75, 0.8, 0.8) , - (0.8, 0.6, 0.6) , - (0.85, 0.0, 0.0) , - (0.9, 0.0, 0.0) , - (0.95, 0.0, 0.0) , - (1.0, 0.8, 0.8) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (0.05, 0.5333, 0.5333) , - (0.1, 0.6, 0.6) , - (0.15, 0.6667, 0.6667) , - (0.2, 0.8667, 0.8667) , - (0.25, 0.8667, 0.8667) , - (0.3, 0.8667, 0.8667) , - (0.35, 0.6667, 0.6667) , - (0.4, 0.5333, 0.5333) , - (0.45, 0.0, 0.0) , - (0.5, 0.0, 0.0) , - (0.55, 0.0, 0.0) , - (0.6, 0.0, 0.0) , - (0.65, 0.0, 0.0) , - (0.7, 0.0, 0.0) , - (0.75, 0.0, 0.0) , - (0.8, 0.0, 0.0) , - (0.85, 0.0, 0.0) , - (0.9, 0.0, 0.0) , - (0.95, 0.0, 0.0) , - (1.0, 0.8, 0.8) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (0.05, 0.4667, 0.4667) , + (0.1, 0.5333, 0.5333) , + (0.15, 0.0, 0.0) , + (0.2, 0.0, 0.0) , + (0.25, 0.0, 0.0) , + (0.3, 0.0, 0.0) , + (0.35, 0.0, 0.0) , + (0.4, 0.0, 0.0) , + (0.45, 0.0, 0.0) , + (0.5, 0.0, 0.0) , + (0.55, 0.0, 0.0) , + (0.6, 0.0, 0.0) , + (0.65, 0.7333, 0.7333) , + (0.7, 0.9333, 0.9333) , + (0.75, 1.0, 1.0) , + (0.8, 1.0, 1.0) , + (0.85, 1.0, 1.0) , + (0.9, 0.8667, 0.8667) , + (0.95, 0.8, 0.8) , + (1.0, 0.8, 0.8) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (0.05, 0.0, 0.0) , + (0.1, 0.0, 0.0) , + (0.15, 0.0, 0.0) , + (0.2, 0.0, 0.0) , + (0.25, 0.4667, 0.4667) , + (0.3, 0.6, 0.6) , + (0.35, 0.6667, 0.6667) , + (0.4, 0.6667, 0.6667) , + (0.45, 0.6, 0.6) , + (0.5, 0.7333, 0.7333) , + (0.55, 0.8667, 0.8667) , + (0.6, 1.0, 1.0) , + (0.65, 1.0, 1.0) , + (0.7, 0.9333, 0.9333) , + (0.75, 0.8, 0.8) , + (0.8, 0.6, 0.6) , + (0.85, 0.0, 0.0) , + (0.9, 0.0, 0.0) , + (0.95, 0.0, 0.0) , + (1.0, 0.8, 0.8) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (0.05, 0.5333, 0.5333) , + (0.1, 0.6, 0.6) , + (0.15, 0.6667, 0.6667) , + (0.2, 0.8667, 0.8667) , + (0.25, 0.8667, 0.8667) , + (0.3, 0.8667, 0.8667) , + (0.35, 0.6667, 0.6667) , + (0.4, 0.5333, 0.5333) , + (0.45, 0.0, 0.0) , + (0.5, 0.0, 0.0) , + (0.55, 0.0, 0.0) , + (0.6, 0.0, 0.0) , + (0.65, 0.0, 0.0) , + (0.7, 0.0, 0.0) , + (0.75, 0.0, 0.0) , + (0.8, 0.0, 0.0) , + (0.85, 0.0, 0.0) , + (0.9, 0.0, 0.0) , + (0.95, 0.0, 0.0) , + (1.0, 0.8, 0.8) + } + ); seg_data pink = seg_data( - new triple[] { // red - (0.0, 0.1178, 0.1178) , - (0.015873, 0.195857, 0.195857) , - (0.031746, 0.250661, 0.250661) , - (0.047619, 0.295468, 0.295468) , - (0.063492, 0.334324, 0.334324) , - (0.079365, 0.369112, 0.369112) , - (0.095238, 0.400892, 0.400892) , - (0.111111, 0.430331, 0.430331) , - (0.126984, 0.457882, 0.457882) , - (0.142857, 0.483867, 0.483867) , - (0.15873, 0.508525, 0.508525) , - (0.174603, 0.532042, 0.532042) , - (0.190476, 0.554563, 0.554563) , - (0.206349, 0.576204, 0.576204) , - (0.222222, 0.597061, 0.597061) , - (0.238095, 0.617213, 0.617213) , - (0.253968, 0.636729, 0.636729) , - (0.269841, 0.655663, 0.655663) , - (0.285714, 0.674066, 0.674066) , - (0.301587, 0.69198, 0.69198) , - (0.31746, 0.709441, 0.709441) , - (0.333333, 0.726483, 0.726483) , - (0.349206, 0.743134, 0.743134) , - (0.365079, 0.759421, 0.759421) , - (0.380952, 0.766356, 0.766356) , - (0.396825, 0.773229, 0.773229) , - (0.412698, 0.780042, 0.780042) , - (0.428571, 0.786796, 0.786796) , - (0.444444, 0.793492, 0.793492) , - (0.460317, 0.800132, 0.800132) , - (0.47619, 0.806718, 0.806718) , - (0.492063, 0.81325, 0.81325) , - (0.507937, 0.81973, 0.81973) , - (0.52381, 0.82616, 0.82616) , - (0.539683, 0.832539, 0.832539) , - (0.555556, 0.83887, 0.83887) , - (0.571429, 0.845154, 0.845154) , - (0.587302, 0.851392, 0.851392) , - (0.603175, 0.857584, 0.857584) , - (0.619048, 0.863731, 0.863731) , - (0.634921, 0.869835, 0.869835) , - (0.650794, 0.875897, 0.875897) , - (0.666667, 0.881917, 0.881917) , - (0.68254, 0.887896, 0.887896) , - (0.698413, 0.893835, 0.893835) , - (0.714286, 0.899735, 0.899735) , - (0.730159, 0.905597, 0.905597) , - (0.746032, 0.911421, 0.911421) , - (0.761905, 0.917208, 0.917208) , - (0.777778, 0.922958, 0.922958) , - (0.793651, 0.928673, 0.928673) , - (0.809524, 0.934353, 0.934353) , - (0.825397, 0.939999, 0.939999) , - (0.84127, 0.945611, 0.945611) , - (0.857143, 0.95119, 0.95119) , - (0.873016, 0.956736, 0.956736) , - (0.888889, 0.96225, 0.96225) , - (0.904762, 0.967733, 0.967733) , - (0.920635, 0.973185, 0.973185) , - (0.936508, 0.978607, 0.978607) , - (0.952381, 0.983999, 0.983999) , - (0.968254, 0.989361, 0.989361) , - (0.984127, 0.994695, 0.994695) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (0.015873, 0.102869, 0.102869) , - (0.031746, 0.145479, 0.145479) , - (0.047619, 0.178174, 0.178174) , - (0.063492, 0.205738, 0.205738) , - (0.079365, 0.230022, 0.230022) , - (0.095238, 0.251976, 0.251976) , - (0.111111, 0.272166, 0.272166) , - (0.126984, 0.290957, 0.290957) , - (0.142857, 0.308607, 0.308607) , - (0.15873, 0.3253, 0.3253) , - (0.174603, 0.341178, 0.341178) , - (0.190476, 0.356348, 0.356348) , - (0.206349, 0.370899, 0.370899) , - (0.222222, 0.3849, 0.3849) , - (0.238095, 0.39841, 0.39841) , - (0.253968, 0.411476, 0.411476) , - (0.269841, 0.424139, 0.424139) , - (0.285714, 0.436436, 0.436436) , - (0.301587, 0.448395, 0.448395) , - (0.31746, 0.460044, 0.460044) , - (0.333333, 0.471405, 0.471405) , - (0.349206, 0.482498, 0.482498) , - (0.365079, 0.493342, 0.493342) , - (0.380952, 0.517549, 0.517549) , - (0.396825, 0.540674, 0.540674) , - (0.412698, 0.562849, 0.562849) , - (0.428571, 0.584183, 0.584183) , - (0.444444, 0.604765, 0.604765) , - (0.460317, 0.624669, 0.624669) , - (0.47619, 0.643958, 0.643958) , - (0.492063, 0.662687, 0.662687) , - (0.507937, 0.6809, 0.6809) , - (0.52381, 0.698638, 0.698638) , - (0.539683, 0.715937, 0.715937) , - (0.555556, 0.732828, 0.732828) , - (0.571429, 0.749338, 0.749338) , - (0.587302, 0.765493, 0.765493) , - (0.603175, 0.781313, 0.781313) , - (0.619048, 0.796819, 0.796819) , - (0.634921, 0.812029, 0.812029) , - (0.650794, 0.82696, 0.82696) , - (0.666667, 0.841625, 0.841625) , - (0.68254, 0.85604, 0.85604) , - (0.698413, 0.870216, 0.870216) , - (0.714286, 0.884164, 0.884164) , - (0.730159, 0.897896, 0.897896) , - (0.746032, 0.911421, 0.911421) , - (0.761905, 0.917208, 0.917208) , - (0.777778, 0.922958, 0.922958) , - (0.793651, 0.928673, 0.928673) , - (0.809524, 0.934353, 0.934353) , - (0.825397, 0.939999, 0.939999) , - (0.84127, 0.945611, 0.945611) , - (0.857143, 0.95119, 0.95119) , - (0.873016, 0.956736, 0.956736) , - (0.888889, 0.96225, 0.96225) , - (0.904762, 0.967733, 0.967733) , - (0.920635, 0.973185, 0.973185) , - (0.936508, 0.978607, 0.978607) , - (0.952381, 0.983999, 0.983999) , - (0.968254, 0.989361, 0.989361) , - (0.984127, 0.994695, 0.994695) , - (1.0, 1.0, 1.0) - }, - new triple[] { // blue - (0.0, 0.0, 0.0) , - (0.015873, 0.102869, 0.102869) , - (0.031746, 0.145479, 0.145479) , - (0.047619, 0.178174, 0.178174) , - (0.063492, 0.205738, 0.205738) , - (0.079365, 0.230022, 0.230022) , - (0.095238, 0.251976, 0.251976) , - (0.111111, 0.272166, 0.272166) , - (0.126984, 0.290957, 0.290957) , - (0.142857, 0.308607, 0.308607) , - (0.15873, 0.3253, 0.3253) , - (0.174603, 0.341178, 0.341178) , - (0.190476, 0.356348, 0.356348) , - (0.206349, 0.370899, 0.370899) , - (0.222222, 0.3849, 0.3849) , - (0.238095, 0.39841, 0.39841) , - (0.253968, 0.411476, 0.411476) , - (0.269841, 0.424139, 0.424139) , - (0.285714, 0.436436, 0.436436) , - (0.301587, 0.448395, 0.448395) , - (0.31746, 0.460044, 0.460044) , - (0.333333, 0.471405, 0.471405) , - (0.349206, 0.482498, 0.482498) , - (0.365079, 0.493342, 0.493342) , - (0.380952, 0.503953, 0.503953) , - (0.396825, 0.514344, 0.514344) , - (0.412698, 0.524531, 0.524531) , - (0.428571, 0.534522, 0.534522) , - (0.444444, 0.544331, 0.544331) , - (0.460317, 0.553966, 0.553966) , - (0.47619, 0.563436, 0.563436) , - (0.492063, 0.57275, 0.57275) , - (0.507937, 0.581914, 0.581914) , - (0.52381, 0.590937, 0.590937) , - (0.539683, 0.599824, 0.599824) , - (0.555556, 0.608581, 0.608581) , - (0.571429, 0.617213, 0.617213) , - (0.587302, 0.625727, 0.625727) , - (0.603175, 0.634126, 0.634126) , - (0.619048, 0.642416, 0.642416) , - (0.634921, 0.6506, 0.6506) , - (0.650794, 0.658682, 0.658682) , - (0.666667, 0.666667, 0.666667) , - (0.68254, 0.674556, 0.674556) , - (0.698413, 0.682355, 0.682355) , - (0.714286, 0.690066, 0.690066) , - (0.730159, 0.697691, 0.697691) , - (0.746032, 0.705234, 0.705234) , - (0.761905, 0.727166, 0.727166) , - (0.777778, 0.748455, 0.748455) , - (0.793651, 0.769156, 0.769156) , - (0.809524, 0.789314, 0.789314) , - (0.825397, 0.808969, 0.808969) , - (0.84127, 0.828159, 0.828159) , - (0.857143, 0.846913, 0.846913) , - (0.873016, 0.865261, 0.865261) , - (0.888889, 0.883229, 0.883229) , - (0.904762, 0.900837, 0.900837) , - (0.920635, 0.918109, 0.918109) , - (0.936508, 0.935061, 0.935061) , - (0.952381, 0.951711, 0.951711) , - (0.968254, 0.968075, 0.968075) , - (0.984127, 0.984167, 0.984167) , - (1.0, 1.0, 1.0) - } -); + new triple[] { // red + (0.0, 0.1178, 0.1178) , + (0.015873, 0.195857, 0.195857) , + (0.031746, 0.250661, 0.250661) , + (0.047619, 0.295468, 0.295468) , + (0.063492, 0.334324, 0.334324) , + (0.079365, 0.369112, 0.369112) , + (0.095238, 0.400892, 0.400892) , + (0.111111, 0.430331, 0.430331) , + (0.126984, 0.457882, 0.457882) , + (0.142857, 0.483867, 0.483867) , + (0.15873, 0.508525, 0.508525) , + (0.174603, 0.532042, 0.532042) , + (0.190476, 0.554563, 0.554563) , + (0.206349, 0.576204, 0.576204) , + (0.222222, 0.597061, 0.597061) , + (0.238095, 0.617213, 0.617213) , + (0.253968, 0.636729, 0.636729) , + (0.269841, 0.655663, 0.655663) , + (0.285714, 0.674066, 0.674066) , + (0.301587, 0.69198, 0.69198) , + (0.31746, 0.709441, 0.709441) , + (0.333333, 0.726483, 0.726483) , + (0.349206, 0.743134, 0.743134) , + (0.365079, 0.759421, 0.759421) , + (0.380952, 0.766356, 0.766356) , + (0.396825, 0.773229, 0.773229) , + (0.412698, 0.780042, 0.780042) , + (0.428571, 0.786796, 0.786796) , + (0.444444, 0.793492, 0.793492) , + (0.460317, 0.800132, 0.800132) , + (0.47619, 0.806718, 0.806718) , + (0.492063, 0.81325, 0.81325) , + (0.507937, 0.81973, 0.81973) , + (0.52381, 0.82616, 0.82616) , + (0.539683, 0.832539, 0.832539) , + (0.555556, 0.83887, 0.83887) , + (0.571429, 0.845154, 0.845154) , + (0.587302, 0.851392, 0.851392) , + (0.603175, 0.857584, 0.857584) , + (0.619048, 0.863731, 0.863731) , + (0.634921, 0.869835, 0.869835) , + (0.650794, 0.875897, 0.875897) , + (0.666667, 0.881917, 0.881917) , + (0.68254, 0.887896, 0.887896) , + (0.698413, 0.893835, 0.893835) , + (0.714286, 0.899735, 0.899735) , + (0.730159, 0.905597, 0.905597) , + (0.746032, 0.911421, 0.911421) , + (0.761905, 0.917208, 0.917208) , + (0.777778, 0.922958, 0.922958) , + (0.793651, 0.928673, 0.928673) , + (0.809524, 0.934353, 0.934353) , + (0.825397, 0.939999, 0.939999) , + (0.84127, 0.945611, 0.945611) , + (0.857143, 0.95119, 0.95119) , + (0.873016, 0.956736, 0.956736) , + (0.888889, 0.96225, 0.96225) , + (0.904762, 0.967733, 0.967733) , + (0.920635, 0.973185, 0.973185) , + (0.936508, 0.978607, 0.978607) , + (0.952381, 0.983999, 0.983999) , + (0.968254, 0.989361, 0.989361) , + (0.984127, 0.994695, 0.994695) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (0.015873, 0.102869, 0.102869) , + (0.031746, 0.145479, 0.145479) , + (0.047619, 0.178174, 0.178174) , + (0.063492, 0.205738, 0.205738) , + (0.079365, 0.230022, 0.230022) , + (0.095238, 0.251976, 0.251976) , + (0.111111, 0.272166, 0.272166) , + (0.126984, 0.290957, 0.290957) , + (0.142857, 0.308607, 0.308607) , + (0.15873, 0.3253, 0.3253) , + (0.174603, 0.341178, 0.341178) , + (0.190476, 0.356348, 0.356348) , + (0.206349, 0.370899, 0.370899) , + (0.222222, 0.3849, 0.3849) , + (0.238095, 0.39841, 0.39841) , + (0.253968, 0.411476, 0.411476) , + (0.269841, 0.424139, 0.424139) , + (0.285714, 0.436436, 0.436436) , + (0.301587, 0.448395, 0.448395) , + (0.31746, 0.460044, 0.460044) , + (0.333333, 0.471405, 0.471405) , + (0.349206, 0.482498, 0.482498) , + (0.365079, 0.493342, 0.493342) , + (0.380952, 0.517549, 0.517549) , + (0.396825, 0.540674, 0.540674) , + (0.412698, 0.562849, 0.562849) , + (0.428571, 0.584183, 0.584183) , + (0.444444, 0.604765, 0.604765) , + (0.460317, 0.624669, 0.624669) , + (0.47619, 0.643958, 0.643958) , + (0.492063, 0.662687, 0.662687) , + (0.507937, 0.6809, 0.6809) , + (0.52381, 0.698638, 0.698638) , + (0.539683, 0.715937, 0.715937) , + (0.555556, 0.732828, 0.732828) , + (0.571429, 0.749338, 0.749338) , + (0.587302, 0.765493, 0.765493) , + (0.603175, 0.781313, 0.781313) , + (0.619048, 0.796819, 0.796819) , + (0.634921, 0.812029, 0.812029) , + (0.650794, 0.82696, 0.82696) , + (0.666667, 0.841625, 0.841625) , + (0.68254, 0.85604, 0.85604) , + (0.698413, 0.870216, 0.870216) , + (0.714286, 0.884164, 0.884164) , + (0.730159, 0.897896, 0.897896) , + (0.746032, 0.911421, 0.911421) , + (0.761905, 0.917208, 0.917208) , + (0.777778, 0.922958, 0.922958) , + (0.793651, 0.928673, 0.928673) , + (0.809524, 0.934353, 0.934353) , + (0.825397, 0.939999, 0.939999) , + (0.84127, 0.945611, 0.945611) , + (0.857143, 0.95119, 0.95119) , + (0.873016, 0.956736, 0.956736) , + (0.888889, 0.96225, 0.96225) , + (0.904762, 0.967733, 0.967733) , + (0.920635, 0.973185, 0.973185) , + (0.936508, 0.978607, 0.978607) , + (0.952381, 0.983999, 0.983999) , + (0.968254, 0.989361, 0.989361) , + (0.984127, 0.994695, 0.994695) , + (1.0, 1.0, 1.0) + }, + new triple[] { // blue + (0.0, 0.0, 0.0) , + (0.015873, 0.102869, 0.102869) , + (0.031746, 0.145479, 0.145479) , + (0.047619, 0.178174, 0.178174) , + (0.063492, 0.205738, 0.205738) , + (0.079365, 0.230022, 0.230022) , + (0.095238, 0.251976, 0.251976) , + (0.111111, 0.272166, 0.272166) , + (0.126984, 0.290957, 0.290957) , + (0.142857, 0.308607, 0.308607) , + (0.15873, 0.3253, 0.3253) , + (0.174603, 0.341178, 0.341178) , + (0.190476, 0.356348, 0.356348) , + (0.206349, 0.370899, 0.370899) , + (0.222222, 0.3849, 0.3849) , + (0.238095, 0.39841, 0.39841) , + (0.253968, 0.411476, 0.411476) , + (0.269841, 0.424139, 0.424139) , + (0.285714, 0.436436, 0.436436) , + (0.301587, 0.448395, 0.448395) , + (0.31746, 0.460044, 0.460044) , + (0.333333, 0.471405, 0.471405) , + (0.349206, 0.482498, 0.482498) , + (0.365079, 0.493342, 0.493342) , + (0.380952, 0.503953, 0.503953) , + (0.396825, 0.514344, 0.514344) , + (0.412698, 0.524531, 0.524531) , + (0.428571, 0.534522, 0.534522) , + (0.444444, 0.544331, 0.544331) , + (0.460317, 0.553966, 0.553966) , + (0.47619, 0.563436, 0.563436) , + (0.492063, 0.57275, 0.57275) , + (0.507937, 0.581914, 0.581914) , + (0.52381, 0.590937, 0.590937) , + (0.539683, 0.599824, 0.599824) , + (0.555556, 0.608581, 0.608581) , + (0.571429, 0.617213, 0.617213) , + (0.587302, 0.625727, 0.625727) , + (0.603175, 0.634126, 0.634126) , + (0.619048, 0.642416, 0.642416) , + (0.634921, 0.6506, 0.6506) , + (0.650794, 0.658682, 0.658682) , + (0.666667, 0.666667, 0.666667) , + (0.68254, 0.674556, 0.674556) , + (0.698413, 0.682355, 0.682355) , + (0.714286, 0.690066, 0.690066) , + (0.730159, 0.697691, 0.697691) , + (0.746032, 0.705234, 0.705234) , + (0.761905, 0.727166, 0.727166) , + (0.777778, 0.748455, 0.748455) , + (0.793651, 0.769156, 0.769156) , + (0.809524, 0.789314, 0.789314) , + (0.825397, 0.808969, 0.808969) , + (0.84127, 0.828159, 0.828159) , + (0.857143, 0.846913, 0.846913) , + (0.873016, 0.865261, 0.865261) , + (0.888889, 0.883229, 0.883229) , + (0.904762, 0.900837, 0.900837) , + (0.920635, 0.918109, 0.918109) , + (0.936508, 0.935061, 0.935061) , + (0.952381, 0.951711, 0.951711) , + (0.968254, 0.968075, 0.968075) , + (0.984127, 0.984167, 0.984167) , + (1.0, 1.0, 1.0) + } + ); list_data seismic = list_data(new pen[] { - rgb (0.0, 0.0, 0.3) , - rgb (0.0, 0.0, 1.0) , - rgb (1.0, 1.0, 1.0) , - rgb (1.0, 0.0, 0.0) , - rgb (0.5, 0.0, 0.0) -}); + rgb (0.0, 0.0, 0.3) , + rgb (0.0, 0.0, 1.0) , + rgb (1.0, 1.0, 1.0) , + rgb (1.0, 0.0, 0.0) , + rgb (0.5, 0.0, 0.0) + }); seg_data spring = seg_data( - new triple[] { // red - (0.0, 1.0, 1.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // blue - (0.0, 1.0, 1.0) , - (1.0, 0.0, 0.0) - } -); + new triple[] { // red + (0.0, 1.0, 1.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // blue + (0.0, 1.0, 1.0) , + (1.0, 0.0, 0.0) + } + ); seg_data summer = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // green - (0.0, 0.5, 0.5) , - (1.0, 1.0, 1.0) - }, - new triple[] { // blue - (0.0, 0.4, 0.4) , - (1.0, 0.4, 0.4) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // green + (0.0, 0.5, 0.5) , + (1.0, 1.0, 1.0) + }, + new triple[] { // blue + (0.0, 0.4, 0.4) , + (1.0, 0.4, 0.4) + } + ); list_data tab10 = list_data(new pen[] { - rgb (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) , - rgb (1.0, 0.4980392156862745, 0.054901960784313725) , - rgb (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) , - rgb (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) , - rgb (0.5803921568627451, 0.403921568627451, 0.7411764705882353) , - rgb (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) , - rgb (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) , - rgb (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) , - rgb (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) , - rgb (0.09019607843137255, 0.7450980392156863, 0.8117647058823529) -}); + rgb (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) , + rgb (1.0, 0.4980392156862745, 0.054901960784313725) , + rgb (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) , + rgb (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) , + rgb (0.5803921568627451, 0.403921568627451, 0.7411764705882353) , + rgb (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) , + rgb (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) , + rgb (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) , + rgb (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) , + rgb (0.09019607843137255, 0.7450980392156863, 0.8117647058823529) + }); list_data tab20 = list_data(new pen[] { - rgb (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) , - rgb (0.6823529411764706, 0.7803921568627451, 0.9098039215686274) , - rgb (1.0, 0.4980392156862745, 0.054901960784313725) , - rgb (1.0, 0.7333333333333333, 0.47058823529411764) , - rgb (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) , - rgb (0.596078431372549, 0.8745098039215686, 0.5411764705882353) , - rgb (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) , - rgb (1.0, 0.596078431372549, 0.5882352941176471) , - rgb (0.5803921568627451, 0.403921568627451, 0.7411764705882353) , - rgb (0.7725490196078432, 0.6901960784313725, 0.8352941176470589) , - rgb (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) , - rgb (0.7686274509803922, 0.611764705882353, 0.5803921568627451) , - rgb (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) , - rgb (0.9686274509803922, 0.7137254901960784, 0.8235294117647058) , - rgb (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) , - rgb (0.7803921568627451, 0.7803921568627451, 0.7803921568627451) , - rgb (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) , - rgb (0.8588235294117647, 0.8588235294117647, 0.5529411764705883) , - rgb (0.09019607843137255, 0.7450980392156863, 0.8117647058823529) , - rgb (0.6196078431372549, 0.8549019607843137, 0.8980392156862745) -}); + rgb (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) , + rgb (0.6823529411764706, 0.7803921568627451, 0.9098039215686274) , + rgb (1.0, 0.4980392156862745, 0.054901960784313725) , + rgb (1.0, 0.7333333333333333, 0.47058823529411764) , + rgb (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) , + rgb (0.596078431372549, 0.8745098039215686, 0.5411764705882353) , + rgb (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) , + rgb (1.0, 0.596078431372549, 0.5882352941176471) , + rgb (0.5803921568627451, 0.403921568627451, 0.7411764705882353) , + rgb (0.7725490196078432, 0.6901960784313725, 0.8352941176470589) , + rgb (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) , + rgb (0.7686274509803922, 0.611764705882353, 0.5803921568627451) , + rgb (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) , + rgb (0.9686274509803922, 0.7137254901960784, 0.8235294117647058) , + rgb (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) , + rgb (0.7803921568627451, 0.7803921568627451, 0.7803921568627451) , + rgb (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) , + rgb (0.8588235294117647, 0.8588235294117647, 0.5529411764705883) , + rgb (0.09019607843137255, 0.7450980392156863, 0.8117647058823529) , + rgb (0.6196078431372549, 0.8549019607843137, 0.8980392156862745) + }); list_data tab20b = list_data(new pen[] { - rgb (0.2235294117647059, 0.23137254901960785, 0.4745098039215686) , - rgb (0.3215686274509804, 0.32941176470588235, 0.6392156862745098) , - rgb (0.4196078431372549, 0.43137254901960786, 0.8117647058823529) , - rgb (0.611764705882353, 0.6196078431372549, 0.8705882352941177) , - rgb (0.38823529411764707, 0.4745098039215686, 0.2235294117647059) , - rgb (0.5490196078431373, 0.6352941176470588, 0.3215686274509804) , - rgb (0.7098039215686275, 0.8117647058823529, 0.4196078431372549) , - rgb (0.807843137254902, 0.8588235294117647, 0.611764705882353) , - rgb (0.5490196078431373, 0.42745098039215684, 0.19215686274509805) , - rgb (0.7411764705882353, 0.6196078431372549, 0.2235294117647059) , - rgb (0.9058823529411765, 0.7294117647058823, 0.3215686274509804) , - rgb (0.9058823529411765, 0.796078431372549, 0.5803921568627451) , - rgb (0.5176470588235295, 0.23529411764705882, 0.2235294117647059) , - rgb (0.6784313725490196, 0.28627450980392155, 0.2901960784313726) , - rgb (0.8392156862745098, 0.3803921568627451, 0.4196078431372549) , - rgb (0.9058823529411765, 0.5882352941176471, 0.611764705882353) , - rgb (0.4823529411764706, 0.2549019607843137, 0.45098039215686275) , - rgb (0.6470588235294118, 0.3176470588235294, 0.5803921568627451) , - rgb (0.807843137254902, 0.42745098039215684, 0.7411764705882353) , - rgb (0.8705882352941177, 0.6196078431372549, 0.8392156862745098) -}); + rgb (0.2235294117647059, 0.23137254901960785, 0.4745098039215686) , + rgb (0.3215686274509804, 0.32941176470588235, 0.6392156862745098) , + rgb (0.4196078431372549, 0.43137254901960786, 0.8117647058823529) , + rgb (0.611764705882353, 0.6196078431372549, 0.8705882352941177) , + rgb (0.38823529411764707, 0.4745098039215686, 0.2235294117647059) , + rgb (0.5490196078431373, 0.6352941176470588, 0.3215686274509804) , + rgb (0.7098039215686275, 0.8117647058823529, 0.4196078431372549) , + rgb (0.807843137254902, 0.8588235294117647, 0.611764705882353) , + rgb (0.5490196078431373, 0.42745098039215684, 0.19215686274509805) , + rgb (0.7411764705882353, 0.6196078431372549, 0.2235294117647059) , + rgb (0.9058823529411765, 0.7294117647058823, 0.3215686274509804) , + rgb (0.9058823529411765, 0.796078431372549, 0.5803921568627451) , + rgb (0.5176470588235295, 0.23529411764705882, 0.2235294117647059) , + rgb (0.6784313725490196, 0.28627450980392155, 0.2901960784313726) , + rgb (0.8392156862745098, 0.3803921568627451, 0.4196078431372549) , + rgb (0.9058823529411765, 0.5882352941176471, 0.611764705882353) , + rgb (0.4823529411764706, 0.2549019607843137, 0.45098039215686275) , + rgb (0.6470588235294118, 0.3176470588235294, 0.5803921568627451) , + rgb (0.807843137254902, 0.42745098039215684, 0.7411764705882353) , + rgb (0.8705882352941177, 0.6196078431372549, 0.8392156862745098) + }); list_data tab20c = list_data(new pen[] { - rgb (0.19215686274509805, 0.5098039215686274, 0.7411764705882353) , - rgb (0.4196078431372549, 0.6823529411764706, 0.8392156862745098) , - rgb (0.6196078431372549, 0.792156862745098, 0.8823529411764706) , - rgb (0.7764705882352941, 0.8588235294117647, 0.9372549019607843) , - rgb (0.9019607843137255, 0.3333333333333333, 0.050980392156862744) , - rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) , - rgb (0.9921568627450981, 0.6823529411764706, 0.4196078431372549) , - rgb (0.9921568627450981, 0.8156862745098039, 0.6352941176470588) , - rgb (0.19215686274509805, 0.6392156862745098, 0.32941176470588235) , - rgb (0.4549019607843137, 0.7686274509803922, 0.4627450980392157) , - rgb (0.6313725490196078, 0.8509803921568627, 0.6078431372549019) , - rgb (0.7803921568627451, 0.9137254901960784, 0.7529411764705882) , - rgb (0.4588235294117647, 0.4196078431372549, 0.6941176470588235) , - rgb (0.6196078431372549, 0.6039215686274509, 0.7843137254901961) , - rgb (0.7372549019607844, 0.7411764705882353, 0.8627450980392157) , - rgb (0.8549019607843137, 0.8549019607843137, 0.9215686274509803) , - rgb (0.38823529411764707, 0.38823529411764707, 0.38823529411764707) , - rgb (0.5882352941176471, 0.5882352941176471, 0.5882352941176471) , - rgb (0.7411764705882353, 0.7411764705882353, 0.7411764705882353) , - rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) -}); + rgb (0.19215686274509805, 0.5098039215686274, 0.7411764705882353) , + rgb (0.4196078431372549, 0.6823529411764706, 0.8392156862745098) , + rgb (0.6196078431372549, 0.792156862745098, 0.8823529411764706) , + rgb (0.7764705882352941, 0.8588235294117647, 0.9372549019607843) , + rgb (0.9019607843137255, 0.3333333333333333, 0.050980392156862744) , + rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) , + rgb (0.9921568627450981, 0.6823529411764706, 0.4196078431372549) , + rgb (0.9921568627450981, 0.8156862745098039, 0.6352941176470588) , + rgb (0.19215686274509805, 0.6392156862745098, 0.32941176470588235) , + rgb (0.4549019607843137, 0.7686274509803922, 0.4627450980392157) , + rgb (0.6313725490196078, 0.8509803921568627, 0.6078431372549019) , + rgb (0.7803921568627451, 0.9137254901960784, 0.7529411764705882) , + rgb (0.4588235294117647, 0.4196078431372549, 0.6941176470588235) , + rgb (0.6196078431372549, 0.6039215686274509, 0.7843137254901961) , + rgb (0.7372549019607844, 0.7411764705882353, 0.8627450980392157) , + rgb (0.8549019607843137, 0.8549019607843137, 0.9215686274509803) , + rgb (0.38823529411764707, 0.38823529411764707, 0.38823529411764707) , + rgb (0.5882352941176471, 0.5882352941176471, 0.5882352941176471) , + rgb (0.7411764705882353, 0.7411764705882353, 0.7411764705882353) , + rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) + }); seg_data winter = seg_data( - new triple[] { // red - (0.0, 0.0, 0.0) , - (1.0, 0.0, 0.0) - }, - new triple[] { // green - (0.0, 0.0, 0.0) , - (1.0, 1.0, 1.0) - }, - new triple[] { // blue - (0.0, 1.0, 1.0) , - (1.0, 0.5, 0.5) - } -); + new triple[] { // red + (0.0, 0.0, 0.0) , + (1.0, 0.0, 0.0) + }, + new triple[] { // green + (0.0, 0.0, 0.0) , + (1.0, 1.0, 1.0) + }, + new triple[] { // blue + (0.0, 1.0, 1.0) , + (1.0, 0.5, 0.5) + } + ); seg_data wistia = seg_data( - new triple[] { // red - (0.0, 0.8941176470588236, 0.8941176470588236) , - (0.25, 1.0, 1.0) , - (0.5, 1.0, 1.0) , - (0.75, 1.0, 1.0) , - (1.0, 0.9882352941176471, 0.9882352941176471) - }, - new triple[] { // green - (0.0, 1.0, 1.0) , - (0.25, 0.9098039215686274, 0.9098039215686274) , - (0.5, 0.7411764705882353, 0.7411764705882353) , - (0.75, 0.6274509803921569, 0.6274509803921569) , - (1.0, 0.4980392156862745, 0.4980392156862745) - }, - new triple[] { // blue - (0.0, 0.47843137254901963, 0.47843137254901963) , - (0.25, 0.10196078431372549, 0.10196078431372549) , - (0.5, 0.0, 0.0) , - (0.75, 0.0, 0.0) , - (1.0, 0.0, 0.0) - } -); + new triple[] { // red + (0.0, 0.8941176470588236, 0.8941176470588236) , + (0.25, 1.0, 1.0) , + (0.5, 1.0, 1.0) , + (0.75, 1.0, 1.0) , + (1.0, 0.9882352941176471, 0.9882352941176471) + }, + new triple[] { // green + (0.0, 1.0, 1.0) , + (0.25, 0.9098039215686274, 0.9098039215686274) , + (0.5, 0.7411764705882353, 0.7411764705882353) , + (0.75, 0.6274509803921569, 0.6274509803921569) , + (1.0, 0.4980392156862745, 0.4980392156862745) + }, + new triple[] { // blue + (0.0, 0.47843137254901963, 0.47843137254901963) , + (0.25, 0.10196078431372549, 0.10196078431372549) , + (0.5, 0.0, 0.0) , + (0.75, 0.0, 0.0) , + (1.0, 0.0, 0.0) + } + ); list_data cividis = list_data(new pen[] { - rgb (0.0, 0.135112, 0.304751) , - rgb (0.0, 0.138068, 0.311105) , - rgb (0.0, 0.141013, 0.317579) , - rgb (0.0, 0.143951, 0.323982) , - rgb (0.0, 0.146877, 0.330479) , - rgb (0.0, 0.149791, 0.337065) , - rgb (0.0, 0.152673, 0.343704) , - rgb (0.0, 0.155377, 0.3505) , - rgb (0.0, 0.157932, 0.357521) , - rgb (0.0, 0.160495, 0.364534) , - rgb (0.0, 0.163058, 0.371608) , - rgb (0.0, 0.165621, 0.378769) , - rgb (0.0, 0.168204, 0.385902) , - rgb (0.0, 0.1708, 0.3931) , - rgb (0.0, 0.17342, 0.400353) , - rgb (0.0, 0.176082, 0.407577) , - rgb (0.0, 0.178802, 0.414764) , - rgb (0.0, 0.18161, 0.421859) , - rgb (0.0, 0.18455, 0.428802) , - rgb (0.0, 0.186915, 0.435532) , - rgb (0.0, 0.188769, 0.439563) , - rgb (0.0, 0.19095, 0.441085) , - rgb (0.0, 0.193366, 0.441561) , - rgb (0.003602, 0.195911, 0.441564) , - rgb (0.017852, 0.198528, 0.441248) , - rgb (0.03211, 0.201199, 0.440785) , - rgb (0.046205, 0.203903, 0.440196) , - rgb (0.058378, 0.206629, 0.439531) , - rgb (0.068968, 0.209372, 0.438863) , - rgb (0.078624, 0.212122, 0.438105) , - rgb (0.087465, 0.214879, 0.437342) , - rgb (0.095645, 0.217643, 0.436593) , - rgb (0.103401, 0.220406, 0.43579) , - rgb (0.110658, 0.22317, 0.435067) , - rgb (0.117612, 0.225935, 0.434308) , - rgb (0.124291, 0.228697, 0.433547) , - rgb (0.130669, 0.231458, 0.43284) , - rgb (0.13683, 0.234216, 0.432148) , - rgb (0.142852, 0.236972, 0.431404) , - rgb (0.148638, 0.239724, 0.430752) , - rgb (0.154261, 0.242475, 0.43012) , - rgb (0.159733, 0.245221, 0.429528) , - rgb (0.165113, 0.247965, 0.428908) , - rgb (0.170362, 0.250707, 0.428325) , - rgb (0.17549, 0.253444, 0.42779) , - rgb (0.180503, 0.25618, 0.427299) , - rgb (0.185453, 0.258914, 0.426788) , - rgb (0.190303, 0.261644, 0.426329) , - rgb (0.195057, 0.264372, 0.425924) , - rgb (0.199764, 0.267099, 0.425497) , - rgb (0.204385, 0.269823, 0.425126) , - rgb (0.208926, 0.272546, 0.424809) , - rgb (0.213431, 0.275266, 0.42448) , - rgb (0.217863, 0.277985, 0.424206) , - rgb (0.222264, 0.280702, 0.423914) , - rgb (0.226598, 0.283419, 0.423678) , - rgb (0.230871, 0.286134, 0.423498) , - rgb (0.23512, 0.288848, 0.423304) , - rgb (0.239312, 0.291562, 0.423167) , - rgb (0.243485, 0.294274, 0.423014) , - rgb (0.247605, 0.296986, 0.422917) , - rgb (0.251675, 0.299698, 0.422873) , - rgb (0.255731, 0.302409, 0.422814) , - rgb (0.25974, 0.30512, 0.42281) , - rgb (0.263738, 0.307831, 0.422789) , - rgb (0.267693, 0.310542, 0.422821) , - rgb (0.271639, 0.313253, 0.422837) , - rgb (0.275513, 0.315965, 0.422979) , - rgb (0.279411, 0.318677, 0.423031) , - rgb (0.28324, 0.32139, 0.423211) , - rgb (0.287065, 0.324103, 0.423373) , - rgb (0.290884, 0.326816, 0.423517) , - rgb (0.294669, 0.329531, 0.423716) , - rgb (0.298421, 0.332247, 0.423973) , - rgb (0.302169, 0.334963, 0.424213) , - rgb (0.305886, 0.337681, 0.424512) , - rgb (0.309601, 0.340399, 0.42479) , - rgb (0.313287, 0.34312, 0.42512) , - rgb (0.316941, 0.345842, 0.425512) , - rgb (0.320595, 0.348565, 0.425889) , - rgb (0.32425, 0.351289, 0.42625) , - rgb (0.327875, 0.354016, 0.42667) , - rgb (0.331474, 0.356744, 0.427144) , - rgb (0.335073, 0.359474, 0.427605) , - rgb (0.338673, 0.362206, 0.428053) , - rgb (0.342246, 0.364939, 0.428559) , - rgb (0.345793, 0.367676, 0.429127) , - rgb (0.349341, 0.370414, 0.429685) , - rgb (0.352892, 0.373153, 0.430226) , - rgb (0.356418, 0.375896, 0.430823) , - rgb (0.359916, 0.378641, 0.431501) , - rgb (0.363446, 0.381388, 0.432075) , - rgb (0.366923, 0.384139, 0.432796) , - rgb (0.37043, 0.38689, 0.433428) , - rgb (0.373884, 0.389646, 0.434209) , - rgb (0.377371, 0.392404, 0.43489) , - rgb (0.38083, 0.395164, 0.435653) , - rgb (0.384268, 0.397928, 0.436475) , - rgb (0.387705, 0.400694, 0.437305) , - rgb (0.391151, 0.403464, 0.438096) , - rgb (0.394568, 0.406236, 0.438986) , - rgb (0.397991, 0.409011, 0.439848) , - rgb (0.401418, 0.41179, 0.440708) , - rgb (0.40482, 0.414572, 0.441642) , - rgb (0.408226, 0.417357, 0.44257) , - rgb (0.411607, 0.420145, 0.443577) , - rgb (0.414992, 0.422937, 0.444578) , - rgb (0.418383, 0.425733, 0.44556) , - rgb (0.421748, 0.428531, 0.44664) , - rgb (0.42512, 0.431334, 0.447692) , - rgb (0.428462, 0.43414, 0.448864) , - rgb (0.431817, 0.43695, 0.449982) , - rgb (0.435168, 0.439763, 0.451134) , - rgb (0.438504, 0.44258, 0.452341) , - rgb (0.44181, 0.445402, 0.453659) , - rgb (0.445148, 0.448226, 0.454885) , - rgb (0.448447, 0.451053, 0.456264) , - rgb (0.451759, 0.453887, 0.457582) , - rgb (0.455072, 0.456718, 0.458976) , - rgb (0.458366, 0.459552, 0.460457) , - rgb (0.461616, 0.462405, 0.461969) , - rgb (0.464947, 0.465241, 0.463395) , - rgb (0.468254, 0.468083, 0.464908) , - rgb (0.471501, 0.47096, 0.466357) , - rgb (0.474812, 0.473832, 0.467681) , - rgb (0.478186, 0.476699, 0.468845) , - rgb (0.481622, 0.479573, 0.469767) , - rgb (0.485141, 0.482451, 0.470384) , - rgb (0.488697, 0.485318, 0.471008) , - rgb (0.492278, 0.488198, 0.471453) , - rgb (0.495913, 0.491076, 0.471751) , - rgb (0.499552, 0.49396, 0.472032) , - rgb (0.503185, 0.496851, 0.472305) , - rgb (0.506866, 0.499743, 0.472432) , - rgb (0.51054, 0.502643, 0.47255) , - rgb (0.514226, 0.505546, 0.47264) , - rgb (0.51792, 0.508454, 0.472707) , - rgb (0.521643, 0.511367, 0.472639) , - rgb (0.525348, 0.514285, 0.47266) , - rgb (0.529086, 0.517207, 0.472543) , - rgb (0.532829, 0.520135, 0.472401) , - rgb (0.536553, 0.523067, 0.472352) , - rgb (0.540307, 0.526005, 0.472163) , - rgb (0.544069, 0.528948, 0.471947) , - rgb (0.54784, 0.531895, 0.471704) , - rgb (0.551612, 0.534849, 0.471439) , - rgb (0.555393, 0.537807, 0.471147) , - rgb (0.559181, 0.540771, 0.470829) , - rgb (0.562972, 0.543741, 0.470488) , - rgb (0.566802, 0.546715, 0.469988) , - rgb (0.570607, 0.549695, 0.469593) , - rgb (0.574417, 0.552682, 0.469172) , - rgb (0.578236, 0.555673, 0.468724) , - rgb (0.582087, 0.55867, 0.468118) , - rgb (0.585916, 0.561674, 0.467618) , - rgb (0.589753, 0.564682, 0.46709) , - rgb (0.593622, 0.567697, 0.466401) , - rgb (0.597469, 0.570718, 0.465821) , - rgb (0.601354, 0.573743, 0.465074) , - rgb (0.605211, 0.576777, 0.464441) , - rgb (0.609105, 0.579816, 0.463638) , - rgb (0.612977, 0.582861, 0.46295) , - rgb (0.616852, 0.585913, 0.462237) , - rgb (0.620765, 0.58897, 0.461351) , - rgb (0.624654, 0.592034, 0.460583) , - rgb (0.628576, 0.595104, 0.459641) , - rgb (0.632506, 0.59818, 0.458668) , - rgb (0.636412, 0.601264, 0.457818) , - rgb (0.640352, 0.604354, 0.456791) , - rgb (0.64427, 0.60745, 0.455886) , - rgb (0.648222, 0.610553, 0.454801) , - rgb (0.652178, 0.613664, 0.453689) , - rgb (0.656114, 0.61678, 0.452702) , - rgb (0.660082, 0.619904, 0.451534) , - rgb (0.664055, 0.623034, 0.450338) , - rgb (0.668008, 0.626171, 0.44927) , - rgb (0.671991, 0.629316, 0.448018) , - rgb (0.675981, 0.632468, 0.446736) , - rgb (0.679979, 0.635626, 0.445424) , - rgb (0.68395, 0.638793, 0.444251) , - rgb (0.687957, 0.641966, 0.442886) , - rgb (0.691971, 0.645145, 0.441491) , - rgb (0.695985, 0.648334, 0.440072) , - rgb (0.700008, 0.651529, 0.438624) , - rgb (0.704037, 0.654731, 0.437147) , - rgb (0.708067, 0.657942, 0.435647) , - rgb (0.712105, 0.66116, 0.434117) , - rgb (0.716177, 0.664384, 0.432386) , - rgb (0.720222, 0.667618, 0.430805) , - rgb (0.724274, 0.670859, 0.429194) , - rgb (0.728334, 0.674107, 0.427554) , - rgb (0.732422, 0.677364, 0.425717) , - rgb (0.736488, 0.680629, 0.424028) , - rgb (0.740589, 0.6839, 0.422131) , - rgb (0.744664, 0.687181, 0.420393) , - rgb (0.748772, 0.69047, 0.418448) , - rgb (0.752886, 0.693766, 0.416472) , - rgb (0.756975, 0.697071, 0.414659) , - rgb (0.761096, 0.700384, 0.412638) , - rgb (0.765223, 0.703705, 0.410587) , - rgb (0.769353, 0.707035, 0.408516) , - rgb (0.773486, 0.710373, 0.406422) , - rgb (0.777651, 0.713719, 0.404112) , - rgb (0.781795, 0.717074, 0.401966) , - rgb (0.785965, 0.720438, 0.399613) , - rgb (0.790116, 0.72381, 0.397423) , - rgb (0.794298, 0.72719, 0.395016) , - rgb (0.79848, 0.73058, 0.392597) , - rgb (0.802667, 0.733978, 0.390153) , - rgb (0.806859, 0.737385, 0.387684) , - rgb (0.811054, 0.740801, 0.385198) , - rgb (0.815274, 0.744226, 0.382504) , - rgb (0.819499, 0.747659, 0.379785) , - rgb (0.823729, 0.751101, 0.377043) , - rgb (0.827959, 0.754553, 0.374292) , - rgb (0.832192, 0.758014, 0.371529) , - rgb (0.836429, 0.761483, 0.368747) , - rgb (0.840693, 0.764962, 0.365746) , - rgb (0.844957, 0.76845, 0.362741) , - rgb (0.849223, 0.771947, 0.359729) , - rgb (0.853515, 0.775454, 0.3565) , - rgb (0.857809, 0.778969, 0.353259) , - rgb (0.862105, 0.782494, 0.350011) , - rgb (0.866421, 0.786028, 0.346571) , - rgb (0.870717, 0.789572, 0.343333) , - rgb (0.875057, 0.793125, 0.339685) , - rgb (0.879378, 0.796687, 0.336241) , - rgb (0.88372, 0.800258, 0.332599) , - rgb (0.888081, 0.803839, 0.32877) , - rgb (0.89244, 0.80743, 0.324968) , - rgb (0.896818, 0.81103, 0.320982) , - rgb (0.901195, 0.814639, 0.317021) , - rgb (0.905589, 0.818257, 0.312889) , - rgb (0.91, 0.821885, 0.308594) , - rgb (0.914407, 0.825522, 0.304348) , - rgb (0.918828, 0.829168, 0.29996) , - rgb (0.923279, 0.832822, 0.295244) , - rgb (0.927724, 0.836486, 0.290611) , - rgb (0.93218, 0.840159, 0.28588) , - rgb (0.93666, 0.843841, 0.280876) , - rgb (0.941147, 0.84753, 0.275815) , - rgb (0.945654, 0.851228, 0.270532) , - rgb (0.950178, 0.854933, 0.265085) , - rgb (0.954725, 0.858646, 0.259365) , - rgb (0.959284, 0.862365, 0.253563) , - rgb (0.963872, 0.866089, 0.247445) , - rgb (0.968469, 0.869819, 0.24131) , - rgb (0.973114, 0.87355, 0.234677) , - rgb (0.97778, 0.877281, 0.227954) , - rgb (0.982497, 0.881008, 0.220878) , - rgb (0.987293, 0.884718, 0.213336) , - rgb (0.992218, 0.888385, 0.205468) , - rgb (0.994847, 0.892954, 0.203445) , - rgb (0.995249, 0.898384, 0.207561) , - rgb (0.995503, 0.903866, 0.21237) , - rgb (0.995737, 0.909344, 0.217772) -}); + rgb (0.0, 0.135112, 0.304751) , + rgb (0.0, 0.138068, 0.311105) , + rgb (0.0, 0.141013, 0.317579) , + rgb (0.0, 0.143951, 0.323982) , + rgb (0.0, 0.146877, 0.330479) , + rgb (0.0, 0.149791, 0.337065) , + rgb (0.0, 0.152673, 0.343704) , + rgb (0.0, 0.155377, 0.3505) , + rgb (0.0, 0.157932, 0.357521) , + rgb (0.0, 0.160495, 0.364534) , + rgb (0.0, 0.163058, 0.371608) , + rgb (0.0, 0.165621, 0.378769) , + rgb (0.0, 0.168204, 0.385902) , + rgb (0.0, 0.1708, 0.3931) , + rgb (0.0, 0.17342, 0.400353) , + rgb (0.0, 0.176082, 0.407577) , + rgb (0.0, 0.178802, 0.414764) , + rgb (0.0, 0.18161, 0.421859) , + rgb (0.0, 0.18455, 0.428802) , + rgb (0.0, 0.186915, 0.435532) , + rgb (0.0, 0.188769, 0.439563) , + rgb (0.0, 0.19095, 0.441085) , + rgb (0.0, 0.193366, 0.441561) , + rgb (0.003602, 0.195911, 0.441564) , + rgb (0.017852, 0.198528, 0.441248) , + rgb (0.03211, 0.201199, 0.440785) , + rgb (0.046205, 0.203903, 0.440196) , + rgb (0.058378, 0.206629, 0.439531) , + rgb (0.068968, 0.209372, 0.438863) , + rgb (0.078624, 0.212122, 0.438105) , + rgb (0.087465, 0.214879, 0.437342) , + rgb (0.095645, 0.217643, 0.436593) , + rgb (0.103401, 0.220406, 0.43579) , + rgb (0.110658, 0.22317, 0.435067) , + rgb (0.117612, 0.225935, 0.434308) , + rgb (0.124291, 0.228697, 0.433547) , + rgb (0.130669, 0.231458, 0.43284) , + rgb (0.13683, 0.234216, 0.432148) , + rgb (0.142852, 0.236972, 0.431404) , + rgb (0.148638, 0.239724, 0.430752) , + rgb (0.154261, 0.242475, 0.43012) , + rgb (0.159733, 0.245221, 0.429528) , + rgb (0.165113, 0.247965, 0.428908) , + rgb (0.170362, 0.250707, 0.428325) , + rgb (0.17549, 0.253444, 0.42779) , + rgb (0.180503, 0.25618, 0.427299) , + rgb (0.185453, 0.258914, 0.426788) , + rgb (0.190303, 0.261644, 0.426329) , + rgb (0.195057, 0.264372, 0.425924) , + rgb (0.199764, 0.267099, 0.425497) , + rgb (0.204385, 0.269823, 0.425126) , + rgb (0.208926, 0.272546, 0.424809) , + rgb (0.213431, 0.275266, 0.42448) , + rgb (0.217863, 0.277985, 0.424206) , + rgb (0.222264, 0.280702, 0.423914) , + rgb (0.226598, 0.283419, 0.423678) , + rgb (0.230871, 0.286134, 0.423498) , + rgb (0.23512, 0.288848, 0.423304) , + rgb (0.239312, 0.291562, 0.423167) , + rgb (0.243485, 0.294274, 0.423014) , + rgb (0.247605, 0.296986, 0.422917) , + rgb (0.251675, 0.299698, 0.422873) , + rgb (0.255731, 0.302409, 0.422814) , + rgb (0.25974, 0.30512, 0.42281) , + rgb (0.263738, 0.307831, 0.422789) , + rgb (0.267693, 0.310542, 0.422821) , + rgb (0.271639, 0.313253, 0.422837) , + rgb (0.275513, 0.315965, 0.422979) , + rgb (0.279411, 0.318677, 0.423031) , + rgb (0.28324, 0.32139, 0.423211) , + rgb (0.287065, 0.324103, 0.423373) , + rgb (0.290884, 0.326816, 0.423517) , + rgb (0.294669, 0.329531, 0.423716) , + rgb (0.298421, 0.332247, 0.423973) , + rgb (0.302169, 0.334963, 0.424213) , + rgb (0.305886, 0.337681, 0.424512) , + rgb (0.309601, 0.340399, 0.42479) , + rgb (0.313287, 0.34312, 0.42512) , + rgb (0.316941, 0.345842, 0.425512) , + rgb (0.320595, 0.348565, 0.425889) , + rgb (0.32425, 0.351289, 0.42625) , + rgb (0.327875, 0.354016, 0.42667) , + rgb (0.331474, 0.356744, 0.427144) , + rgb (0.335073, 0.359474, 0.427605) , + rgb (0.338673, 0.362206, 0.428053) , + rgb (0.342246, 0.364939, 0.428559) , + rgb (0.345793, 0.367676, 0.429127) , + rgb (0.349341, 0.370414, 0.429685) , + rgb (0.352892, 0.373153, 0.430226) , + rgb (0.356418, 0.375896, 0.430823) , + rgb (0.359916, 0.378641, 0.431501) , + rgb (0.363446, 0.381388, 0.432075) , + rgb (0.366923, 0.384139, 0.432796) , + rgb (0.37043, 0.38689, 0.433428) , + rgb (0.373884, 0.389646, 0.434209) , + rgb (0.377371, 0.392404, 0.43489) , + rgb (0.38083, 0.395164, 0.435653) , + rgb (0.384268, 0.397928, 0.436475) , + rgb (0.387705, 0.400694, 0.437305) , + rgb (0.391151, 0.403464, 0.438096) , + rgb (0.394568, 0.406236, 0.438986) , + rgb (0.397991, 0.409011, 0.439848) , + rgb (0.401418, 0.41179, 0.440708) , + rgb (0.40482, 0.414572, 0.441642) , + rgb (0.408226, 0.417357, 0.44257) , + rgb (0.411607, 0.420145, 0.443577) , + rgb (0.414992, 0.422937, 0.444578) , + rgb (0.418383, 0.425733, 0.44556) , + rgb (0.421748, 0.428531, 0.44664) , + rgb (0.42512, 0.431334, 0.447692) , + rgb (0.428462, 0.43414, 0.448864) , + rgb (0.431817, 0.43695, 0.449982) , + rgb (0.435168, 0.439763, 0.451134) , + rgb (0.438504, 0.44258, 0.452341) , + rgb (0.44181, 0.445402, 0.453659) , + rgb (0.445148, 0.448226, 0.454885) , + rgb (0.448447, 0.451053, 0.456264) , + rgb (0.451759, 0.453887, 0.457582) , + rgb (0.455072, 0.456718, 0.458976) , + rgb (0.458366, 0.459552, 0.460457) , + rgb (0.461616, 0.462405, 0.461969) , + rgb (0.464947, 0.465241, 0.463395) , + rgb (0.468254, 0.468083, 0.464908) , + rgb (0.471501, 0.47096, 0.466357) , + rgb (0.474812, 0.473832, 0.467681) , + rgb (0.478186, 0.476699, 0.468845) , + rgb (0.481622, 0.479573, 0.469767) , + rgb (0.485141, 0.482451, 0.470384) , + rgb (0.488697, 0.485318, 0.471008) , + rgb (0.492278, 0.488198, 0.471453) , + rgb (0.495913, 0.491076, 0.471751) , + rgb (0.499552, 0.49396, 0.472032) , + rgb (0.503185, 0.496851, 0.472305) , + rgb (0.506866, 0.499743, 0.472432) , + rgb (0.51054, 0.502643, 0.47255) , + rgb (0.514226, 0.505546, 0.47264) , + rgb (0.51792, 0.508454, 0.472707) , + rgb (0.521643, 0.511367, 0.472639) , + rgb (0.525348, 0.514285, 0.47266) , + rgb (0.529086, 0.517207, 0.472543) , + rgb (0.532829, 0.520135, 0.472401) , + rgb (0.536553, 0.523067, 0.472352) , + rgb (0.540307, 0.526005, 0.472163) , + rgb (0.544069, 0.528948, 0.471947) , + rgb (0.54784, 0.531895, 0.471704) , + rgb (0.551612, 0.534849, 0.471439) , + rgb (0.555393, 0.537807, 0.471147) , + rgb (0.559181, 0.540771, 0.470829) , + rgb (0.562972, 0.543741, 0.470488) , + rgb (0.566802, 0.546715, 0.469988) , + rgb (0.570607, 0.549695, 0.469593) , + rgb (0.574417, 0.552682, 0.469172) , + rgb (0.578236, 0.555673, 0.468724) , + rgb (0.582087, 0.55867, 0.468118) , + rgb (0.585916, 0.561674, 0.467618) , + rgb (0.589753, 0.564682, 0.46709) , + rgb (0.593622, 0.567697, 0.466401) , + rgb (0.597469, 0.570718, 0.465821) , + rgb (0.601354, 0.573743, 0.465074) , + rgb (0.605211, 0.576777, 0.464441) , + rgb (0.609105, 0.579816, 0.463638) , + rgb (0.612977, 0.582861, 0.46295) , + rgb (0.616852, 0.585913, 0.462237) , + rgb (0.620765, 0.58897, 0.461351) , + rgb (0.624654, 0.592034, 0.460583) , + rgb (0.628576, 0.595104, 0.459641) , + rgb (0.632506, 0.59818, 0.458668) , + rgb (0.636412, 0.601264, 0.457818) , + rgb (0.640352, 0.604354, 0.456791) , + rgb (0.64427, 0.60745, 0.455886) , + rgb (0.648222, 0.610553, 0.454801) , + rgb (0.652178, 0.613664, 0.453689) , + rgb (0.656114, 0.61678, 0.452702) , + rgb (0.660082, 0.619904, 0.451534) , + rgb (0.664055, 0.623034, 0.450338) , + rgb (0.668008, 0.626171, 0.44927) , + rgb (0.671991, 0.629316, 0.448018) , + rgb (0.675981, 0.632468, 0.446736) , + rgb (0.679979, 0.635626, 0.445424) , + rgb (0.68395, 0.638793, 0.444251) , + rgb (0.687957, 0.641966, 0.442886) , + rgb (0.691971, 0.645145, 0.441491) , + rgb (0.695985, 0.648334, 0.440072) , + rgb (0.700008, 0.651529, 0.438624) , + rgb (0.704037, 0.654731, 0.437147) , + rgb (0.708067, 0.657942, 0.435647) , + rgb (0.712105, 0.66116, 0.434117) , + rgb (0.716177, 0.664384, 0.432386) , + rgb (0.720222, 0.667618, 0.430805) , + rgb (0.724274, 0.670859, 0.429194) , + rgb (0.728334, 0.674107, 0.427554) , + rgb (0.732422, 0.677364, 0.425717) , + rgb (0.736488, 0.680629, 0.424028) , + rgb (0.740589, 0.6839, 0.422131) , + rgb (0.744664, 0.687181, 0.420393) , + rgb (0.748772, 0.69047, 0.418448) , + rgb (0.752886, 0.693766, 0.416472) , + rgb (0.756975, 0.697071, 0.414659) , + rgb (0.761096, 0.700384, 0.412638) , + rgb (0.765223, 0.703705, 0.410587) , + rgb (0.769353, 0.707035, 0.408516) , + rgb (0.773486, 0.710373, 0.406422) , + rgb (0.777651, 0.713719, 0.404112) , + rgb (0.781795, 0.717074, 0.401966) , + rgb (0.785965, 0.720438, 0.399613) , + rgb (0.790116, 0.72381, 0.397423) , + rgb (0.794298, 0.72719, 0.395016) , + rgb (0.79848, 0.73058, 0.392597) , + rgb (0.802667, 0.733978, 0.390153) , + rgb (0.806859, 0.737385, 0.387684) , + rgb (0.811054, 0.740801, 0.385198) , + rgb (0.815274, 0.744226, 0.382504) , + rgb (0.819499, 0.747659, 0.379785) , + rgb (0.823729, 0.751101, 0.377043) , + rgb (0.827959, 0.754553, 0.374292) , + rgb (0.832192, 0.758014, 0.371529) , + rgb (0.836429, 0.761483, 0.368747) , + rgb (0.840693, 0.764962, 0.365746) , + rgb (0.844957, 0.76845, 0.362741) , + rgb (0.849223, 0.771947, 0.359729) , + rgb (0.853515, 0.775454, 0.3565) , + rgb (0.857809, 0.778969, 0.353259) , + rgb (0.862105, 0.782494, 0.350011) , + rgb (0.866421, 0.786028, 0.346571) , + rgb (0.870717, 0.789572, 0.343333) , + rgb (0.875057, 0.793125, 0.339685) , + rgb (0.879378, 0.796687, 0.336241) , + rgb (0.88372, 0.800258, 0.332599) , + rgb (0.888081, 0.803839, 0.32877) , + rgb (0.89244, 0.80743, 0.324968) , + rgb (0.896818, 0.81103, 0.320982) , + rgb (0.901195, 0.814639, 0.317021) , + rgb (0.905589, 0.818257, 0.312889) , + rgb (0.91, 0.821885, 0.308594) , + rgb (0.914407, 0.825522, 0.304348) , + rgb (0.918828, 0.829168, 0.29996) , + rgb (0.923279, 0.832822, 0.295244) , + rgb (0.927724, 0.836486, 0.290611) , + rgb (0.93218, 0.840159, 0.28588) , + rgb (0.93666, 0.843841, 0.280876) , + rgb (0.941147, 0.84753, 0.275815) , + rgb (0.945654, 0.851228, 0.270532) , + rgb (0.950178, 0.854933, 0.265085) , + rgb (0.954725, 0.858646, 0.259365) , + rgb (0.959284, 0.862365, 0.253563) , + rgb (0.963872, 0.866089, 0.247445) , + rgb (0.968469, 0.869819, 0.24131) , + rgb (0.973114, 0.87355, 0.234677) , + rgb (0.97778, 0.877281, 0.227954) , + rgb (0.982497, 0.881008, 0.220878) , + rgb (0.987293, 0.884718, 0.213336) , + rgb (0.992218, 0.888385, 0.205468) , + rgb (0.994847, 0.892954, 0.203445) , + rgb (0.995249, 0.898384, 0.207561) , + rgb (0.995503, 0.903866, 0.21237) , + rgb (0.995737, 0.909344, 0.217772) + }); list_data inferno = list_data(new pen[] { - rgb (0.001462, 0.000466, 0.013866) , - rgb (0.002267, 0.00127, 0.01857) , - rgb (0.003299, 0.002249, 0.024239) , - rgb (0.004547, 0.003392, 0.030909) , - rgb (0.006006, 0.004692, 0.038558) , - rgb (0.007676, 0.006136, 0.046836) , - rgb (0.009561, 0.007713, 0.055143) , - rgb (0.011663, 0.009417, 0.06346) , - rgb (0.013995, 0.011225, 0.071862) , - rgb (0.016561, 0.013136, 0.080282) , - rgb (0.019373, 0.015133, 0.088767) , - rgb (0.022447, 0.017199, 0.097327) , - rgb (0.025793, 0.019331, 0.10593) , - rgb (0.029432, 0.021503, 0.114621) , - rgb (0.033385, 0.023702, 0.123397) , - rgb (0.037668, 0.025921, 0.132232) , - rgb (0.042253, 0.028139, 0.141141) , - rgb (0.046915, 0.030324, 0.150164) , - rgb (0.051644, 0.032474, 0.159254) , - rgb (0.056449, 0.034569, 0.168414) , - rgb (0.06134, 0.03659, 0.177642) , - rgb (0.066331, 0.038504, 0.186962) , - rgb (0.071429, 0.040294, 0.196354) , - rgb (0.076637, 0.041905, 0.205799) , - rgb (0.081962, 0.043328, 0.215289) , - rgb (0.087411, 0.044556, 0.224813) , - rgb (0.09299, 0.045583, 0.234358) , - rgb (0.098702, 0.046402, 0.243904) , - rgb (0.104551, 0.047008, 0.25343) , - rgb (0.110536, 0.047399, 0.262912) , - rgb (0.116656, 0.047574, 0.272321) , - rgb (0.122908, 0.047536, 0.281624) , - rgb (0.129285, 0.047293, 0.290788) , - rgb (0.135778, 0.046856, 0.299776) , - rgb (0.142378, 0.046242, 0.308553) , - rgb (0.149073, 0.045468, 0.317085) , - rgb (0.15585, 0.044559, 0.325338) , - rgb (0.162689, 0.043554, 0.333277) , - rgb (0.169575, 0.042489, 0.340874) , - rgb (0.176493, 0.041402, 0.348111) , - rgb (0.183429, 0.040329, 0.354971) , - rgb (0.190367, 0.039309, 0.361447) , - rgb (0.197297, 0.0384, 0.367535) , - rgb (0.204209, 0.037632, 0.373238) , - rgb (0.211095, 0.03703, 0.378563) , - rgb (0.217949, 0.036615, 0.383522) , - rgb (0.224763, 0.036405, 0.388129) , - rgb (0.231538, 0.036405, 0.3924) , - rgb (0.238273, 0.036621, 0.396353) , - rgb (0.244967, 0.037055, 0.400007) , - rgb (0.25162, 0.037705, 0.403378) , - rgb (0.258234, 0.038571, 0.406485) , - rgb (0.26481, 0.039647, 0.409345) , - rgb (0.271347, 0.040922, 0.411976) , - rgb (0.27785, 0.042353, 0.414392) , - rgb (0.284321, 0.043933, 0.416608) , - rgb (0.290763, 0.045644, 0.418637) , - rgb (0.297178, 0.04747, 0.420491) , - rgb (0.303568, 0.049396, 0.422182) , - rgb (0.309935, 0.051407, 0.423721) , - rgb (0.316282, 0.05349, 0.425116) , - rgb (0.32261, 0.055634, 0.426377) , - rgb (0.328921, 0.057827, 0.427511) , - rgb (0.335217, 0.06006, 0.428524) , - rgb (0.3415, 0.062325, 0.429425) , - rgb (0.347771, 0.064616, 0.430217) , - rgb (0.354032, 0.066925, 0.430906) , - rgb (0.360284, 0.069247, 0.431497) , - rgb (0.366529, 0.071579, 0.431994) , - rgb (0.372768, 0.073915, 0.4324) , - rgb (0.379001, 0.076253, 0.432719) , - rgb (0.385228, 0.078591, 0.432955) , - rgb (0.391453, 0.080927, 0.433109) , - rgb (0.397674, 0.083257, 0.433183) , - rgb (0.403894, 0.08558, 0.433179) , - rgb (0.410113, 0.087896, 0.433098) , - rgb (0.416331, 0.090203, 0.432943) , - rgb (0.422549, 0.092501, 0.432714) , - rgb (0.428768, 0.09479, 0.432412) , - rgb (0.434987, 0.097069, 0.432039) , - rgb (0.441207, 0.099338, 0.431594) , - rgb (0.447428, 0.101597, 0.43108) , - rgb (0.453651, 0.103848, 0.430498) , - rgb (0.459875, 0.106089, 0.429846) , - rgb (0.4661, 0.108322, 0.429125) , - rgb (0.472328, 0.110547, 0.428334) , - rgb (0.478558, 0.112764, 0.427475) , - rgb (0.484789, 0.114974, 0.426548) , - rgb (0.491022, 0.117179, 0.425552) , - rgb (0.497257, 0.119379, 0.424488) , - rgb (0.503493, 0.121575, 0.423356) , - rgb (0.50973, 0.123769, 0.422156) , - rgb (0.515967, 0.12596, 0.420887) , - rgb (0.522206, 0.12815, 0.419549) , - rgb (0.528444, 0.130341, 0.418142) , - rgb (0.534683, 0.132534, 0.416667) , - rgb (0.54092, 0.134729, 0.415123) , - rgb (0.547157, 0.136929, 0.413511) , - rgb (0.553392, 0.139134, 0.411829) , - rgb (0.559624, 0.141346, 0.410078) , - rgb (0.565854, 0.143567, 0.408258) , - rgb (0.572081, 0.145797, 0.406369) , - rgb (0.578304, 0.148039, 0.404411) , - rgb (0.584521, 0.150294, 0.402385) , - rgb (0.590734, 0.152563, 0.40029) , - rgb (0.59694, 0.154848, 0.398125) , - rgb (0.603139, 0.157151, 0.395891) , - rgb (0.60933, 0.159474, 0.393589) , - rgb (0.615513, 0.161817, 0.391219) , - rgb (0.621685, 0.164184, 0.388781) , - rgb (0.627847, 0.166575, 0.386276) , - rgb (0.633998, 0.168992, 0.383704) , - rgb (0.640135, 0.171438, 0.381065) , - rgb (0.64626, 0.173914, 0.378359) , - rgb (0.652369, 0.176421, 0.375586) , - rgb (0.658463, 0.178962, 0.372748) , - rgb (0.66454, 0.181539, 0.369846) , - rgb (0.670599, 0.184153, 0.366879) , - rgb (0.676638, 0.186807, 0.363849) , - rgb (0.682656, 0.189501, 0.360757) , - rgb (0.688653, 0.192239, 0.357603) , - rgb (0.694627, 0.195021, 0.354388) , - rgb (0.700576, 0.197851, 0.351113) , - rgb (0.7065, 0.200728, 0.347777) , - rgb (0.712396, 0.203656, 0.344383) , - rgb (0.718264, 0.206636, 0.340931) , - rgb (0.724103, 0.20967, 0.337424) , - rgb (0.729909, 0.212759, 0.333861) , - rgb (0.735683, 0.215906, 0.330245) , - rgb (0.741423, 0.219112, 0.326576) , - rgb (0.747127, 0.222378, 0.322856) , - rgb (0.752794, 0.225706, 0.319085) , - rgb (0.758422, 0.229097, 0.315266) , - rgb (0.76401, 0.232554, 0.311399) , - rgb (0.769556, 0.236077, 0.307485) , - rgb (0.775059, 0.239667, 0.303526) , - rgb (0.780517, 0.243327, 0.299523) , - rgb (0.785929, 0.247056, 0.295477) , - rgb (0.791293, 0.250856, 0.29139) , - rgb (0.796607, 0.254728, 0.287264) , - rgb (0.801871, 0.258674, 0.283099) , - rgb (0.807082, 0.262692, 0.278898) , - rgb (0.812239, 0.266786, 0.274661) , - rgb (0.817341, 0.270954, 0.27039) , - rgb (0.822386, 0.275197, 0.266085) , - rgb (0.827372, 0.279517, 0.26175) , - rgb (0.832299, 0.283913, 0.257383) , - rgb (0.837165, 0.288385, 0.252988) , - rgb (0.841969, 0.292933, 0.248564) , - rgb (0.846709, 0.297559, 0.244113) , - rgb (0.851384, 0.30226, 0.239636) , - rgb (0.855992, 0.307038, 0.235133) , - rgb (0.860533, 0.311892, 0.230606) , - rgb (0.865006, 0.316822, 0.226055) , - rgb (0.869409, 0.321827, 0.221482) , - rgb (0.873741, 0.326906, 0.216886) , - rgb (0.878001, 0.33206, 0.212268) , - rgb (0.882188, 0.337287, 0.207628) , - rgb (0.886302, 0.342586, 0.202968) , - rgb (0.890341, 0.347957, 0.198286) , - rgb (0.894305, 0.353399, 0.193584) , - rgb (0.898192, 0.358911, 0.18886) , - rgb (0.902003, 0.364492, 0.184116) , - rgb (0.905735, 0.37014, 0.17935) , - rgb (0.90939, 0.375856, 0.174563) , - rgb (0.912966, 0.381636, 0.169755) , - rgb (0.916462, 0.387481, 0.164924) , - rgb (0.919879, 0.393389, 0.16007) , - rgb (0.923215, 0.399359, 0.155193) , - rgb (0.92647, 0.405389, 0.150292) , - rgb (0.929644, 0.411479, 0.145367) , - rgb (0.932737, 0.417627, 0.140417) , - rgb (0.935747, 0.423831, 0.13544) , - rgb (0.938675, 0.430091, 0.130438) , - rgb (0.941521, 0.436405, 0.125409) , - rgb (0.944285, 0.442772, 0.120354) , - rgb (0.946965, 0.449191, 0.115272) , - rgb (0.949562, 0.45566, 0.110164) , - rgb (0.952075, 0.462178, 0.105031) , - rgb (0.954506, 0.468744, 0.099874) , - rgb (0.956852, 0.475356, 0.094695) , - rgb (0.959114, 0.482014, 0.089499) , - rgb (0.961293, 0.488716, 0.084289) , - rgb (0.963387, 0.495462, 0.079073) , - rgb (0.965397, 0.502249, 0.073859) , - rgb (0.967322, 0.509078, 0.068659) , - rgb (0.969163, 0.515946, 0.063488) , - rgb (0.970919, 0.522853, 0.058367) , - rgb (0.97259, 0.529798, 0.053324) , - rgb (0.974176, 0.53678, 0.048392) , - rgb (0.975677, 0.543798, 0.043618) , - rgb (0.977092, 0.55085, 0.03905) , - rgb (0.978422, 0.557937, 0.034931) , - rgb (0.979666, 0.565057, 0.031409) , - rgb (0.980824, 0.572209, 0.028508) , - rgb (0.981895, 0.579392, 0.02625) , - rgb (0.982881, 0.586606, 0.024661) , - rgb (0.983779, 0.593849, 0.02377) , - rgb (0.984591, 0.601122, 0.023606) , - rgb (0.985315, 0.608422, 0.024202) , - rgb (0.985952, 0.61575, 0.025592) , - rgb (0.986502, 0.623105, 0.027814) , - rgb (0.986964, 0.630485, 0.030908) , - rgb (0.987337, 0.63789, 0.034916) , - rgb (0.987622, 0.64532, 0.039886) , - rgb (0.987819, 0.652773, 0.045581) , - rgb (0.987926, 0.66025, 0.05175) , - rgb (0.987945, 0.667748, 0.058329) , - rgb (0.987874, 0.675267, 0.065257) , - rgb (0.987714, 0.682807, 0.072489) , - rgb (0.987464, 0.690366, 0.07999) , - rgb (0.987124, 0.697944, 0.087731) , - rgb (0.986694, 0.70554, 0.095694) , - rgb (0.986175, 0.713153, 0.103863) , - rgb (0.985566, 0.720782, 0.112229) , - rgb (0.984865, 0.728427, 0.120785) , - rgb (0.984075, 0.736087, 0.129527) , - rgb (0.983196, 0.743758, 0.138453) , - rgb (0.982228, 0.751442, 0.147565) , - rgb (0.981173, 0.759135, 0.156863) , - rgb (0.980032, 0.766837, 0.166353) , - rgb (0.978806, 0.774545, 0.176037) , - rgb (0.977497, 0.782258, 0.185923) , - rgb (0.976108, 0.789974, 0.196018) , - rgb (0.974638, 0.797692, 0.206332) , - rgb (0.973088, 0.805409, 0.216877) , - rgb (0.971468, 0.813122, 0.227658) , - rgb (0.969783, 0.820825, 0.238686) , - rgb (0.968041, 0.828515, 0.249972) , - rgb (0.966243, 0.836191, 0.261534) , - rgb (0.964394, 0.843848, 0.273391) , - rgb (0.962517, 0.851476, 0.285546) , - rgb (0.960626, 0.859069, 0.29801) , - rgb (0.95872, 0.866624, 0.31082) , - rgb (0.956834, 0.874129, 0.323974) , - rgb (0.954997, 0.881569, 0.337475) , - rgb (0.953215, 0.888942, 0.351369) , - rgb (0.951546, 0.896226, 0.365627) , - rgb (0.950018, 0.903409, 0.380271) , - rgb (0.948683, 0.910473, 0.395289) , - rgb (0.947594, 0.917399, 0.410665) , - rgb (0.946809, 0.924168, 0.426373) , - rgb (0.946392, 0.930761, 0.442367) , - rgb (0.946403, 0.937159, 0.458592) , - rgb (0.946903, 0.943348, 0.47497) , - rgb (0.947937, 0.949318, 0.491426) , - rgb (0.949545, 0.955063, 0.50786) , - rgb (0.95174, 0.960587, 0.524203) , - rgb (0.954529, 0.965896, 0.540361) , - rgb (0.957896, 0.971003, 0.556275) , - rgb (0.961812, 0.975924, 0.571925) , - rgb (0.966249, 0.980678, 0.587206) , - rgb (0.971162, 0.985282, 0.602154) , - rgb (0.976511, 0.989753, 0.61676) , - rgb (0.982257, 0.994109, 0.631017) , - rgb (0.988362, 0.998364, 0.644924) -}); + rgb (0.001462, 0.000466, 0.013866) , + rgb (0.002267, 0.00127, 0.01857) , + rgb (0.003299, 0.002249, 0.024239) , + rgb (0.004547, 0.003392, 0.030909) , + rgb (0.006006, 0.004692, 0.038558) , + rgb (0.007676, 0.006136, 0.046836) , + rgb (0.009561, 0.007713, 0.055143) , + rgb (0.011663, 0.009417, 0.06346) , + rgb (0.013995, 0.011225, 0.071862) , + rgb (0.016561, 0.013136, 0.080282) , + rgb (0.019373, 0.015133, 0.088767) , + rgb (0.022447, 0.017199, 0.097327) , + rgb (0.025793, 0.019331, 0.10593) , + rgb (0.029432, 0.021503, 0.114621) , + rgb (0.033385, 0.023702, 0.123397) , + rgb (0.037668, 0.025921, 0.132232) , + rgb (0.042253, 0.028139, 0.141141) , + rgb (0.046915, 0.030324, 0.150164) , + rgb (0.051644, 0.032474, 0.159254) , + rgb (0.056449, 0.034569, 0.168414) , + rgb (0.06134, 0.03659, 0.177642) , + rgb (0.066331, 0.038504, 0.186962) , + rgb (0.071429, 0.040294, 0.196354) , + rgb (0.076637, 0.041905, 0.205799) , + rgb (0.081962, 0.043328, 0.215289) , + rgb (0.087411, 0.044556, 0.224813) , + rgb (0.09299, 0.045583, 0.234358) , + rgb (0.098702, 0.046402, 0.243904) , + rgb (0.104551, 0.047008, 0.25343) , + rgb (0.110536, 0.047399, 0.262912) , + rgb (0.116656, 0.047574, 0.272321) , + rgb (0.122908, 0.047536, 0.281624) , + rgb (0.129285, 0.047293, 0.290788) , + rgb (0.135778, 0.046856, 0.299776) , + rgb (0.142378, 0.046242, 0.308553) , + rgb (0.149073, 0.045468, 0.317085) , + rgb (0.15585, 0.044559, 0.325338) , + rgb (0.162689, 0.043554, 0.333277) , + rgb (0.169575, 0.042489, 0.340874) , + rgb (0.176493, 0.041402, 0.348111) , + rgb (0.183429, 0.040329, 0.354971) , + rgb (0.190367, 0.039309, 0.361447) , + rgb (0.197297, 0.0384, 0.367535) , + rgb (0.204209, 0.037632, 0.373238) , + rgb (0.211095, 0.03703, 0.378563) , + rgb (0.217949, 0.036615, 0.383522) , + rgb (0.224763, 0.036405, 0.388129) , + rgb (0.231538, 0.036405, 0.3924) , + rgb (0.238273, 0.036621, 0.396353) , + rgb (0.244967, 0.037055, 0.400007) , + rgb (0.25162, 0.037705, 0.403378) , + rgb (0.258234, 0.038571, 0.406485) , + rgb (0.26481, 0.039647, 0.409345) , + rgb (0.271347, 0.040922, 0.411976) , + rgb (0.27785, 0.042353, 0.414392) , + rgb (0.284321, 0.043933, 0.416608) , + rgb (0.290763, 0.045644, 0.418637) , + rgb (0.297178, 0.04747, 0.420491) , + rgb (0.303568, 0.049396, 0.422182) , + rgb (0.309935, 0.051407, 0.423721) , + rgb (0.316282, 0.05349, 0.425116) , + rgb (0.32261, 0.055634, 0.426377) , + rgb (0.328921, 0.057827, 0.427511) , + rgb (0.335217, 0.06006, 0.428524) , + rgb (0.3415, 0.062325, 0.429425) , + rgb (0.347771, 0.064616, 0.430217) , + rgb (0.354032, 0.066925, 0.430906) , + rgb (0.360284, 0.069247, 0.431497) , + rgb (0.366529, 0.071579, 0.431994) , + rgb (0.372768, 0.073915, 0.4324) , + rgb (0.379001, 0.076253, 0.432719) , + rgb (0.385228, 0.078591, 0.432955) , + rgb (0.391453, 0.080927, 0.433109) , + rgb (0.397674, 0.083257, 0.433183) , + rgb (0.403894, 0.08558, 0.433179) , + rgb (0.410113, 0.087896, 0.433098) , + rgb (0.416331, 0.090203, 0.432943) , + rgb (0.422549, 0.092501, 0.432714) , + rgb (0.428768, 0.09479, 0.432412) , + rgb (0.434987, 0.097069, 0.432039) , + rgb (0.441207, 0.099338, 0.431594) , + rgb (0.447428, 0.101597, 0.43108) , + rgb (0.453651, 0.103848, 0.430498) , + rgb (0.459875, 0.106089, 0.429846) , + rgb (0.4661, 0.108322, 0.429125) , + rgb (0.472328, 0.110547, 0.428334) , + rgb (0.478558, 0.112764, 0.427475) , + rgb (0.484789, 0.114974, 0.426548) , + rgb (0.491022, 0.117179, 0.425552) , + rgb (0.497257, 0.119379, 0.424488) , + rgb (0.503493, 0.121575, 0.423356) , + rgb (0.50973, 0.123769, 0.422156) , + rgb (0.515967, 0.12596, 0.420887) , + rgb (0.522206, 0.12815, 0.419549) , + rgb (0.528444, 0.130341, 0.418142) , + rgb (0.534683, 0.132534, 0.416667) , + rgb (0.54092, 0.134729, 0.415123) , + rgb (0.547157, 0.136929, 0.413511) , + rgb (0.553392, 0.139134, 0.411829) , + rgb (0.559624, 0.141346, 0.410078) , + rgb (0.565854, 0.143567, 0.408258) , + rgb (0.572081, 0.145797, 0.406369) , + rgb (0.578304, 0.148039, 0.404411) , + rgb (0.584521, 0.150294, 0.402385) , + rgb (0.590734, 0.152563, 0.40029) , + rgb (0.59694, 0.154848, 0.398125) , + rgb (0.603139, 0.157151, 0.395891) , + rgb (0.60933, 0.159474, 0.393589) , + rgb (0.615513, 0.161817, 0.391219) , + rgb (0.621685, 0.164184, 0.388781) , + rgb (0.627847, 0.166575, 0.386276) , + rgb (0.633998, 0.168992, 0.383704) , + rgb (0.640135, 0.171438, 0.381065) , + rgb (0.64626, 0.173914, 0.378359) , + rgb (0.652369, 0.176421, 0.375586) , + rgb (0.658463, 0.178962, 0.372748) , + rgb (0.66454, 0.181539, 0.369846) , + rgb (0.670599, 0.184153, 0.366879) , + rgb (0.676638, 0.186807, 0.363849) , + rgb (0.682656, 0.189501, 0.360757) , + rgb (0.688653, 0.192239, 0.357603) , + rgb (0.694627, 0.195021, 0.354388) , + rgb (0.700576, 0.197851, 0.351113) , + rgb (0.7065, 0.200728, 0.347777) , + rgb (0.712396, 0.203656, 0.344383) , + rgb (0.718264, 0.206636, 0.340931) , + rgb (0.724103, 0.20967, 0.337424) , + rgb (0.729909, 0.212759, 0.333861) , + rgb (0.735683, 0.215906, 0.330245) , + rgb (0.741423, 0.219112, 0.326576) , + rgb (0.747127, 0.222378, 0.322856) , + rgb (0.752794, 0.225706, 0.319085) , + rgb (0.758422, 0.229097, 0.315266) , + rgb (0.76401, 0.232554, 0.311399) , + rgb (0.769556, 0.236077, 0.307485) , + rgb (0.775059, 0.239667, 0.303526) , + rgb (0.780517, 0.243327, 0.299523) , + rgb (0.785929, 0.247056, 0.295477) , + rgb (0.791293, 0.250856, 0.29139) , + rgb (0.796607, 0.254728, 0.287264) , + rgb (0.801871, 0.258674, 0.283099) , + rgb (0.807082, 0.262692, 0.278898) , + rgb (0.812239, 0.266786, 0.274661) , + rgb (0.817341, 0.270954, 0.27039) , + rgb (0.822386, 0.275197, 0.266085) , + rgb (0.827372, 0.279517, 0.26175) , + rgb (0.832299, 0.283913, 0.257383) , + rgb (0.837165, 0.288385, 0.252988) , + rgb (0.841969, 0.292933, 0.248564) , + rgb (0.846709, 0.297559, 0.244113) , + rgb (0.851384, 0.30226, 0.239636) , + rgb (0.855992, 0.307038, 0.235133) , + rgb (0.860533, 0.311892, 0.230606) , + rgb (0.865006, 0.316822, 0.226055) , + rgb (0.869409, 0.321827, 0.221482) , + rgb (0.873741, 0.326906, 0.216886) , + rgb (0.878001, 0.33206, 0.212268) , + rgb (0.882188, 0.337287, 0.207628) , + rgb (0.886302, 0.342586, 0.202968) , + rgb (0.890341, 0.347957, 0.198286) , + rgb (0.894305, 0.353399, 0.193584) , + rgb (0.898192, 0.358911, 0.18886) , + rgb (0.902003, 0.364492, 0.184116) , + rgb (0.905735, 0.37014, 0.17935) , + rgb (0.90939, 0.375856, 0.174563) , + rgb (0.912966, 0.381636, 0.169755) , + rgb (0.916462, 0.387481, 0.164924) , + rgb (0.919879, 0.393389, 0.16007) , + rgb (0.923215, 0.399359, 0.155193) , + rgb (0.92647, 0.405389, 0.150292) , + rgb (0.929644, 0.411479, 0.145367) , + rgb (0.932737, 0.417627, 0.140417) , + rgb (0.935747, 0.423831, 0.13544) , + rgb (0.938675, 0.430091, 0.130438) , + rgb (0.941521, 0.436405, 0.125409) , + rgb (0.944285, 0.442772, 0.120354) , + rgb (0.946965, 0.449191, 0.115272) , + rgb (0.949562, 0.45566, 0.110164) , + rgb (0.952075, 0.462178, 0.105031) , + rgb (0.954506, 0.468744, 0.099874) , + rgb (0.956852, 0.475356, 0.094695) , + rgb (0.959114, 0.482014, 0.089499) , + rgb (0.961293, 0.488716, 0.084289) , + rgb (0.963387, 0.495462, 0.079073) , + rgb (0.965397, 0.502249, 0.073859) , + rgb (0.967322, 0.509078, 0.068659) , + rgb (0.969163, 0.515946, 0.063488) , + rgb (0.970919, 0.522853, 0.058367) , + rgb (0.97259, 0.529798, 0.053324) , + rgb (0.974176, 0.53678, 0.048392) , + rgb (0.975677, 0.543798, 0.043618) , + rgb (0.977092, 0.55085, 0.03905) , + rgb (0.978422, 0.557937, 0.034931) , + rgb (0.979666, 0.565057, 0.031409) , + rgb (0.980824, 0.572209, 0.028508) , + rgb (0.981895, 0.579392, 0.02625) , + rgb (0.982881, 0.586606, 0.024661) , + rgb (0.983779, 0.593849, 0.02377) , + rgb (0.984591, 0.601122, 0.023606) , + rgb (0.985315, 0.608422, 0.024202) , + rgb (0.985952, 0.61575, 0.025592) , + rgb (0.986502, 0.623105, 0.027814) , + rgb (0.986964, 0.630485, 0.030908) , + rgb (0.987337, 0.63789, 0.034916) , + rgb (0.987622, 0.64532, 0.039886) , + rgb (0.987819, 0.652773, 0.045581) , + rgb (0.987926, 0.66025, 0.05175) , + rgb (0.987945, 0.667748, 0.058329) , + rgb (0.987874, 0.675267, 0.065257) , + rgb (0.987714, 0.682807, 0.072489) , + rgb (0.987464, 0.690366, 0.07999) , + rgb (0.987124, 0.697944, 0.087731) , + rgb (0.986694, 0.70554, 0.095694) , + rgb (0.986175, 0.713153, 0.103863) , + rgb (0.985566, 0.720782, 0.112229) , + rgb (0.984865, 0.728427, 0.120785) , + rgb (0.984075, 0.736087, 0.129527) , + rgb (0.983196, 0.743758, 0.138453) , + rgb (0.982228, 0.751442, 0.147565) , + rgb (0.981173, 0.759135, 0.156863) , + rgb (0.980032, 0.766837, 0.166353) , + rgb (0.978806, 0.774545, 0.176037) , + rgb (0.977497, 0.782258, 0.185923) , + rgb (0.976108, 0.789974, 0.196018) , + rgb (0.974638, 0.797692, 0.206332) , + rgb (0.973088, 0.805409, 0.216877) , + rgb (0.971468, 0.813122, 0.227658) , + rgb (0.969783, 0.820825, 0.238686) , + rgb (0.968041, 0.828515, 0.249972) , + rgb (0.966243, 0.836191, 0.261534) , + rgb (0.964394, 0.843848, 0.273391) , + rgb (0.962517, 0.851476, 0.285546) , + rgb (0.960626, 0.859069, 0.29801) , + rgb (0.95872, 0.866624, 0.31082) , + rgb (0.956834, 0.874129, 0.323974) , + rgb (0.954997, 0.881569, 0.337475) , + rgb (0.953215, 0.888942, 0.351369) , + rgb (0.951546, 0.896226, 0.365627) , + rgb (0.950018, 0.903409, 0.380271) , + rgb (0.948683, 0.910473, 0.395289) , + rgb (0.947594, 0.917399, 0.410665) , + rgb (0.946809, 0.924168, 0.426373) , + rgb (0.946392, 0.930761, 0.442367) , + rgb (0.946403, 0.937159, 0.458592) , + rgb (0.946903, 0.943348, 0.47497) , + rgb (0.947937, 0.949318, 0.491426) , + rgb (0.949545, 0.955063, 0.50786) , + rgb (0.95174, 0.960587, 0.524203) , + rgb (0.954529, 0.965896, 0.540361) , + rgb (0.957896, 0.971003, 0.556275) , + rgb (0.961812, 0.975924, 0.571925) , + rgb (0.966249, 0.980678, 0.587206) , + rgb (0.971162, 0.985282, 0.602154) , + rgb (0.976511, 0.989753, 0.61676) , + rgb (0.982257, 0.994109, 0.631017) , + rgb (0.988362, 0.998364, 0.644924) + }); list_data magma = list_data(new pen[] { - rgb (0.001462, 0.000466, 0.013866) , - rgb (0.002258, 0.001295, 0.018331) , - rgb (0.003279, 0.002305, 0.023708) , - rgb (0.004512, 0.00349, 0.029965) , - rgb (0.00595, 0.004843, 0.03713) , - rgb (0.007588, 0.006356, 0.044973) , - rgb (0.009426, 0.008022, 0.052844) , - rgb (0.011465, 0.009828, 0.06075) , - rgb (0.013708, 0.011771, 0.068667) , - rgb (0.016156, 0.01384, 0.076603) , - rgb (0.018815, 0.016026, 0.084584) , - rgb (0.021692, 0.01832, 0.09261) , - rgb (0.024792, 0.020715, 0.100676) , - rgb (0.028123, 0.023201, 0.108787) , - rgb (0.031696, 0.025765, 0.116965) , - rgb (0.03552, 0.028397, 0.125209) , - rgb (0.039608, 0.03109, 0.133515) , - rgb (0.04383, 0.03383, 0.141886) , - rgb (0.048062, 0.036607, 0.150327) , - rgb (0.05232, 0.039407, 0.158841) , - rgb (0.056615, 0.04216, 0.167446) , - rgb (0.060949, 0.044794, 0.176129) , - rgb (0.06533, 0.047318, 0.184892) , - rgb (0.069764, 0.049726, 0.193735) , - rgb (0.074257, 0.052017, 0.20266) , - rgb (0.078815, 0.054184, 0.211667) , - rgb (0.083446, 0.056225, 0.220755) , - rgb (0.088155, 0.058133, 0.229922) , - rgb (0.092949, 0.059904, 0.239164) , - rgb (0.097833, 0.061531, 0.248477) , - rgb (0.102815, 0.06301, 0.257854) , - rgb (0.107899, 0.064335, 0.267289) , - rgb (0.113094, 0.065492, 0.276784) , - rgb (0.118405, 0.066479, 0.286321) , - rgb (0.123833, 0.067295, 0.295879) , - rgb (0.12938, 0.067935, 0.305443) , - rgb (0.135053, 0.068391, 0.315) , - rgb (0.140858, 0.068654, 0.324538) , - rgb (0.146785, 0.068738, 0.334011) , - rgb (0.152839, 0.068637, 0.343404) , - rgb (0.159018, 0.068354, 0.352688) , - rgb (0.165308, 0.067911, 0.361816) , - rgb (0.171713, 0.067305, 0.370771) , - rgb (0.178212, 0.066576, 0.379497) , - rgb (0.184801, 0.065732, 0.387973) , - rgb (0.19146, 0.064818, 0.396152) , - rgb (0.198177, 0.063862, 0.404009) , - rgb (0.204935, 0.062907, 0.411514) , - rgb (0.211718, 0.061992, 0.418647) , - rgb (0.218512, 0.061158, 0.425392) , - rgb (0.225302, 0.060445, 0.431742) , - rgb (0.232077, 0.059889, 0.437695) , - rgb (0.238826, 0.059517, 0.443256) , - rgb (0.245543, 0.059352, 0.448436) , - rgb (0.25222, 0.059415, 0.453248) , - rgb (0.258857, 0.059706, 0.45771) , - rgb (0.265447, 0.060237, 0.46184) , - rgb (0.271994, 0.060994, 0.46566) , - rgb (0.278493, 0.061978, 0.46919) , - rgb (0.284951, 0.063168, 0.472451) , - rgb (0.291366, 0.064553, 0.475462) , - rgb (0.29774, 0.066117, 0.478243) , - rgb (0.304081, 0.067835, 0.480812) , - rgb (0.310382, 0.069702, 0.483186) , - rgb (0.316654, 0.07169, 0.48538) , - rgb (0.322899, 0.073782, 0.487408) , - rgb (0.329114, 0.075972, 0.489287) , - rgb (0.335308, 0.078236, 0.491024) , - rgb (0.341482, 0.080564, 0.492631) , - rgb (0.347636, 0.082946, 0.494121) , - rgb (0.353773, 0.085373, 0.495501) , - rgb (0.359898, 0.087831, 0.496778) , - rgb (0.366012, 0.090314, 0.49796) , - rgb (0.372116, 0.092816, 0.499053) , - rgb (0.378211, 0.095332, 0.500067) , - rgb (0.384299, 0.097855, 0.501002) , - rgb (0.390384, 0.100379, 0.501864) , - rgb (0.396467, 0.102902, 0.502658) , - rgb (0.402548, 0.10542, 0.503386) , - rgb (0.408629, 0.10793, 0.504052) , - rgb (0.414709, 0.110431, 0.504662) , - rgb (0.420791, 0.11292, 0.505215) , - rgb (0.426877, 0.115395, 0.505714) , - rgb (0.432967, 0.117855, 0.50616) , - rgb (0.439062, 0.120298, 0.506555) , - rgb (0.445163, 0.122724, 0.506901) , - rgb (0.451271, 0.125132, 0.507198) , - rgb (0.457386, 0.127522, 0.507448) , - rgb (0.463508, 0.129893, 0.507652) , - rgb (0.46964, 0.132245, 0.507809) , - rgb (0.47578, 0.134577, 0.507921) , - rgb (0.481929, 0.136891, 0.507989) , - rgb (0.488088, 0.139186, 0.508011) , - rgb (0.494258, 0.141462, 0.507988) , - rgb (0.500438, 0.143719, 0.50792) , - rgb (0.506629, 0.145958, 0.507806) , - rgb (0.512831, 0.148179, 0.507648) , - rgb (0.519045, 0.150383, 0.507443) , - rgb (0.52527, 0.152569, 0.507192) , - rgb (0.531507, 0.154739, 0.506895) , - rgb (0.537755, 0.156894, 0.506551) , - rgb (0.544015, 0.159033, 0.506159) , - rgb (0.550287, 0.161158, 0.505719) , - rgb (0.556571, 0.163269, 0.50523) , - rgb (0.562866, 0.165368, 0.504692) , - rgb (0.569172, 0.167454, 0.504105) , - rgb (0.57549, 0.16953, 0.503466) , - rgb (0.581819, 0.171596, 0.502777) , - rgb (0.588158, 0.173652, 0.502035) , - rgb (0.594508, 0.175701, 0.501241) , - rgb (0.600868, 0.177743, 0.500394) , - rgb (0.607238, 0.179779, 0.499492) , - rgb (0.613617, 0.181811, 0.498536) , - rgb (0.620005, 0.18384, 0.497524) , - rgb (0.626401, 0.185867, 0.496456) , - rgb (0.632805, 0.187893, 0.495332) , - rgb (0.639216, 0.189921, 0.49415) , - rgb (0.645633, 0.191952, 0.49291) , - rgb (0.652056, 0.193986, 0.491611) , - rgb (0.658483, 0.196027, 0.490253) , - rgb (0.664915, 0.198075, 0.488836) , - rgb (0.671349, 0.200133, 0.487358) , - rgb (0.677786, 0.202203, 0.485819) , - rgb (0.684224, 0.204286, 0.484219) , - rgb (0.690661, 0.206384, 0.482558) , - rgb (0.697098, 0.208501, 0.480835) , - rgb (0.703532, 0.210638, 0.479049) , - rgb (0.709962, 0.212797, 0.477201) , - rgb (0.716387, 0.214982, 0.47529) , - rgb (0.722805, 0.217194, 0.473316) , - rgb (0.729216, 0.219437, 0.471279) , - rgb (0.735616, 0.221713, 0.46918) , - rgb (0.742004, 0.224025, 0.467018) , - rgb (0.748378, 0.226377, 0.464794) , - rgb (0.754737, 0.228772, 0.462509) , - rgb (0.761077, 0.231214, 0.460162) , - rgb (0.767398, 0.233705, 0.457755) , - rgb (0.773695, 0.236249, 0.455289) , - rgb (0.779968, 0.238851, 0.452765) , - rgb (0.786212, 0.241514, 0.450184) , - rgb (0.792427, 0.244242, 0.447543) , - rgb (0.798608, 0.24704, 0.444848) , - rgb (0.804752, 0.249911, 0.442102) , - rgb (0.810855, 0.252861, 0.439305) , - rgb (0.816914, 0.255895, 0.436461) , - rgb (0.822926, 0.259016, 0.433573) , - rgb (0.828886, 0.262229, 0.430644) , - rgb (0.834791, 0.26554, 0.427671) , - rgb (0.840636, 0.268953, 0.424666) , - rgb (0.846416, 0.272473, 0.421631) , - rgb (0.852126, 0.276106, 0.418573) , - rgb (0.857763, 0.279857, 0.415496) , - rgb (0.86332, 0.283729, 0.412403) , - rgb (0.868793, 0.287728, 0.409303) , - rgb (0.874176, 0.291859, 0.406205) , - rgb (0.879464, 0.296125, 0.403118) , - rgb (0.884651, 0.30053, 0.400047) , - rgb (0.889731, 0.305079, 0.397002) , - rgb (0.8947, 0.309773, 0.393995) , - rgb (0.899552, 0.314616, 0.391037) , - rgb (0.904281, 0.31961, 0.388137) , - rgb (0.908884, 0.324755, 0.385308) , - rgb (0.913354, 0.330052, 0.382563) , - rgb (0.917689, 0.3355, 0.379915) , - rgb (0.921884, 0.341098, 0.377376) , - rgb (0.925937, 0.346844, 0.374959) , - rgb (0.929845, 0.352734, 0.372677) , - rgb (0.933606, 0.358764, 0.370541) , - rgb (0.937221, 0.364929, 0.368567) , - rgb (0.940687, 0.371224, 0.366762) , - rgb (0.944006, 0.377643, 0.365136) , - rgb (0.94718, 0.384178, 0.363701) , - rgb (0.95021, 0.39082, 0.362468) , - rgb (0.953099, 0.397563, 0.361438) , - rgb (0.955849, 0.4044, 0.360619) , - rgb (0.958464, 0.411324, 0.360014) , - rgb (0.960949, 0.418323, 0.35963) , - rgb (0.96331, 0.42539, 0.359469) , - rgb (0.965549, 0.432519, 0.359529) , - rgb (0.967671, 0.439703, 0.35981) , - rgb (0.96968, 0.446936, 0.360311) , - rgb (0.971582, 0.45421, 0.36103) , - rgb (0.973381, 0.46152, 0.361965) , - rgb (0.975082, 0.468861, 0.363111) , - rgb (0.97669, 0.476226, 0.364466) , - rgb (0.97821, 0.483612, 0.366025) , - rgb (0.979645, 0.491014, 0.367783) , - rgb (0.981, 0.498428, 0.369734) , - rgb (0.982279, 0.505851, 0.371874) , - rgb (0.983485, 0.51328, 0.374198) , - rgb (0.984622, 0.520713, 0.376698) , - rgb (0.985693, 0.528148, 0.379371) , - rgb (0.9867, 0.535582, 0.38221) , - rgb (0.987646, 0.543015, 0.38521) , - rgb (0.988533, 0.550446, 0.388365) , - rgb (0.989363, 0.557873, 0.391671) , - rgb (0.990138, 0.565296, 0.395122) , - rgb (0.990871, 0.572706, 0.398714) , - rgb (0.991558, 0.580107, 0.402441) , - rgb (0.992196, 0.587502, 0.406299) , - rgb (0.992785, 0.594891, 0.410283) , - rgb (0.993326, 0.602275, 0.41439) , - rgb (0.993834, 0.609644, 0.418613) , - rgb (0.994309, 0.616999, 0.42295) , - rgb (0.994738, 0.62435, 0.427397) , - rgb (0.995122, 0.631696, 0.431951) , - rgb (0.99548, 0.639027, 0.436607) , - rgb (0.99581, 0.646344, 0.441361) , - rgb (0.996096, 0.653659, 0.446213) , - rgb (0.996341, 0.660969, 0.45116) , - rgb (0.99658, 0.668256, 0.456192) , - rgb (0.996775, 0.675541, 0.461314) , - rgb (0.996925, 0.682828, 0.466526) , - rgb (0.997077, 0.690088, 0.471811) , - rgb (0.997186, 0.697349, 0.477182) , - rgb (0.997254, 0.704611, 0.482635) , - rgb (0.997325, 0.711848, 0.488154) , - rgb (0.997351, 0.719089, 0.493755) , - rgb (0.997351, 0.726324, 0.499428) , - rgb (0.997341, 0.733545, 0.505167) , - rgb (0.997285, 0.740772, 0.510983) , - rgb (0.997228, 0.747981, 0.516859) , - rgb (0.997138, 0.75519, 0.522806) , - rgb (0.997019, 0.762398, 0.528821) , - rgb (0.996898, 0.769591, 0.534892) , - rgb (0.996727, 0.776795, 0.541039) , - rgb (0.996571, 0.783977, 0.547233) , - rgb (0.996369, 0.791167, 0.553499) , - rgb (0.996162, 0.798348, 0.55982) , - rgb (0.995932, 0.805527, 0.566202) , - rgb (0.99568, 0.812706, 0.572645) , - rgb (0.995424, 0.819875, 0.57914) , - rgb (0.995131, 0.827052, 0.585701) , - rgb (0.994851, 0.834213, 0.592307) , - rgb (0.994524, 0.841387, 0.598983) , - rgb (0.994222, 0.84854, 0.605696) , - rgb (0.993866, 0.855711, 0.612482) , - rgb (0.993545, 0.862859, 0.619299) , - rgb (0.99317, 0.870024, 0.626189) , - rgb (0.992831, 0.877168, 0.633109) , - rgb (0.99244, 0.88433, 0.640099) , - rgb (0.992089, 0.89147, 0.647116) , - rgb (0.991688, 0.898627, 0.654202) , - rgb (0.991332, 0.905763, 0.661309) , - rgb (0.99093, 0.912915, 0.668481) , - rgb (0.99057, 0.920049, 0.675675) , - rgb (0.990175, 0.927196, 0.682926) , - rgb (0.989815, 0.934329, 0.690198) , - rgb (0.989434, 0.94147, 0.697519) , - rgb (0.989077, 0.948604, 0.704863) , - rgb (0.988717, 0.955742, 0.712242) , - rgb (0.988367, 0.962878, 0.719649) , - rgb (0.988033, 0.970012, 0.727077) , - rgb (0.987691, 0.977154, 0.734536) , - rgb (0.987387, 0.984288, 0.742002) , - rgb (0.987053, 0.991438, 0.749504) -}); + rgb (0.001462, 0.000466, 0.013866) , + rgb (0.002258, 0.001295, 0.018331) , + rgb (0.003279, 0.002305, 0.023708) , + rgb (0.004512, 0.00349, 0.029965) , + rgb (0.00595, 0.004843, 0.03713) , + rgb (0.007588, 0.006356, 0.044973) , + rgb (0.009426, 0.008022, 0.052844) , + rgb (0.011465, 0.009828, 0.06075) , + rgb (0.013708, 0.011771, 0.068667) , + rgb (0.016156, 0.01384, 0.076603) , + rgb (0.018815, 0.016026, 0.084584) , + rgb (0.021692, 0.01832, 0.09261) , + rgb (0.024792, 0.020715, 0.100676) , + rgb (0.028123, 0.023201, 0.108787) , + rgb (0.031696, 0.025765, 0.116965) , + rgb (0.03552, 0.028397, 0.125209) , + rgb (0.039608, 0.03109, 0.133515) , + rgb (0.04383, 0.03383, 0.141886) , + rgb (0.048062, 0.036607, 0.150327) , + rgb (0.05232, 0.039407, 0.158841) , + rgb (0.056615, 0.04216, 0.167446) , + rgb (0.060949, 0.044794, 0.176129) , + rgb (0.06533, 0.047318, 0.184892) , + rgb (0.069764, 0.049726, 0.193735) , + rgb (0.074257, 0.052017, 0.20266) , + rgb (0.078815, 0.054184, 0.211667) , + rgb (0.083446, 0.056225, 0.220755) , + rgb (0.088155, 0.058133, 0.229922) , + rgb (0.092949, 0.059904, 0.239164) , + rgb (0.097833, 0.061531, 0.248477) , + rgb (0.102815, 0.06301, 0.257854) , + rgb (0.107899, 0.064335, 0.267289) , + rgb (0.113094, 0.065492, 0.276784) , + rgb (0.118405, 0.066479, 0.286321) , + rgb (0.123833, 0.067295, 0.295879) , + rgb (0.12938, 0.067935, 0.305443) , + rgb (0.135053, 0.068391, 0.315) , + rgb (0.140858, 0.068654, 0.324538) , + rgb (0.146785, 0.068738, 0.334011) , + rgb (0.152839, 0.068637, 0.343404) , + rgb (0.159018, 0.068354, 0.352688) , + rgb (0.165308, 0.067911, 0.361816) , + rgb (0.171713, 0.067305, 0.370771) , + rgb (0.178212, 0.066576, 0.379497) , + rgb (0.184801, 0.065732, 0.387973) , + rgb (0.19146, 0.064818, 0.396152) , + rgb (0.198177, 0.063862, 0.404009) , + rgb (0.204935, 0.062907, 0.411514) , + rgb (0.211718, 0.061992, 0.418647) , + rgb (0.218512, 0.061158, 0.425392) , + rgb (0.225302, 0.060445, 0.431742) , + rgb (0.232077, 0.059889, 0.437695) , + rgb (0.238826, 0.059517, 0.443256) , + rgb (0.245543, 0.059352, 0.448436) , + rgb (0.25222, 0.059415, 0.453248) , + rgb (0.258857, 0.059706, 0.45771) , + rgb (0.265447, 0.060237, 0.46184) , + rgb (0.271994, 0.060994, 0.46566) , + rgb (0.278493, 0.061978, 0.46919) , + rgb (0.284951, 0.063168, 0.472451) , + rgb (0.291366, 0.064553, 0.475462) , + rgb (0.29774, 0.066117, 0.478243) , + rgb (0.304081, 0.067835, 0.480812) , + rgb (0.310382, 0.069702, 0.483186) , + rgb (0.316654, 0.07169, 0.48538) , + rgb (0.322899, 0.073782, 0.487408) , + rgb (0.329114, 0.075972, 0.489287) , + rgb (0.335308, 0.078236, 0.491024) , + rgb (0.341482, 0.080564, 0.492631) , + rgb (0.347636, 0.082946, 0.494121) , + rgb (0.353773, 0.085373, 0.495501) , + rgb (0.359898, 0.087831, 0.496778) , + rgb (0.366012, 0.090314, 0.49796) , + rgb (0.372116, 0.092816, 0.499053) , + rgb (0.378211, 0.095332, 0.500067) , + rgb (0.384299, 0.097855, 0.501002) , + rgb (0.390384, 0.100379, 0.501864) , + rgb (0.396467, 0.102902, 0.502658) , + rgb (0.402548, 0.10542, 0.503386) , + rgb (0.408629, 0.10793, 0.504052) , + rgb (0.414709, 0.110431, 0.504662) , + rgb (0.420791, 0.11292, 0.505215) , + rgb (0.426877, 0.115395, 0.505714) , + rgb (0.432967, 0.117855, 0.50616) , + rgb (0.439062, 0.120298, 0.506555) , + rgb (0.445163, 0.122724, 0.506901) , + rgb (0.451271, 0.125132, 0.507198) , + rgb (0.457386, 0.127522, 0.507448) , + rgb (0.463508, 0.129893, 0.507652) , + rgb (0.46964, 0.132245, 0.507809) , + rgb (0.47578, 0.134577, 0.507921) , + rgb (0.481929, 0.136891, 0.507989) , + rgb (0.488088, 0.139186, 0.508011) , + rgb (0.494258, 0.141462, 0.507988) , + rgb (0.500438, 0.143719, 0.50792) , + rgb (0.506629, 0.145958, 0.507806) , + rgb (0.512831, 0.148179, 0.507648) , + rgb (0.519045, 0.150383, 0.507443) , + rgb (0.52527, 0.152569, 0.507192) , + rgb (0.531507, 0.154739, 0.506895) , + rgb (0.537755, 0.156894, 0.506551) , + rgb (0.544015, 0.159033, 0.506159) , + rgb (0.550287, 0.161158, 0.505719) , + rgb (0.556571, 0.163269, 0.50523) , + rgb (0.562866, 0.165368, 0.504692) , + rgb (0.569172, 0.167454, 0.504105) , + rgb (0.57549, 0.16953, 0.503466) , + rgb (0.581819, 0.171596, 0.502777) , + rgb (0.588158, 0.173652, 0.502035) , + rgb (0.594508, 0.175701, 0.501241) , + rgb (0.600868, 0.177743, 0.500394) , + rgb (0.607238, 0.179779, 0.499492) , + rgb (0.613617, 0.181811, 0.498536) , + rgb (0.620005, 0.18384, 0.497524) , + rgb (0.626401, 0.185867, 0.496456) , + rgb (0.632805, 0.187893, 0.495332) , + rgb (0.639216, 0.189921, 0.49415) , + rgb (0.645633, 0.191952, 0.49291) , + rgb (0.652056, 0.193986, 0.491611) , + rgb (0.658483, 0.196027, 0.490253) , + rgb (0.664915, 0.198075, 0.488836) , + rgb (0.671349, 0.200133, 0.487358) , + rgb (0.677786, 0.202203, 0.485819) , + rgb (0.684224, 0.204286, 0.484219) , + rgb (0.690661, 0.206384, 0.482558) , + rgb (0.697098, 0.208501, 0.480835) , + rgb (0.703532, 0.210638, 0.479049) , + rgb (0.709962, 0.212797, 0.477201) , + rgb (0.716387, 0.214982, 0.47529) , + rgb (0.722805, 0.217194, 0.473316) , + rgb (0.729216, 0.219437, 0.471279) , + rgb (0.735616, 0.221713, 0.46918) , + rgb (0.742004, 0.224025, 0.467018) , + rgb (0.748378, 0.226377, 0.464794) , + rgb (0.754737, 0.228772, 0.462509) , + rgb (0.761077, 0.231214, 0.460162) , + rgb (0.767398, 0.233705, 0.457755) , + rgb (0.773695, 0.236249, 0.455289) , + rgb (0.779968, 0.238851, 0.452765) , + rgb (0.786212, 0.241514, 0.450184) , + rgb (0.792427, 0.244242, 0.447543) , + rgb (0.798608, 0.24704, 0.444848) , + rgb (0.804752, 0.249911, 0.442102) , + rgb (0.810855, 0.252861, 0.439305) , + rgb (0.816914, 0.255895, 0.436461) , + rgb (0.822926, 0.259016, 0.433573) , + rgb (0.828886, 0.262229, 0.430644) , + rgb (0.834791, 0.26554, 0.427671) , + rgb (0.840636, 0.268953, 0.424666) , + rgb (0.846416, 0.272473, 0.421631) , + rgb (0.852126, 0.276106, 0.418573) , + rgb (0.857763, 0.279857, 0.415496) , + rgb (0.86332, 0.283729, 0.412403) , + rgb (0.868793, 0.287728, 0.409303) , + rgb (0.874176, 0.291859, 0.406205) , + rgb (0.879464, 0.296125, 0.403118) , + rgb (0.884651, 0.30053, 0.400047) , + rgb (0.889731, 0.305079, 0.397002) , + rgb (0.8947, 0.309773, 0.393995) , + rgb (0.899552, 0.314616, 0.391037) , + rgb (0.904281, 0.31961, 0.388137) , + rgb (0.908884, 0.324755, 0.385308) , + rgb (0.913354, 0.330052, 0.382563) , + rgb (0.917689, 0.3355, 0.379915) , + rgb (0.921884, 0.341098, 0.377376) , + rgb (0.925937, 0.346844, 0.374959) , + rgb (0.929845, 0.352734, 0.372677) , + rgb (0.933606, 0.358764, 0.370541) , + rgb (0.937221, 0.364929, 0.368567) , + rgb (0.940687, 0.371224, 0.366762) , + rgb (0.944006, 0.377643, 0.365136) , + rgb (0.94718, 0.384178, 0.363701) , + rgb (0.95021, 0.39082, 0.362468) , + rgb (0.953099, 0.397563, 0.361438) , + rgb (0.955849, 0.4044, 0.360619) , + rgb (0.958464, 0.411324, 0.360014) , + rgb (0.960949, 0.418323, 0.35963) , + rgb (0.96331, 0.42539, 0.359469) , + rgb (0.965549, 0.432519, 0.359529) , + rgb (0.967671, 0.439703, 0.35981) , + rgb (0.96968, 0.446936, 0.360311) , + rgb (0.971582, 0.45421, 0.36103) , + rgb (0.973381, 0.46152, 0.361965) , + rgb (0.975082, 0.468861, 0.363111) , + rgb (0.97669, 0.476226, 0.364466) , + rgb (0.97821, 0.483612, 0.366025) , + rgb (0.979645, 0.491014, 0.367783) , + rgb (0.981, 0.498428, 0.369734) , + rgb (0.982279, 0.505851, 0.371874) , + rgb (0.983485, 0.51328, 0.374198) , + rgb (0.984622, 0.520713, 0.376698) , + rgb (0.985693, 0.528148, 0.379371) , + rgb (0.9867, 0.535582, 0.38221) , + rgb (0.987646, 0.543015, 0.38521) , + rgb (0.988533, 0.550446, 0.388365) , + rgb (0.989363, 0.557873, 0.391671) , + rgb (0.990138, 0.565296, 0.395122) , + rgb (0.990871, 0.572706, 0.398714) , + rgb (0.991558, 0.580107, 0.402441) , + rgb (0.992196, 0.587502, 0.406299) , + rgb (0.992785, 0.594891, 0.410283) , + rgb (0.993326, 0.602275, 0.41439) , + rgb (0.993834, 0.609644, 0.418613) , + rgb (0.994309, 0.616999, 0.42295) , + rgb (0.994738, 0.62435, 0.427397) , + rgb (0.995122, 0.631696, 0.431951) , + rgb (0.99548, 0.639027, 0.436607) , + rgb (0.99581, 0.646344, 0.441361) , + rgb (0.996096, 0.653659, 0.446213) , + rgb (0.996341, 0.660969, 0.45116) , + rgb (0.99658, 0.668256, 0.456192) , + rgb (0.996775, 0.675541, 0.461314) , + rgb (0.996925, 0.682828, 0.466526) , + rgb (0.997077, 0.690088, 0.471811) , + rgb (0.997186, 0.697349, 0.477182) , + rgb (0.997254, 0.704611, 0.482635) , + rgb (0.997325, 0.711848, 0.488154) , + rgb (0.997351, 0.719089, 0.493755) , + rgb (0.997351, 0.726324, 0.499428) , + rgb (0.997341, 0.733545, 0.505167) , + rgb (0.997285, 0.740772, 0.510983) , + rgb (0.997228, 0.747981, 0.516859) , + rgb (0.997138, 0.75519, 0.522806) , + rgb (0.997019, 0.762398, 0.528821) , + rgb (0.996898, 0.769591, 0.534892) , + rgb (0.996727, 0.776795, 0.541039) , + rgb (0.996571, 0.783977, 0.547233) , + rgb (0.996369, 0.791167, 0.553499) , + rgb (0.996162, 0.798348, 0.55982) , + rgb (0.995932, 0.805527, 0.566202) , + rgb (0.99568, 0.812706, 0.572645) , + rgb (0.995424, 0.819875, 0.57914) , + rgb (0.995131, 0.827052, 0.585701) , + rgb (0.994851, 0.834213, 0.592307) , + rgb (0.994524, 0.841387, 0.598983) , + rgb (0.994222, 0.84854, 0.605696) , + rgb (0.993866, 0.855711, 0.612482) , + rgb (0.993545, 0.862859, 0.619299) , + rgb (0.99317, 0.870024, 0.626189) , + rgb (0.992831, 0.877168, 0.633109) , + rgb (0.99244, 0.88433, 0.640099) , + rgb (0.992089, 0.89147, 0.647116) , + rgb (0.991688, 0.898627, 0.654202) , + rgb (0.991332, 0.905763, 0.661309) , + rgb (0.99093, 0.912915, 0.668481) , + rgb (0.99057, 0.920049, 0.675675) , + rgb (0.990175, 0.927196, 0.682926) , + rgb (0.989815, 0.934329, 0.690198) , + rgb (0.989434, 0.94147, 0.697519) , + rgb (0.989077, 0.948604, 0.704863) , + rgb (0.988717, 0.955742, 0.712242) , + rgb (0.988367, 0.962878, 0.719649) , + rgb (0.988033, 0.970012, 0.727077) , + rgb (0.987691, 0.977154, 0.734536) , + rgb (0.987387, 0.984288, 0.742002) , + rgb (0.987053, 0.991438, 0.749504) + }); list_data plasma = list_data(new pen[] { - rgb (0.050383, 0.029803, 0.527975) , - rgb (0.063536, 0.028426, 0.533124) , - rgb (0.075353, 0.027206, 0.538007) , - rgb (0.086222, 0.026125, 0.542658) , - rgb (0.096379, 0.025165, 0.547103) , - rgb (0.10598, 0.024309, 0.551368) , - rgb (0.115124, 0.023556, 0.555468) , - rgb (0.123903, 0.022878, 0.559423) , - rgb (0.132381, 0.022258, 0.56325) , - rgb (0.140603, 0.021687, 0.566959) , - rgb (0.148607, 0.021154, 0.570562) , - rgb (0.156421, 0.020651, 0.574065) , - rgb (0.16407, 0.020171, 0.577478) , - rgb (0.171574, 0.019706, 0.580806) , - rgb (0.17895, 0.019252, 0.584054) , - rgb (0.186213, 0.018803, 0.587228) , - rgb (0.193374, 0.018354, 0.59033) , - rgb (0.200445, 0.017902, 0.593364) , - rgb (0.207435, 0.017442, 0.596333) , - rgb (0.21435, 0.016973, 0.599239) , - rgb (0.221197, 0.016497, 0.602083) , - rgb (0.227983, 0.016007, 0.604867) , - rgb (0.234715, 0.015502, 0.607592) , - rgb (0.241396, 0.014979, 0.610259) , - rgb (0.248032, 0.014439, 0.612868) , - rgb (0.254627, 0.013882, 0.615419) , - rgb (0.261183, 0.013308, 0.617911) , - rgb (0.267703, 0.012716, 0.620346) , - rgb (0.274191, 0.012109, 0.622722) , - rgb (0.280648, 0.011488, 0.625038) , - rgb (0.287076, 0.010855, 0.627295) , - rgb (0.293478, 0.010213, 0.62949) , - rgb (0.299855, 0.009561, 0.631624) , - rgb (0.30621, 0.008902, 0.633694) , - rgb (0.312543, 0.008239, 0.6357) , - rgb (0.318856, 0.007576, 0.63764) , - rgb (0.32515, 0.006915, 0.639512) , - rgb (0.331426, 0.006261, 0.641316) , - rgb (0.337683, 0.005618, 0.643049) , - rgb (0.343925, 0.004991, 0.64471) , - rgb (0.35015, 0.004382, 0.646298) , - rgb (0.356359, 0.003798, 0.64781) , - rgb (0.362553, 0.003243, 0.649245) , - rgb (0.368733, 0.002724, 0.650601) , - rgb (0.374897, 0.002245, 0.651876) , - rgb (0.381047, 0.001814, 0.653068) , - rgb (0.387183, 0.001434, 0.654177) , - rgb (0.393304, 0.001114, 0.655199) , - rgb (0.399411, 0.000859, 0.656133) , - rgb (0.405503, 0.000678, 0.656977) , - rgb (0.41158, 0.000577, 0.65773) , - rgb (0.417642, 0.000564, 0.65839) , - rgb (0.423689, 0.000646, 0.658956) , - rgb (0.429719, 0.000831, 0.659425) , - rgb (0.435734, 0.001127, 0.659797) , - rgb (0.441732, 0.00154, 0.660069) , - rgb (0.447714, 0.00208, 0.66024) , - rgb (0.453677, 0.002755, 0.66031) , - rgb (0.459623, 0.003574, 0.660277) , - rgb (0.46555, 0.004545, 0.660139) , - rgb (0.471457, 0.005678, 0.659897) , - rgb (0.477344, 0.00698, 0.659549) , - rgb (0.48321, 0.00846, 0.659095) , - rgb (0.489055, 0.010127, 0.658534) , - rgb (0.494877, 0.01199, 0.657865) , - rgb (0.500678, 0.014055, 0.657088) , - rgb (0.506454, 0.016333, 0.656202) , - rgb (0.512206, 0.018833, 0.655209) , - rgb (0.517933, 0.021563, 0.654109) , - rgb (0.523633, 0.024532, 0.652901) , - rgb (0.529306, 0.027747, 0.651586) , - rgb (0.534952, 0.031217, 0.650165) , - rgb (0.54057, 0.03495, 0.64864) , - rgb (0.546157, 0.038954, 0.64701) , - rgb (0.551715, 0.043136, 0.645277) , - rgb (0.557243, 0.047331, 0.643443) , - rgb (0.562738, 0.051545, 0.641509) , - rgb (0.568201, 0.055778, 0.639477) , - rgb (0.573632, 0.060028, 0.637349) , - rgb (0.579029, 0.064296, 0.635126) , - rgb (0.584391, 0.068579, 0.632812) , - rgb (0.589719, 0.072878, 0.630408) , - rgb (0.595011, 0.07719, 0.627917) , - rgb (0.600266, 0.081516, 0.625342) , - rgb (0.605485, 0.085854, 0.622686) , - rgb (0.610667, 0.090204, 0.619951) , - rgb (0.615812, 0.094564, 0.61714) , - rgb (0.620919, 0.098934, 0.614257) , - rgb (0.625987, 0.103312, 0.611305) , - rgb (0.631017, 0.107699, 0.608287) , - rgb (0.636008, 0.112092, 0.605205) , - rgb (0.640959, 0.116492, 0.602065) , - rgb (0.645872, 0.120898, 0.598867) , - rgb (0.650746, 0.125309, 0.595617) , - rgb (0.65558, 0.129725, 0.592317) , - rgb (0.660374, 0.134144, 0.588971) , - rgb (0.665129, 0.138566, 0.585582) , - rgb (0.669845, 0.142992, 0.582154) , - rgb (0.674522, 0.147419, 0.578688) , - rgb (0.67916, 0.151848, 0.575189) , - rgb (0.683758, 0.156278, 0.57166) , - rgb (0.688318, 0.160709, 0.568103) , - rgb (0.69284, 0.165141, 0.564522) , - rgb (0.697324, 0.169573, 0.560919) , - rgb (0.701769, 0.174005, 0.557296) , - rgb (0.706178, 0.178437, 0.553657) , - rgb (0.710549, 0.182868, 0.550004) , - rgb (0.714883, 0.187299, 0.546338) , - rgb (0.719181, 0.191729, 0.542663) , - rgb (0.723444, 0.196158, 0.538981) , - rgb (0.72767, 0.200586, 0.535293) , - rgb (0.731862, 0.205013, 0.531601) , - rgb (0.736019, 0.209439, 0.527908) , - rgb (0.740143, 0.213864, 0.524216) , - rgb (0.744232, 0.218288, 0.520524) , - rgb (0.748289, 0.222711, 0.516834) , - rgb (0.752312, 0.227133, 0.513149) , - rgb (0.756304, 0.231555, 0.509468) , - rgb (0.760264, 0.235976, 0.505794) , - rgb (0.764193, 0.240396, 0.502126) , - rgb (0.76809, 0.244817, 0.498465) , - rgb (0.771958, 0.249237, 0.494813) , - rgb (0.775796, 0.253658, 0.491171) , - rgb (0.779604, 0.258078, 0.487539) , - rgb (0.783383, 0.2625, 0.483918) , - rgb (0.787133, 0.266922, 0.480307) , - rgb (0.790855, 0.271345, 0.476706) , - rgb (0.794549, 0.27577, 0.473117) , - rgb (0.798216, 0.280197, 0.469538) , - rgb (0.801855, 0.284626, 0.465971) , - rgb (0.805467, 0.289057, 0.462415) , - rgb (0.809052, 0.293491, 0.45887) , - rgb (0.812612, 0.297928, 0.455338) , - rgb (0.816144, 0.302368, 0.451816) , - rgb (0.819651, 0.306812, 0.448306) , - rgb (0.823132, 0.311261, 0.444806) , - rgb (0.826588, 0.315714, 0.441316) , - rgb (0.830018, 0.320172, 0.437836) , - rgb (0.833422, 0.324635, 0.434366) , - rgb (0.836801, 0.329105, 0.430905) , - rgb (0.840155, 0.33358, 0.427455) , - rgb (0.843484, 0.338062, 0.424013) , - rgb (0.846788, 0.342551, 0.420579) , - rgb (0.850066, 0.347048, 0.417153) , - rgb (0.853319, 0.351553, 0.413734) , - rgb (0.856547, 0.356066, 0.410322) , - rgb (0.85975, 0.360588, 0.406917) , - rgb (0.862927, 0.365119, 0.403519) , - rgb (0.866078, 0.36966, 0.400126) , - rgb (0.869203, 0.374212, 0.396738) , - rgb (0.872303, 0.378774, 0.393355) , - rgb (0.875376, 0.383347, 0.389976) , - rgb (0.878423, 0.387932, 0.3866) , - rgb (0.881443, 0.392529, 0.383229) , - rgb (0.884436, 0.397139, 0.37986) , - rgb (0.887402, 0.401762, 0.376494) , - rgb (0.89034, 0.406398, 0.37313) , - rgb (0.89325, 0.411048, 0.369768) , - rgb (0.896131, 0.415712, 0.366407) , - rgb (0.898984, 0.420392, 0.363047) , - rgb (0.901807, 0.425087, 0.359688) , - rgb (0.904601, 0.429797, 0.356329) , - rgb (0.907365, 0.434524, 0.35297) , - rgb (0.910098, 0.439268, 0.34961) , - rgb (0.9128, 0.444029, 0.346251) , - rgb (0.915471, 0.448807, 0.34289) , - rgb (0.918109, 0.453603, 0.339529) , - rgb (0.920714, 0.458417, 0.336166) , - rgb (0.923287, 0.463251, 0.332801) , - rgb (0.925825, 0.468103, 0.329435) , - rgb (0.928329, 0.472975, 0.326067) , - rgb (0.930798, 0.477867, 0.322697) , - rgb (0.933232, 0.48278, 0.319325) , - rgb (0.93563, 0.487712, 0.315952) , - rgb (0.93799, 0.492667, 0.312575) , - rgb (0.940313, 0.497642, 0.309197) , - rgb (0.942598, 0.502639, 0.305816) , - rgb (0.944844, 0.507658, 0.302433) , - rgb (0.947051, 0.512699, 0.299049) , - rgb (0.949217, 0.517763, 0.295662) , - rgb (0.951344, 0.52285, 0.292275) , - rgb (0.953428, 0.52796, 0.288883) , - rgb (0.95547, 0.533093, 0.28549) , - rgb (0.957469, 0.53825, 0.282096) , - rgb (0.959424, 0.543431, 0.278701) , - rgb (0.961336, 0.548636, 0.275305) , - rgb (0.963203, 0.553865, 0.271909) , - rgb (0.965024, 0.559118, 0.268513) , - rgb (0.966798, 0.564396, 0.265118) , - rgb (0.968526, 0.5697, 0.261721) , - rgb (0.970205, 0.575028, 0.258325) , - rgb (0.971835, 0.580382, 0.254931) , - rgb (0.973416, 0.585761, 0.25154) , - rgb (0.974947, 0.591165, 0.248151) , - rgb (0.976428, 0.596595, 0.244767) , - rgb (0.977856, 0.602051, 0.241387) , - rgb (0.979233, 0.607532, 0.238013) , - rgb (0.980556, 0.613039, 0.234646) , - rgb (0.981826, 0.618572, 0.231287) , - rgb (0.983041, 0.624131, 0.227937) , - rgb (0.984199, 0.629718, 0.224595) , - rgb (0.985301, 0.63533, 0.221265) , - rgb (0.986345, 0.640969, 0.217948) , - rgb (0.987332, 0.646633, 0.214648) , - rgb (0.98826, 0.652325, 0.211364) , - rgb (0.989128, 0.658043, 0.2081) , - rgb (0.989935, 0.663787, 0.204859) , - rgb (0.990681, 0.669558, 0.201642) , - rgb (0.991365, 0.675355, 0.198453) , - rgb (0.991985, 0.681179, 0.195295) , - rgb (0.992541, 0.68703, 0.19217) , - rgb (0.993032, 0.692907, 0.189084) , - rgb (0.993456, 0.69881, 0.186041) , - rgb (0.993814, 0.704741, 0.183043) , - rgb (0.994103, 0.710698, 0.180097) , - rgb (0.994324, 0.716681, 0.177208) , - rgb (0.994474, 0.722691, 0.174381) , - rgb (0.994553, 0.728728, 0.171622) , - rgb (0.994561, 0.734791, 0.168938) , - rgb (0.994495, 0.74088, 0.166335) , - rgb (0.994355, 0.746995, 0.163821) , - rgb (0.994141, 0.753137, 0.161404) , - rgb (0.993851, 0.759304, 0.159092) , - rgb (0.993482, 0.765499, 0.156891) , - rgb (0.993033, 0.77172, 0.154808) , - rgb (0.992505, 0.777967, 0.152855) , - rgb (0.991897, 0.784239, 0.151042) , - rgb (0.991209, 0.790537, 0.149377) , - rgb (0.990439, 0.796859, 0.14787) , - rgb (0.989587, 0.803205, 0.146529) , - rgb (0.988648, 0.809579, 0.145357) , - rgb (0.987621, 0.815978, 0.144363) , - rgb (0.986509, 0.822401, 0.143557) , - rgb (0.985314, 0.828846, 0.142945) , - rgb (0.984031, 0.835315, 0.142528) , - rgb (0.982653, 0.841812, 0.142303) , - rgb (0.98119, 0.848329, 0.142279) , - rgb (0.979644, 0.854866, 0.142453) , - rgb (0.977995, 0.861432, 0.142808) , - rgb (0.976265, 0.868016, 0.143351) , - rgb (0.974443, 0.874622, 0.144061) , - rgb (0.97253, 0.88125, 0.144923) , - rgb (0.970533, 0.887896, 0.145919) , - rgb (0.968443, 0.894564, 0.147014) , - rgb (0.966271, 0.901249, 0.14818) , - rgb (0.964021, 0.90795, 0.14937) , - rgb (0.961681, 0.914672, 0.15052) , - rgb (0.959276, 0.921407, 0.151566) , - rgb (0.956808, 0.928152, 0.152409) , - rgb (0.954287, 0.934908, 0.152921) , - rgb (0.951726, 0.941671, 0.152925) , - rgb (0.949151, 0.948435, 0.152178) , - rgb (0.946602, 0.95519, 0.150328) , - rgb (0.944152, 0.961916, 0.146861) , - rgb (0.941896, 0.96859, 0.140956) , - rgb (0.940015, 0.975158, 0.131326) -}); + rgb (0.050383, 0.029803, 0.527975) , + rgb (0.063536, 0.028426, 0.533124) , + rgb (0.075353, 0.027206, 0.538007) , + rgb (0.086222, 0.026125, 0.542658) , + rgb (0.096379, 0.025165, 0.547103) , + rgb (0.10598, 0.024309, 0.551368) , + rgb (0.115124, 0.023556, 0.555468) , + rgb (0.123903, 0.022878, 0.559423) , + rgb (0.132381, 0.022258, 0.56325) , + rgb (0.140603, 0.021687, 0.566959) , + rgb (0.148607, 0.021154, 0.570562) , + rgb (0.156421, 0.020651, 0.574065) , + rgb (0.16407, 0.020171, 0.577478) , + rgb (0.171574, 0.019706, 0.580806) , + rgb (0.17895, 0.019252, 0.584054) , + rgb (0.186213, 0.018803, 0.587228) , + rgb (0.193374, 0.018354, 0.59033) , + rgb (0.200445, 0.017902, 0.593364) , + rgb (0.207435, 0.017442, 0.596333) , + rgb (0.21435, 0.016973, 0.599239) , + rgb (0.221197, 0.016497, 0.602083) , + rgb (0.227983, 0.016007, 0.604867) , + rgb (0.234715, 0.015502, 0.607592) , + rgb (0.241396, 0.014979, 0.610259) , + rgb (0.248032, 0.014439, 0.612868) , + rgb (0.254627, 0.013882, 0.615419) , + rgb (0.261183, 0.013308, 0.617911) , + rgb (0.267703, 0.012716, 0.620346) , + rgb (0.274191, 0.012109, 0.622722) , + rgb (0.280648, 0.011488, 0.625038) , + rgb (0.287076, 0.010855, 0.627295) , + rgb (0.293478, 0.010213, 0.62949) , + rgb (0.299855, 0.009561, 0.631624) , + rgb (0.30621, 0.008902, 0.633694) , + rgb (0.312543, 0.008239, 0.6357) , + rgb (0.318856, 0.007576, 0.63764) , + rgb (0.32515, 0.006915, 0.639512) , + rgb (0.331426, 0.006261, 0.641316) , + rgb (0.337683, 0.005618, 0.643049) , + rgb (0.343925, 0.004991, 0.64471) , + rgb (0.35015, 0.004382, 0.646298) , + rgb (0.356359, 0.003798, 0.64781) , + rgb (0.362553, 0.003243, 0.649245) , + rgb (0.368733, 0.002724, 0.650601) , + rgb (0.374897, 0.002245, 0.651876) , + rgb (0.381047, 0.001814, 0.653068) , + rgb (0.387183, 0.001434, 0.654177) , + rgb (0.393304, 0.001114, 0.655199) , + rgb (0.399411, 0.000859, 0.656133) , + rgb (0.405503, 0.000678, 0.656977) , + rgb (0.41158, 0.000577, 0.65773) , + rgb (0.417642, 0.000564, 0.65839) , + rgb (0.423689, 0.000646, 0.658956) , + rgb (0.429719, 0.000831, 0.659425) , + rgb (0.435734, 0.001127, 0.659797) , + rgb (0.441732, 0.00154, 0.660069) , + rgb (0.447714, 0.00208, 0.66024) , + rgb (0.453677, 0.002755, 0.66031) , + rgb (0.459623, 0.003574, 0.660277) , + rgb (0.46555, 0.004545, 0.660139) , + rgb (0.471457, 0.005678, 0.659897) , + rgb (0.477344, 0.00698, 0.659549) , + rgb (0.48321, 0.00846, 0.659095) , + rgb (0.489055, 0.010127, 0.658534) , + rgb (0.494877, 0.01199, 0.657865) , + rgb (0.500678, 0.014055, 0.657088) , + rgb (0.506454, 0.016333, 0.656202) , + rgb (0.512206, 0.018833, 0.655209) , + rgb (0.517933, 0.021563, 0.654109) , + rgb (0.523633, 0.024532, 0.652901) , + rgb (0.529306, 0.027747, 0.651586) , + rgb (0.534952, 0.031217, 0.650165) , + rgb (0.54057, 0.03495, 0.64864) , + rgb (0.546157, 0.038954, 0.64701) , + rgb (0.551715, 0.043136, 0.645277) , + rgb (0.557243, 0.047331, 0.643443) , + rgb (0.562738, 0.051545, 0.641509) , + rgb (0.568201, 0.055778, 0.639477) , + rgb (0.573632, 0.060028, 0.637349) , + rgb (0.579029, 0.064296, 0.635126) , + rgb (0.584391, 0.068579, 0.632812) , + rgb (0.589719, 0.072878, 0.630408) , + rgb (0.595011, 0.07719, 0.627917) , + rgb (0.600266, 0.081516, 0.625342) , + rgb (0.605485, 0.085854, 0.622686) , + rgb (0.610667, 0.090204, 0.619951) , + rgb (0.615812, 0.094564, 0.61714) , + rgb (0.620919, 0.098934, 0.614257) , + rgb (0.625987, 0.103312, 0.611305) , + rgb (0.631017, 0.107699, 0.608287) , + rgb (0.636008, 0.112092, 0.605205) , + rgb (0.640959, 0.116492, 0.602065) , + rgb (0.645872, 0.120898, 0.598867) , + rgb (0.650746, 0.125309, 0.595617) , + rgb (0.65558, 0.129725, 0.592317) , + rgb (0.660374, 0.134144, 0.588971) , + rgb (0.665129, 0.138566, 0.585582) , + rgb (0.669845, 0.142992, 0.582154) , + rgb (0.674522, 0.147419, 0.578688) , + rgb (0.67916, 0.151848, 0.575189) , + rgb (0.683758, 0.156278, 0.57166) , + rgb (0.688318, 0.160709, 0.568103) , + rgb (0.69284, 0.165141, 0.564522) , + rgb (0.697324, 0.169573, 0.560919) , + rgb (0.701769, 0.174005, 0.557296) , + rgb (0.706178, 0.178437, 0.553657) , + rgb (0.710549, 0.182868, 0.550004) , + rgb (0.714883, 0.187299, 0.546338) , + rgb (0.719181, 0.191729, 0.542663) , + rgb (0.723444, 0.196158, 0.538981) , + rgb (0.72767, 0.200586, 0.535293) , + rgb (0.731862, 0.205013, 0.531601) , + rgb (0.736019, 0.209439, 0.527908) , + rgb (0.740143, 0.213864, 0.524216) , + rgb (0.744232, 0.218288, 0.520524) , + rgb (0.748289, 0.222711, 0.516834) , + rgb (0.752312, 0.227133, 0.513149) , + rgb (0.756304, 0.231555, 0.509468) , + rgb (0.760264, 0.235976, 0.505794) , + rgb (0.764193, 0.240396, 0.502126) , + rgb (0.76809, 0.244817, 0.498465) , + rgb (0.771958, 0.249237, 0.494813) , + rgb (0.775796, 0.253658, 0.491171) , + rgb (0.779604, 0.258078, 0.487539) , + rgb (0.783383, 0.2625, 0.483918) , + rgb (0.787133, 0.266922, 0.480307) , + rgb (0.790855, 0.271345, 0.476706) , + rgb (0.794549, 0.27577, 0.473117) , + rgb (0.798216, 0.280197, 0.469538) , + rgb (0.801855, 0.284626, 0.465971) , + rgb (0.805467, 0.289057, 0.462415) , + rgb (0.809052, 0.293491, 0.45887) , + rgb (0.812612, 0.297928, 0.455338) , + rgb (0.816144, 0.302368, 0.451816) , + rgb (0.819651, 0.306812, 0.448306) , + rgb (0.823132, 0.311261, 0.444806) , + rgb (0.826588, 0.315714, 0.441316) , + rgb (0.830018, 0.320172, 0.437836) , + rgb (0.833422, 0.324635, 0.434366) , + rgb (0.836801, 0.329105, 0.430905) , + rgb (0.840155, 0.33358, 0.427455) , + rgb (0.843484, 0.338062, 0.424013) , + rgb (0.846788, 0.342551, 0.420579) , + rgb (0.850066, 0.347048, 0.417153) , + rgb (0.853319, 0.351553, 0.413734) , + rgb (0.856547, 0.356066, 0.410322) , + rgb (0.85975, 0.360588, 0.406917) , + rgb (0.862927, 0.365119, 0.403519) , + rgb (0.866078, 0.36966, 0.400126) , + rgb (0.869203, 0.374212, 0.396738) , + rgb (0.872303, 0.378774, 0.393355) , + rgb (0.875376, 0.383347, 0.389976) , + rgb (0.878423, 0.387932, 0.3866) , + rgb (0.881443, 0.392529, 0.383229) , + rgb (0.884436, 0.397139, 0.37986) , + rgb (0.887402, 0.401762, 0.376494) , + rgb (0.89034, 0.406398, 0.37313) , + rgb (0.89325, 0.411048, 0.369768) , + rgb (0.896131, 0.415712, 0.366407) , + rgb (0.898984, 0.420392, 0.363047) , + rgb (0.901807, 0.425087, 0.359688) , + rgb (0.904601, 0.429797, 0.356329) , + rgb (0.907365, 0.434524, 0.35297) , + rgb (0.910098, 0.439268, 0.34961) , + rgb (0.9128, 0.444029, 0.346251) , + rgb (0.915471, 0.448807, 0.34289) , + rgb (0.918109, 0.453603, 0.339529) , + rgb (0.920714, 0.458417, 0.336166) , + rgb (0.923287, 0.463251, 0.332801) , + rgb (0.925825, 0.468103, 0.329435) , + rgb (0.928329, 0.472975, 0.326067) , + rgb (0.930798, 0.477867, 0.322697) , + rgb (0.933232, 0.48278, 0.319325) , + rgb (0.93563, 0.487712, 0.315952) , + rgb (0.93799, 0.492667, 0.312575) , + rgb (0.940313, 0.497642, 0.309197) , + rgb (0.942598, 0.502639, 0.305816) , + rgb (0.944844, 0.507658, 0.302433) , + rgb (0.947051, 0.512699, 0.299049) , + rgb (0.949217, 0.517763, 0.295662) , + rgb (0.951344, 0.52285, 0.292275) , + rgb (0.953428, 0.52796, 0.288883) , + rgb (0.95547, 0.533093, 0.28549) , + rgb (0.957469, 0.53825, 0.282096) , + rgb (0.959424, 0.543431, 0.278701) , + rgb (0.961336, 0.548636, 0.275305) , + rgb (0.963203, 0.553865, 0.271909) , + rgb (0.965024, 0.559118, 0.268513) , + rgb (0.966798, 0.564396, 0.265118) , + rgb (0.968526, 0.5697, 0.261721) , + rgb (0.970205, 0.575028, 0.258325) , + rgb (0.971835, 0.580382, 0.254931) , + rgb (0.973416, 0.585761, 0.25154) , + rgb (0.974947, 0.591165, 0.248151) , + rgb (0.976428, 0.596595, 0.244767) , + rgb (0.977856, 0.602051, 0.241387) , + rgb (0.979233, 0.607532, 0.238013) , + rgb (0.980556, 0.613039, 0.234646) , + rgb (0.981826, 0.618572, 0.231287) , + rgb (0.983041, 0.624131, 0.227937) , + rgb (0.984199, 0.629718, 0.224595) , + rgb (0.985301, 0.63533, 0.221265) , + rgb (0.986345, 0.640969, 0.217948) , + rgb (0.987332, 0.646633, 0.214648) , + rgb (0.98826, 0.652325, 0.211364) , + rgb (0.989128, 0.658043, 0.2081) , + rgb (0.989935, 0.663787, 0.204859) , + rgb (0.990681, 0.669558, 0.201642) , + rgb (0.991365, 0.675355, 0.198453) , + rgb (0.991985, 0.681179, 0.195295) , + rgb (0.992541, 0.68703, 0.19217) , + rgb (0.993032, 0.692907, 0.189084) , + rgb (0.993456, 0.69881, 0.186041) , + rgb (0.993814, 0.704741, 0.183043) , + rgb (0.994103, 0.710698, 0.180097) , + rgb (0.994324, 0.716681, 0.177208) , + rgb (0.994474, 0.722691, 0.174381) , + rgb (0.994553, 0.728728, 0.171622) , + rgb (0.994561, 0.734791, 0.168938) , + rgb (0.994495, 0.74088, 0.166335) , + rgb (0.994355, 0.746995, 0.163821) , + rgb (0.994141, 0.753137, 0.161404) , + rgb (0.993851, 0.759304, 0.159092) , + rgb (0.993482, 0.765499, 0.156891) , + rgb (0.993033, 0.77172, 0.154808) , + rgb (0.992505, 0.777967, 0.152855) , + rgb (0.991897, 0.784239, 0.151042) , + rgb (0.991209, 0.790537, 0.149377) , + rgb (0.990439, 0.796859, 0.14787) , + rgb (0.989587, 0.803205, 0.146529) , + rgb (0.988648, 0.809579, 0.145357) , + rgb (0.987621, 0.815978, 0.144363) , + rgb (0.986509, 0.822401, 0.143557) , + rgb (0.985314, 0.828846, 0.142945) , + rgb (0.984031, 0.835315, 0.142528) , + rgb (0.982653, 0.841812, 0.142303) , + rgb (0.98119, 0.848329, 0.142279) , + rgb (0.979644, 0.854866, 0.142453) , + rgb (0.977995, 0.861432, 0.142808) , + rgb (0.976265, 0.868016, 0.143351) , + rgb (0.974443, 0.874622, 0.144061) , + rgb (0.97253, 0.88125, 0.144923) , + rgb (0.970533, 0.887896, 0.145919) , + rgb (0.968443, 0.894564, 0.147014) , + rgb (0.966271, 0.901249, 0.14818) , + rgb (0.964021, 0.90795, 0.14937) , + rgb (0.961681, 0.914672, 0.15052) , + rgb (0.959276, 0.921407, 0.151566) , + rgb (0.956808, 0.928152, 0.152409) , + rgb (0.954287, 0.934908, 0.152921) , + rgb (0.951726, 0.941671, 0.152925) , + rgb (0.949151, 0.948435, 0.152178) , + rgb (0.946602, 0.95519, 0.150328) , + rgb (0.944152, 0.961916, 0.146861) , + rgb (0.941896, 0.96859, 0.140956) , + rgb (0.940015, 0.975158, 0.131326) + }); list_data twilight = list_data(new pen[] { - rgb (0.8857501584075443, 0.8500092494306783, 0.8879736506427196) , - rgb (0.8837852019553906, 0.8507294054031063, 0.8872322209694989) , - rgb (0.8817223105928579, 0.8512759407765347, 0.8863805692551482) , - rgb (0.8795410528270573, 0.8516567540749572, 0.8854143767924102) , - rgb (0.8772488085896548, 0.8518702833887027, 0.8843412038131143) , - rgb (0.8748534750857597, 0.8519152612302319, 0.8831692696761383) , - rgb (0.8723313408512408, 0.8518016547808089, 0.8818970435500162) , - rgb (0.8697047485350982, 0.8515240300479789, 0.8805388339000336) , - rgb (0.8669601550533358, 0.8510896085314068, 0.8790976697717334) , - rgb (0.86408985081464, 0.8505039116750779, 0.8775792578489263) , - rgb (0.8611024543689985, 0.8497675485700126, 0.8759924292343957) , - rgb (0.8579825924567037, 0.8488893481028184, 0.8743403855344628) , - rgb (0.8547259318925698, 0.8478748812467282, 0.8726282980930582) , - rgb (0.8513371457085719, 0.8467273579611647, 0.8708608165735044) , - rgb (0.8478071070257792, 0.8454546229209523, 0.8690403678369444) , - rgb (0.8441261828674842, 0.8440648271103739, 0.8671697332269007) , - rgb (0.8403042080595778, 0.8425605950855084, 0.865250882410458) , - rgb (0.8363403180919118, 0.8409479651895194, 0.8632852800107016) , - rgb (0.8322270571293441, 0.8392349062775448, 0.8612756350042788) , - rgb (0.8279689431601354, 0.837426007513952, 0.8592239945130679) , - rgb (0.8235742968025285, 0.8355248776479544, 0.8571319132851495) , - rgb (0.8190465467793753, 0.8335364929949034, 0.855002062870101) , - rgb (0.8143898212114309, 0.8314655869419785, 0.8528375906214702) , - rgb (0.8095999819094809, 0.8293189667350546, 0.8506444160105037) , - rgb (0.8046916442981458, 0.8270983878056066, 0.8484244929697402) , - rgb (0.79967075421268, 0.8248078181208093, 0.8461821002957853) , - rgb (0.7945430508923111, 0.8224511622630462, 0.8439218478682798) , - rgb (0.7893144556460892, 0.8200321318870201, 0.8416486380471222) , - rgb (0.7839910104276492, 0.8175542640053343, 0.8393674746403673) , - rgb (0.7785789200822759, 0.8150208937874255, 0.8370834463093898) , - rgb (0.7730841659017094, 0.8124352473546601, 0.8348017295057968) , - rgb (0.7675110850441786, 0.8098007598713145, 0.8325281663805967) , - rgb (0.7618690793798029, 0.8071194938764749, 0.830266486168872) , - rgb (0.7561644358438198, 0.8043940873347794, 0.8280213899472) , - rgb (0.750403467654067, 0.8016269900896532, 0.8257973785108242) , - rgb (0.7445924777189017, 0.7988204771958325, 0.8235986758615652) , - rgb (0.7387377170049494, 0.7959766573503101, 0.8214292278043301) , - rgb (0.7328454364552346, 0.7930974646884407, 0.8192926338423038) , - rgb (0.726921775128297, 0.7901846863592763, 0.8171921746672638) , - rgb (0.7209728066553678, 0.7872399592345264, 0.8151307392087926) , - rgb (0.7150040307625213, 0.7842648709158119, 0.8131111655994991) , - rgb (0.709020781345393, 0.7812608871607091, 0.8111359185511793) , - rgb (0.7030297722540817, 0.7782290497335813, 0.8092061884805697) , - rgb (0.6970365443886174, 0.7751705000806606, 0.8073233538006345) , - rgb (0.691046410093091, 0.7720862946067809, 0.8054884169067907) , - rgb (0.6850644615439593, 0.7689774029354699, 0.8037020626717691) , - rgb (0.6790955449988215, 0.765844721313959, 0.8019646617300199) , - rgb (0.6731442255942621, 0.7626890873389048, 0.8002762854580953) , - rgb (0.6672147980375281, 0.7595112803730375, 0.7986367465453776) , - rgb (0.6613112930078745, 0.7563120270871903, 0.7970456043491897) , - rgb (0.6554369232645472, 0.7530920875676843, 0.7955027112903105) , - rgb (0.6495957300425348, 0.7498520122194177, 0.7940067402149911) , - rgb (0.6437910831099849, 0.7465923800833657, 0.7925565320130605) , - rgb (0.6380258682854598, 0.7433137671403319, 0.7911510045957317) , - rgb (0.6323027138710603, 0.740016721601314, 0.7897889276264043) , - rgb (0.6266240202260459, 0.7367017540369944, 0.7884690131633456) , - rgb (0.6209919306481755, 0.733369347989232, 0.7871899462469658) , - rgb (0.6154084641177048, 0.7300199523273969, 0.7859502270675048) , - rgb (0.6098754317609306, 0.7266539875975829, 0.7847483573269471) , - rgb (0.6043943420027486, 0.7232718614323369, 0.7835829559353559) , - rgb (0.5989665814482068, 0.7198739489224673, 0.7824525989934664) , - rgb (0.5935933569683722, 0.7164606049658685, 0.781355882376401) , - rgb (0.588275797805555, 0.7130321464645814, 0.7802914140563652) , - rgb (0.5830148703693241, 0.7095888767699747, 0.7792578182047659) , - rgb (0.5778116438998202, 0.7061310615715398, 0.7782534512102552) , - rgb (0.5726668948158774, 0.7026589535425779, 0.7772770268091199) , - rgb (0.5675811785386197, 0.6991727930264627, 0.776327485342753) , - rgb (0.5625551535721934, 0.6956727838162965, 0.7754035914230984) , - rgb (0.5575894041960517, 0.6921591145825405, 0.7745041337932782) , - rgb (0.5526845058934713, 0.6886319451516638, 0.7736279426902245) , - rgb (0.5478409815301863, 0.6850914221850988, 0.7727738647344087) , - rgb (0.5430593242401823, 0.6815376725306588, 0.7719407969783508) , - rgb (0.5383401557517628, 0.677970811290954, 0.7711273443905772) , - rgb (0.533683891477284, 0.6743909370521273, 0.7703325054879735) , - rgb (0.529090861832473, 0.6707981230280622, 0.7695555229231313) , - rgb (0.5245615147059358, 0.6671924299614223, 0.7687954171423095) , - rgb (0.5200962739223556, 0.6635739143403039, 0.768051194033441) , - rgb (0.5156955988596057, 0.65994260812898, 0.7673219148959617) , - rgb (0.5113599254160193, 0.6562985398183186, 0.7666066378064533) , - rgb (0.5070896957645166, 0.6526417240314645, 0.7659044566083585) , - rgb (0.5028853540415561, 0.6489721673409526, 0.7652144671817491) , - rgb (0.4987473366135607, 0.6452898684900934, 0.7645357873418008) , - rgb (0.4946761847863938, 0.6415948411950443, 0.7638671900213091) , - rgb (0.4906722493856122, 0.6378870485884708, 0.7632081276316384) , - rgb (0.4867359599430568, 0.6341664625110051, 0.7625578008592404) , - rgb (0.4828677867260272, 0.6304330455306234, 0.761915371498953) , - rgb (0.47906816236197386, 0.6266867625186013, 0.7612800037566242) , - rgb (0.47533752394906287, 0.6229275728383581, 0.7606508557181775) , - rgb (0.4716762951887709, 0.6191554324288464, 0.7600270922788305) , - rgb (0.46808490970531597, 0.6153702869579029, 0.7594078989109274) , - rgb (0.4645637671630393, 0.6115720882286415, 0.7587924262302581) , - rgb (0.4611132664702388, 0.607760777169989, 0.7581798643680714) , - rgb (0.45773377230160567, 0.6039363004658646, 0.7575693690185916) , - rgb (0.45442563977552913, 0.6000985950385866, 0.7569601366060649) , - rgb (0.45118918687617743, 0.5962476205135354, 0.7563512064324664) , - rgb (0.4480247093358917, 0.5923833145214658, 0.7557417647410792) , - rgb (0.4449324685421538, 0.5885055998308617, 0.7551311041857901) , - rgb (0.441912717666964, 0.5846144110017557, 0.7545183888441067) , - rgb (0.43896563958048396, 0.5807096924109849, 0.7539027620828594) , - rgb (0.4360913895835637, 0.5767913799818608, 0.7532834105961016) , - rgb (0.43329008867358393, 0.5728594162560667, 0.7526594653256667) , - rgb (0.4305617907305757, 0.5689137457245718, 0.752030080993127) , - rgb (0.42790652284925834, 0.5649543060909209, 0.7513944352191484) , - rgb (0.42532423665011354, 0.560981049599503, 0.7507516498900512) , - rgb (0.4228148567577266, 0.5569939212699658, 0.7501008698822764) , - rgb (0.42037822361396326, 0.5529928715810817, 0.7494412559451894) , - rgb (0.4180141407923363, 0.5489778542188889, 0.7487719316700112) , - rgb (0.4157223260454232, 0.544948827153504, 0.7480920445900052) , - rgb (0.4135024574331473, 0.5409057477109848, 0.7474007329754309) , - rgb (0.4113541469730457, 0.5368485776500593, 0.7466971285506578) , - rgb (0.4092768899914751, 0.5327773017713032, 0.7459803063570782) , - rgb (0.4072701869421907, 0.5286918801105741, 0.7452494263758127) , - rgb (0.4053334378930318, 0.5245922817498312, 0.7445036583670813) , - rgb (0.40346600333905397, 0.5204784765384003, 0.7437421522356709) , - rgb (0.40166714010896104, 0.5163504496968876, 0.7429640345324835) , - rgb (0.39993606933454834, 0.5122081814321852, 0.7421684457131799) , - rgb (0.3982719152586337, 0.5080516653927614, 0.7413545091809972) , - rgb (0.3966737490566561, 0.5038808905384797, 0.7405213858051674) , - rgb (0.3951405880820763, 0.4996958532637776, 0.7396682021171571) , - rgb (0.39367135736822567, 0.4954965577745118, 0.738794102296364) , - rgb (0.39226494876209317, 0.4912830033289926, 0.7378982478447508) , - rgb (0.390920175719949, 0.4870552025122304, 0.7369797713388125) , - rgb (0.38963580160340855, 0.48281316715123496, 0.7360378254693274) , - rgb (0.3884105330084243, 0.47855691131792805, 0.7350715764115726) , - rgb (0.3872430145933025, 0.4742864593363539, 0.7340801678785439) , - rgb (0.386131841788921, 0.4700018340988123, 0.7330627749243106) , - rgb (0.3850755679365139, 0.46570306719930193, 0.732018540336905) , - rgb (0.38407269378943537, 0.46139018782416635, 0.7309466543290268) , - rgb (0.3831216808440275, 0.457063235814072, 0.7298462679135326) , - rgb (0.38222094988570376, 0.45272225034283325, 0.7287165614400378) , - rgb (0.3813688793045416, 0.4483672766927786, 0.7275567131714135) , - rgb (0.3805638069656562, 0.4439983720863372, 0.7263658704513531) , - rgb (0.3798040374484875, 0.4396155882122263, 0.7251432377876109) , - rgb (0.3790878928311076, 0.43521897612544935, 0.7238879869132313) , - rgb (0.378413635091359, 0.43080859411413064, 0.7225993199306104) , - rgb (0.3777794975351373, 0.4263845142616835, 0.7212763999353023) , - rgb (0.3771837184425123, 0.4219468022345483, 0.7199184152447577) , - rgb (0.37662448930806297, 0.41749553747893614, 0.7185245473617611) , - rgb (0.37610001286385814, 0.4130307995247706, 0.7170939691992023) , - rgb (0.375608469194424, 0.40855267638072096, 0.7156258509158755) , - rgb (0.37514802505380473, 0.4040612609993941, 0.7141193695725726) , - rgb (0.3747168601930223, 0.3995566498711684, 0.7125736851650046) , - rgb (0.3743131319931234, 0.3950389482828331, 0.7109879652237746) , - rgb (0.3739349933047578, 0.3905082752937583, 0.7093613429347845) , - rgb (0.3735806215098284, 0.3859647438605754, 0.7076929760731058) , - rgb (0.37324816143326384, 0.38140848555753937, 0.7059820097480604) , - rgb (0.3729357864666503, 0.3768396383521984, 0.7042275578058994) , - rgb (0.37264166757849604, 0.3722583500483685, 0.7024287314570723) , - rgb (0.37236397858465387, 0.36766477862108266, 0.7005846349652077) , - rgb (0.3721008970244382, 0.3630590973698238, 0.6986943461507372) , - rgb (0.3718506155898596, 0.3584414828587522, 0.6967569581025654) , - rgb (0.3716113323440048, 0.3538121372967869, 0.6947714991938089) , - rgb (0.37138124223736607, 0.34917126878479027, 0.6927370347192883) , - rgb (0.37115856636209105, 0.3445191141023017, 0.6906525358646499) , - rgb (0.3709415155133733, 0.33985591488818123, 0.6885170337950512) , - rgb (0.3707283327942267, 0.33518193808489577, 0.6863294816960677) , - rgb (0.37051738634484427, 0.3304974124430785, 0.6840888878885721) , - rgb (0.37030682071842685, 0.32580269697872455, 0.6817941168448668) , - rgb (0.37009487130772695, 0.3210981375964933, 0.6794440539905685) , - rgb (0.3698798032902536, 0.31638410101153364, 0.6770375543809057) , - rgb (0.36965987626565955, 0.3116609876295197, 0.6745734474341955) , - rgb (0.3694333459127623, 0.3069292355186234, 0.6720505284912062) , - rgb (0.36919847837592484, 0.3021893217650707, 0.6694675433161452) , - rgb (0.3689535530659678, 0.29744175492366276, 0.6668232208982426) , - rgb (0.3686968223189527, 0.292687098561501, 0.6641162529823691) , - rgb (0.36842655638020444, 0.2879259643777846, 0.661345269109446) , - rgb (0.3681410147989972, 0.2831590122118299, 0.6585088880697231) , - rgb (0.3678384369653108, 0.2783869718129776, 0.655605668384537) , - rgb (0.36751707094367697, 0.2736106331709098, 0.6526341171161864) , - rgb (0.36717513650699446, 0.26883085667326956, 0.6495927229789225) , - rgb (0.3668108554010799, 0.26404857724525643, 0.6464799165290824) , - rgb (0.3664224325155063, 0.25926481158628106, 0.6432940914076554) , - rgb (0.36600853966739794, 0.25448043878086224, 0.6400336180336859) , - rgb (0.3655669837353898, 0.24969683475296395, 0.6366967518748858) , - rgb (0.3650957984588681, 0.24491536803550484, 0.6332817352005559) , - rgb (0.3645930889012501, 0.24013747024823828, 0.629786801550261) , - rgb (0.3640569302208851, 0.23536470386204195, 0.6262101345195302) , - rgb (0.36348537610385145, 0.2305987621839642, 0.6225498862239288) , - rgb (0.3628764356004103, 0.2258414929328703, 0.6188041741082302) , - rgb (0.36222809558295926, 0.22109488427338303, 0.6149711234609613) , - rgb (0.36153829010998356, 0.21636111429594002, 0.6110488067964093) , - rgb (0.36080493826624654, 0.21164251793458128, 0.6070353217206471) , - rgb (0.36002681809096376, 0.20694122817889948, 0.6029284543191687) , - rgb (0.35920088560930186, 0.20226037920758122, 0.5987265295935138) , - rgb (0.3583248996661781, 0.197602942459778, 0.5944276851750107) , - rgb (0.35739663292915563, 0.1929720819784246, 0.5900301125106313) , - rgb (0.35641381143126327, 0.18837119869242164, 0.5855320765920552) , - rgb (0.3553741530690672, 0.18380392577704466, 0.580931914318328) , - rgb (0.3542753496066376, 0.17927413271618647, 0.5762280966066872) , - rgb (0.35311574421123737, 0.17478570377561287, 0.5714187152355529) , - rgb (0.3518924860887379, 0.17034320478524959, 0.5665028491121665) , - rgb (0.3506030444193101, 0.1659512998472086, 0.5614796470399323) , - rgb (0.34924513554955644, 0.16161477763045118, 0.5563483747416378) , - rgb (0.3478165323877778, 0.1573386351115298, 0.5511085345270326) , - rgb (0.3463150717579309, 0.15312802296627787, 0.5457599924248665) , - rgb (0.34473901574536375, 0.1489882058982641, 0.5403024592040654) , - rgb (0.34308600291572294, 0.14492465359918028, 0.534737042820671) , - rgb (0.34135411074506483, 0.1409427920655632, 0.5290650094033675) , - rgb (0.33954168752669694, 0.1370480189671817, 0.5232879753508524) , - rgb (0.3376473209067111, 0.13324562282438077, 0.5174080757397947) , - rgb (0.33566978565015315, 0.12954074251271822, 0.5114280721516895) , - rgb (0.33360804901486, 0.1259381830100592, 0.505351647966549) , - rgb (0.33146154891145124, 0.12244245263391232, 0.4991827458843107) , - rgb (0.3292300520323141, 0.11905764321981127, 0.49292595612342666) , - rgb (0.3269137124539796, 0.1157873496841953, 0.4865864649569746) , - rgb (0.32451307931207785, 0.11263459791730848, 0.48017007211645196) , - rgb (0.3220288227606932, 0.10960114111258401, 0.4736849472572688) , - rgb (0.31946262395497965, 0.1066887988239266, 0.46713728801395243) , - rgb (0.316816480890235, 0.10389861387653518, 0.46053414662739794) , - rgb (0.3140927841475553, 0.10123077676403242, 0.45388335612058467) , - rgb (0.31129434479712365, 0.0986847719340522, 0.4471931371516162) , - rgb (0.30842444457210105, 0.09625938534057774, 0.44047194882050544) , - rgb (0.30548675819945936, 0.09395276484082374, 0.4337284999936111) , - rgb (0.3024853636457425, 0.0917611873973036, 0.42697404043749887) , - rgb (0.2994248396021477, 0.08968225371675004, 0.42021619665853854) , - rgb (0.2963100038890529, 0.08771325096046395, 0.41346259134143476) , - rgb (0.2931459309698525, 0.08585065688962071, 0.40672178082365834) , - rgb (0.2899379244517661, 0.08409078829085731, 0.40000214725256295) , - rgb (0.28669151388283165, 0.08242987384848069, 0.39331182532243375) , - rgb (0.28341239797185225, 0.08086415336549937, 0.38665868550105914) , - rgb (0.2801063857697547, 0.07938999480226153, 0.38005028528138707) , - rgb (0.2767793961581559, 0.07800394103378822, 0.37349382846504675) , - rgb (0.2734373934245081, 0.07670280023749607, 0.36699616136347685) , - rgb (0.2700863774911405, 0.07548367558427554, 0.36056376228111864) , - rgb (0.26673233211995284, 0.0743440180285462, 0.3542027606624096) , - rgb (0.26338121807151404, 0.07328165793989708, 0.34791888996380105) , - rgb (0.26003895187439957, 0.0722947810433622, 0.3417175669546984) , - rgb (0.256711916510839, 0.07138010624208224, 0.3356064898460009) , - rgb (0.25340685873736807, 0.07053358292685183, 0.3295945757321303) , - rgb (0.2501284530619938, 0.06975820642910699, 0.32368100685760637) , - rgb (0.24688226237959, 0.06905363944920445, 0.31786993834254956) , - rgb (0.24367372557466271, 0.06841985515092269, 0.3121652405088837) , - rgb (0.2405081333229594, 0.0678571038148556, 0.3065705449367832) , - rgb (0.23739062429054825, 0.06736588805055552, 0.3010892218406587) , - rgb (0.23433055727563878, 0.0669355996616394, 0.295740099298676) , - rgb (0.23132955273021344, 0.06657618693909059, 0.29051361067988485) , - rgb (0.2283917709422868, 0.06628997924139618, 0.28541074411068496) , - rgb (0.22552164337737857, 0.0660781731193956, 0.28043398847505197) , - rgb (0.22272706739121817, 0.06593379067565194, 0.275597146520537) , - rgb (0.22001251100779617, 0.0658579189189076, 0.2709027999432586) , - rgb (0.21737845072382705, 0.06585966123356204, 0.2663420934966951) , - rgb (0.21482843531473683, 0.06594038561377849, 0.26191675992376573) , - rgb (0.21237411048541005, 0.06608502466175845, 0.2576516509356954) , - rgb (0.21001214221188125, 0.06630857391894718, 0.2535289048041211) , - rgb (0.2077442377448806, 0.06661453200418091, 0.24954644291943817) , - rgb (0.20558051999470117, 0.06699046239786874, 0.24572497420147632) , - rgb (0.20352007949514977, 0.06744417961242422, 0.24205576625191821) , - rgb (0.2015613376412984, 0.06798327102620025, 0.23852974228695395) , - rgb (0.19971571438603364, 0.06859271055370472, 0.23517094067076993) , - rgb (0.19794834061899208, 0.06931406607166066, 0.23194647381302336) , - rgb (0.1960826032659409, 0.07032122724242362, 0.22874673279569585) , - rgb (0.19410351363791453, 0.07160830485689157, 0.22558727307410353) , - rgb (0.19199449184606268, 0.0731828306492733, 0.22243385243433622) , - rgb (0.18975853639094634, 0.07501986186214377, 0.2193005075652994) , - rgb (0.18739228342697645, 0.07710209689958833, 0.21618875376309582) , - rgb (0.18488035509396164, 0.07942573027972388, 0.21307651648984993) , - rgb (0.18774482037046955, 0.07725158846803931, 0.21387448578597812) , - rgb (0.19049578401722037, 0.07531127841678764, 0.2146562337112265) , - rgb (0.1931548636579131, 0.07360681904011795, 0.21542362939081539) , - rgb (0.19571853588267552, 0.07215778103960274, 0.21617499187076789) , - rgb (0.19819343656336558, 0.07097462525273879, 0.21690975060032436) , - rgb (0.20058760685133747, 0.07006457614998421, 0.21762721310371608) , - rgb (0.20290365333558247, 0.06943524858045896, 0.21833167885096033) , - rgb (0.20531725273301316, 0.06891959226639757, 0.21911516689288835) , - rgb (0.20785704662965598, 0.06848439879702528, 0.22000133917653536) , - rgb (0.21052882914958676, 0.06812195249816172, 0.22098759107715404) , - rgb (0.2133313859647627, 0.06783014842602667, 0.2220704321302429) , - rgb (0.21625279838647882, 0.06761633027051639, 0.22324568672294431) , - rgb (0.21930503925136402, 0.06746578636294004, 0.22451023616807558) , - rgb (0.22247308588973624, 0.06738821405309284, 0.22585960379408354) , - rgb (0.2257539681670791, 0.06738213230014747, 0.22728984778098055) , - rgb (0.2291562027859284, 0.06743473087115257, 0.22879681433956656) , - rgb (0.23266299920501882, 0.06755710438847978, 0.23037617493752832) , - rgb (0.23627495835774248, 0.06774359820987802, 0.23202360805926608) , - rgb (0.23999586188690308, 0.06798502996477995, 0.23373434258507808) , - rgb (0.2438114972024792, 0.06828985152901187, 0.23550427698321885) , - rgb (0.247720929905011, 0.06865333790948652, 0.2373288009471749) , - rgb (0.25172899728289466, 0.0690646308260355, 0.23920260612763083) , - rgb (0.2558213554748177, 0.06953231029187984, 0.24112190491594204) , - rgb (0.25999463887892144, 0.07005385560386188, 0.24308218808684579) , - rgb (0.2642551220706094, 0.07061659562299544, 0.24507758869355967) , - rgb (0.2685909594817286, 0.07122671627792246, 0.24710443563450618) , - rgb (0.272997015188973, 0.07188355544616351, 0.2491584709323293) , - rgb (0.277471508091428, 0.07258296989925478, 0.2512349399594277) , - rgb (0.2820174629736694, 0.07331569321404097, 0.25332800295084507) , - rgb (0.28662309235899847, 0.07408846082680887, 0.2554347867371703) , - rgb (0.29128515387578635, 0.0748990498474667, 0.25755101595750435) , - rgb (0.2960004726065818, 0.07574533600095842, 0.25967245030364566) , - rgb (0.3007727681291869, 0.07661782433616476, 0.2617929409781967) , - rgb (0.30559226007249934, 0.07752196310753731, 0.2639100669211966) , - rgb (0.31045520848595526, 0.07845687167618218, 0.2660200572779356) , - rgb (0.3153587000920581, 0.07942099731524319, 0.2681190407694196) , - rgb (0.3202998655799406, 0.08041299473755484, 0.2702032289303951) , - rgb (0.3252788886040126, 0.08142839007654609, 0.27226772884656186) , - rgb (0.3302917447118144, 0.08246763389003825, 0.27430929404579435) , - rgb (0.3353335322445545, 0.08353243411900396, 0.2763253435679004) , - rgb (0.34040164359597463, 0.08462223619170267, 0.27831254595259397) , - rgb (0.345493557138718, 0.08573665496512634, 0.28026769921081435) , - rgb (0.3506067824603248, 0.08687555176033529, 0.28218770540182386) , - rgb (0.35573889947341125, 0.08803897435024335, 0.2840695897279818) , - rgb (0.36088752387578377, 0.0892271943627452, 0.28591050458531014) , - rgb (0.36605031412464006, 0.0904406854276979, 0.2877077458811747) , - rgb (0.3712250843130934, 0.09167999748026273, 0.2894586539763317) , - rgb (0.3764103053221462, 0.09294519809377791, 0.2911602415731392) , - rgb (0.38160247377467543, 0.09423873126371218, 0.2928110750626949) , - rgb (0.3867993907954417, 0.09556181960083443, 0.29440901248173756) , - rgb (0.39199887556812907, 0.09691583650296684, 0.2959521200550908) , - rgb (0.39719876876325577, 0.09830232096827862, 0.2974385647628578) , - rgb (0.40239692379737496, 0.09972293031495055, 0.2988667436973397) , - rgb (0.4075912039268871, 0.10117945586419633, 0.300235195077286) , - rgb (0.41277985630360303, 0.1026734006932461, 0.3015422643746897) , - rgb (0.41796105205173684, 0.10420644885760968, 0.3027865203963184) , - rgb (0.42313214269556043, 0.10578120994917611, 0.3039675809469457) , - rgb (0.4282910131578975, 0.1073997763055258, 0.30508479060294547) , - rgb (0.4334355841041439, 0.1090642347484701, 0.3061376792828915) , - rgb (0.4385637818793154, 0.11077667828375456, 0.30712600062348083) , - rgb (0.44367358645071275, 0.11253912421257944, 0.3080497309546545) , - rgb (0.4487629917317482, 0.1143535557462255, 0.30890905921943196) , - rgb (0.4538300508699989, 0.11622183788331528, 0.3097044124984492) , - rgb (0.45887288947308297, 0.11814571137706886, 0.3104363697903881) , - rgb (0.46389102840284874, 0.12012561256850712, 0.31110343446582983) , - rgb (0.46888111384598413, 0.12216445576414045, 0.31170911458932665) , - rgb (0.473841437035254, 0.12426354237989065, 0.31225470169927194) , - rgb (0.47877034239726296, 0.12642401401409453, 0.3127417273582196) , - rgb (0.48366628618847957, 0.1286467902201389, 0.31317188565991266) , - rgb (0.48852847371852987, 0.13093210934893723, 0.31354553695453014) , - rgb (0.49335504375145617, 0.13328091630401023, 0.31386561956734976) , - rgb (0.4981443546207415, 0.13569380302451714, 0.314135190862664) , - rgb (0.5028952497497061, 0.13817086581280427, 0.3143566215383367) , - rgb (0.5076068118105369, 0.14071192654913128, 0.3145320012008257) , - rgb (0.5122783510532176, 0.14331656120063752, 0.3146630922831542) , - rgb (0.5169084880054446, 0.14598463068714407, 0.3147540759228004) , - rgb (0.5214965286322996, 0.14871544765633712, 0.3148076795453443) , - rgb (0.5260418962547748, 0.15150818660835483, 0.31482653406646727) , - rgb (0.5305442048985645, 0.15436183633886777, 0.3148129978918713) , - rgb (0.5350027976174474, 0.15727540775107324, 0.3147708520739653) , - rgb (0.5394173664919906, 0.16024769309971934, 0.31470295028655965) , - rgb (0.5437877131360856, 0.16327738551419116, 0.31461204226295625) , - rgb (0.5481137003346762, 0.1663630904279047, 0.3145010299091471) , - rgb (0.5523952157271191, 0.16950338809328983, 0.3143729155461537) , - rgb (0.5566322903496934, 0.17269677158182117, 0.31423043195101424) , - rgb (0.5608249903911717, 0.17594170887918095, 0.31407639883970623) , - rgb (0.564973435290177, 0.17923664950367169, 0.3139136046337036) , - rgb (0.5690778478401143, 0.18258004462335425, 0.3137444095679653) , - rgb (0.5731384575410787, 0.18597036007065024, 0.3135712686852) , - rgb (0.5771555081299204, 0.18940601489760422, 0.3133970433357208) , - rgb (0.5811293276158656, 0.19288548904692518, 0.3132239939418394) , - rgb (0.5850602439646688, 0.19640737049066315, 0.3130540116373273) , - rgb (0.5889486193554471, 0.19997020971775276, 0.31288922211590126) , - rgb (0.5927948053652026, 0.20357251410079796, 0.3127323483930494) , - rgb (0.5965991810912237, 0.207212956082026, 0.3125852303112123) , - rgb (0.6003621301041158, 0.21089030138947745, 0.3124493441041469) , - rgb (0.6040840169673274, 0.21460331490206347, 0.31232652641170694) , - rgb (0.6077652399481865, 0.21835070166659282, 0.312219032918702) , - rgb (0.6114062072731884, 0.22213124697023234, 0.3121288139643524) , - rgb (0.6150072323639137, 0.22594402043981826, 0.3120568068576574) , - rgb (0.6185686525887719, 0.2297879924917992, 0.3120046383872893) , - rgb (0.6220907982108261, 0.2336621873300741, 0.3119738327362739) , - rgb (0.6255741650043496, 0.23756535071152696, 0.3119669831491227) , - rgb (0.6290189201698587, 0.24149689191922535, 0.3119844719564572) , - rgb (0.6324253485421027, 0.24545598775548677, 0.3120276597462445) , - rgb (0.6357937104834237, 0.24944185818822678, 0.3120979395330059) , - rgb (0.6391243387840212, 0.2534536546198314, 0.3121968961206398) , - rgb (0.642417577481186, 0.257490519876798, 0.31232631707560987) , - rgb (0.6456734938264543, 0.2615520316161528, 0.31248673753935263) , - rgb (0.6488923016945825, 0.2656375533620908, 0.3126794181957019) , - rgb (0.652074172902773, 0.269746505252367, 0.3129056060581917) , - rgb (0.6552193260932713, 0.2738782665241015, 0.3131666792687211) , - rgb (0.6583280801134499, 0.2780321095766563, 0.3134643447952643) , - rgb (0.6614003753260178, 0.28220778870555907, 0.3137991292649849) , - rgb (0.6644363246987884, 0.2864048361425618, 0.31417223403606975) , - rgb (0.6674360376636913, 0.29062280081258873, 0.31458483752056837) , - rgb (0.670399595476762, 0.29486126309253047, 0.3150381395687221) , - rgb (0.6733272556481733, 0.29911962764489264, 0.3155337232398221) , - rgb (0.6762189792440975, 0.30339762792450425, 0.3160724937230589) , - rgb (0.6790747402815734, 0.30769497879760166, 0.31665545668946665) , - rgb (0.6818945715094452, 0.31201133280550686, 0.3172838048924495) , - rgb (0.6846785094249453, 0.3163463482122221, 0.31795870784057567) , - rgb (0.6874265643516962, 0.32069970535138104, 0.3186813762227769) , - rgb (0.6901389321505248, 0.32507091815606004, 0.319453323328983) , - rgb (0.6928154484676493, 0.32945984647042675, 0.3202754315314667) , - rgb (0.6954560834689112, 0.33386622163232865, 0.3211488430698579) , - rgb (0.6980608153581771, 0.3382897632604862, 0.3220747885521809) , - rgb (0.700629624772421, 0.34273019305341756, 0.32305449047765694) , - rgb (0.7031624945881415, 0.34718723719598, 0.32408913679491225) , - rgb (0.7056595112261009, 0.3516605297812094, 0.32518014084085567) , - rgb (0.7081205956842048, 0.356149855233803, 0.32632861885644465) , - rgb (0.7105456546582587, 0.36065500290840113, 0.3275357416278876) , - rgb (0.7129346683977347, 0.36517570519856757, 0.3288027427038317) , - rgb (0.7152876061484729, 0.3697117022522345, 0.3301308728723546) , - rgb (0.7176044490813385, 0.3742627271068619, 0.3315213862095893) , - rgb (0.7198852149054985, 0.37882848839337313, 0.332975552002454) , - rgb (0.7221299918421461, 0.3834086450896306, 0.33449469983585844) , - rgb (0.7243386564778159, 0.38800301593162145, 0.3360799596569183) , - rgb (0.7265112290022755, 0.3926113126792577, 0.3377325942005665) , - rgb (0.7286477385671655, 0.39723324476747235, 0.33945384341064017) , - rgb (0.7307482075484517, 0.401868526884681, 0.3412449533046818) , - rgb (0.7328127050626875, 0.4065168468778026, 0.3431071517341082) , - rgb (0.7348413359856494, 0.4111778700451951, 0.3450416947080907) , - rgb (0.7368342217358587, 0.4158512585029011, 0.347049785207584) , - rgb (0.7387914002459927, 0.4205367299231533, 0.34913260148542435) , - rgb (0.7407130161950609, 0.4252339389526239, 0.35129130890802607) , - rgb (0.7425992159973317, 0.42994254036133867, 0.3535270924537459) , - rgb (0.7444501867657067, 0.4346621718461711, 0.35584108091122535) , - rgb (0.7462661578916344, 0.439392450449735, 0.3582343914230064) , - rgb (0.7480473927555956, 0.44413297780351974, 0.36070813602540136) , - rgb (0.7497942054717047, 0.4488833348154881, 0.3632633755836028) , - rgb (0.7515068504589166, 0.45364314496866825, 0.36590112443835765) , - rgb (0.7531856636904657, 0.45841199172949604, 0.3686223664223477) , - rgb (0.7548310506695954, 0.46318942799460555, 0.3714280448394211) , - rgb (0.7564434157714071, 0.4679750143794846, 0.37431909037543515) , - rgb (0.7580232553845584, 0.4727682731566229, 0.3772963553109668) , - rgb (0.7595711110534006, 0.4775687122205708, 0.380360657784311) , - rgb (0.7610876378057071, 0.48237579130289127, 0.3835127572385229) , - rgb (0.7625733355405261, 0.48718906673415824, 0.38675335037837993) , - rgb (0.7640288560928866, 0.49200802533379656, 0.39008308392311997) , - rgb (0.7654549259333051, 0.4968321290972723, 0.3935025400011538) , - rgb (0.7668522895064389, 0.5016608471009063, 0.39701221751773474) , - rgb (0.768221765997353, 0.5064936237128791, 0.40061257089416885) , - rgb (0.7695642334401418, 0.5113298901696085, 0.4043039806968248) , - rgb (0.7708809196230247, 0.516168926434691, 0.40808667584648967) , - rgb (0.7721725722960555, 0.5210102658711383, 0.4119608998712287) , - rgb (0.7734402182988989, 0.5258533209345156, 0.41592679539764366) , - rgb (0.774684947460632, 0.5306974938477673, 0.4199844035696376) , - rgb (0.775907907306857, 0.5355421788246119, 0.42413367909988375) , - rgb (0.7771103295521099, 0.5403867491056124, 0.4283745037125848) , - rgb (0.7782934580763312, 0.545230594884266, 0.432706647838971) , - rgb (0.7794586273150664, 0.5500730841397727, 0.4371297985644476) , - rgb (0.7806077474948377, 0.5549133574489061, 0.4416433242636464) , - rgb (0.7817418047898184, 0.5597509805259486, 0.44624687186865436) , - rgb (0.7828622526444091, 0.5645853311116688, 0.45093985823706345) , - rgb (0.7839706083641448, 0.5694157832671042, 0.4557215474289206) , - rgb (0.7850684501960684, 0.5742417003617839, 0.46059116206904965) , - rgb (0.7861573713233296, 0.5790624629815756, 0.465547782819184) , - rgb (0.7872390410818835, 0.5838774374455721, 0.47059039582133383) , - rgb (0.7883151404562396, 0.5886860017356244, 0.4757179187907608) , - rgb (0.7893873776625194, 0.5934875421745599, 0.48092913815357724) , - rgb (0.7904577684772788, 0.5982813427706246, 0.48622257801969754) , - rgb (0.7915283284347561, 0.603066705931472, 0.49159667021646397) , - rgb (0.7926003430423745, 0.6078432208703702, 0.4970502062153201) , - rgb (0.7936755969866496, 0.6126102933407219, 0.5025816129126943) , - rgb (0.7947558597265404, 0.617367344002207, 0.5081892121310299) , - rgb (0.7958429237958377, 0.6221137880845115, 0.5138712409190979) , - rgb (0.7969385471995161, 0.626849056792967, 0.5196258425240281) , - rgb (0.7980444781513664, 0.6315725822508955, 0.5254510814483478) , - rgb (0.7991624518501963, 0.6362837937202919, 0.5313449594256143) , - rgb (0.8002941538975398, 0.6409821330674986, 0.5373053518514104) , - rgb (0.8014412429256005, 0.6456670345921877, 0.5433300863249918) , - rgb (0.8026053114611295, 0.6503379374810385, 0.5494169158460365) , - rgb (0.8037879253107763, 0.6549942654947263, 0.5555635086708381) , - rgb (0.804990547908103, 0.6596354502756416, 0.5617674511054698) , - rgb (0.8062146052692706, 0.6642608958528229, 0.5680262917864979) , - rgb (0.8074614045096935, 0.6688700095398864, 0.5743374637345958) , - rgb (0.8087321917008969, 0.6734621670219452, 0.5806983480557674) , - rgb (0.8100280946652069, 0.6780367267397182, 0.5871062690808275) , - rgb (0.8113501401176333, 0.6825930154624339, 0.5935584890905076) , - rgb (0.8126992203988149, 0.6871303371461888, 0.600052148204351) , - rgb (0.8140761104699334, 0.6916479479148213, 0.6065843782630862) , - rgb (0.8154814662727948, 0.6961450550830809, 0.6131522120932265) , - rgb (0.8169157577505589, 0.7006208301478398, 0.6197526063725792) , - rgb (0.8183793116449822, 0.705074381896351, 0.626382454789333) , - rgb (0.8198723065045529, 0.7095047497878748, 0.6330385704006711) , - rgb (0.8213947205565636, 0.7139109141951604, 0.6397176669767276) , - rgb (0.8229463511042843, 0.7182917733129006, 0.6464164243818421) , - rgb (0.8245268129450285, 0.7226461431208888, 0.653131379154226) , - rgb (0.8261354971058026, 0.7269727551823826, 0.659859001562165) , - rgb (0.8277716072353446, 0.7312702332407809, 0.6665957020468297) , - rgb (0.8294340781648147, 0.7355371221572935, 0.6733377200930191) , - rgb (0.8311216352909631, 0.7397718464763862, 0.6800812520363146) , - rgb (0.8328327718577798, 0.7439727181745988, 0.6868223587464855) , - rgb (0.8345656905566583, 0.7481379479992134, 0.6935569764986385) , - rgb (0.8363189884473793, 0.7522654895287526, 0.7002799902886496) , - rgb (0.8380912347613196, 0.7563531486080863, 0.7069856139021298) , - rgb (0.8398783988412087, 0.7603990719977968, 0.7136714781112923) , - rgb (0.8416775076684515, 0.7644010120098295, 0.7203329938728462) , - rgb (0.843485292229337, 0.7683566039987018, 0.7269653699897204) , - rgb (0.8452981073195511, 0.7722633860104472, 0.7335636824054149) , - rgb (0.847111955079651, 0.7761188023604716, 0.7401227576280706) , - rgb (0.8489224556311764, 0.7799202140765015, 0.7466371929366437) , - rgb (0.8507269702317879, 0.7836645734238389, 0.7530974636118285) , - rgb (0.8525190720770844, 0.7873493613354844, 0.7594994148789691) , - rgb (0.8542921961147046, 0.7909719677709199, 0.765838014779141) , - rgb (0.856040223147254, 0.7945296360155061, 0.7721061003767414) , - rgb (0.857756629435049, 0.7980196314271393, 0.778295716672475) , - rgb (0.8594346370300241, 0.8014392309950078, 0.7843978875138392) , - rgb (0.8610711702756552, 0.8047851790981223, 0.7903952966373629) , - rgb (0.8626560105112757, 0.8080552380426153, 0.796282666437655) , - rgb (0.8641834372394103, 0.8112464422465354, 0.8020461269686395) , - rgb (0.8656493432560532, 0.8143554406751491, 0.8076697232416455) , - rgb (0.867053149070485, 0.8173780404191124, 0.813134196269114) , - rgb (0.8683995469581863, 0.8203087551218152, 0.8184163896312899) , - rgb (0.8696913150261381, 0.8231415885956916, 0.8235047668317317) , - rgb (0.8709384671729751, 0.8258685788943851, 0.8283849726114961) , - rgb (0.8721533197845432, 0.8284805282370967, 0.8330486712880828) , - rgb (0.8733517136091627, 0.8309671525127262, 0.8374885100119709) , - rgb (0.8745379332026019, 0.8333197294864546, 0.8417192535806901) , - rgb (0.875714587099614, 0.8355302318472394, 0.8457553751902708) , - rgb (0.8768784845161469, 0.8375923807118654, 0.8496137354915025) , - rgb (0.8780229843664901, 0.8395016561854007, 0.8533064535245892) , - rgb (0.8791324424079277, 0.8412555488447591, 0.8568557229103964) , - rgb (0.8801929331569581, 0.8428522482477862, 0.8602739992715663) , - rgb (0.8811916987134195, 0.8442906671771735, 0.8635659516866988) , - rgb (0.8821154248940161, 0.8455700725455935, 0.8667376504623333) , - rgb (0.8829516859544853, 0.8466897027569927, 0.8697961704819097) , - rgb (0.8836912714589804, 0.8476489176151927, 0.8727414710144156) , - rgb (0.8843271305411354, 0.8484474157205542, 0.8755678522824297) , - rgb (0.8848513815990857, 0.849084264228938, 0.8782823528537247) , - rgb (0.8852589797263047, 0.8495589281098921, 0.8808841479402484) , - rgb (0.8855471481195238, 0.8498717428363158, 0.8833620612117095) , - rgb (0.8857115512284565, 0.8500218611585632, 0.8857253899008712) -}); + rgb (0.8857501584075443, 0.8500092494306783, 0.8879736506427196) , + rgb (0.8837852019553906, 0.8507294054031063, 0.8872322209694989) , + rgb (0.8817223105928579, 0.8512759407765347, 0.8863805692551482) , + rgb (0.8795410528270573, 0.8516567540749572, 0.8854143767924102) , + rgb (0.8772488085896548, 0.8518702833887027, 0.8843412038131143) , + rgb (0.8748534750857597, 0.8519152612302319, 0.8831692696761383) , + rgb (0.8723313408512408, 0.8518016547808089, 0.8818970435500162) , + rgb (0.8697047485350982, 0.8515240300479789, 0.8805388339000336) , + rgb (0.8669601550533358, 0.8510896085314068, 0.8790976697717334) , + rgb (0.86408985081464, 0.8505039116750779, 0.8775792578489263) , + rgb (0.8611024543689985, 0.8497675485700126, 0.8759924292343957) , + rgb (0.8579825924567037, 0.8488893481028184, 0.8743403855344628) , + rgb (0.8547259318925698, 0.8478748812467282, 0.8726282980930582) , + rgb (0.8513371457085719, 0.8467273579611647, 0.8708608165735044) , + rgb (0.8478071070257792, 0.8454546229209523, 0.8690403678369444) , + rgb (0.8441261828674842, 0.8440648271103739, 0.8671697332269007) , + rgb (0.8403042080595778, 0.8425605950855084, 0.865250882410458) , + rgb (0.8363403180919118, 0.8409479651895194, 0.8632852800107016) , + rgb (0.8322270571293441, 0.8392349062775448, 0.8612756350042788) , + rgb (0.8279689431601354, 0.837426007513952, 0.8592239945130679) , + rgb (0.8235742968025285, 0.8355248776479544, 0.8571319132851495) , + rgb (0.8190465467793753, 0.8335364929949034, 0.855002062870101) , + rgb (0.8143898212114309, 0.8314655869419785, 0.8528375906214702) , + rgb (0.8095999819094809, 0.8293189667350546, 0.8506444160105037) , + rgb (0.8046916442981458, 0.8270983878056066, 0.8484244929697402) , + rgb (0.79967075421268, 0.8248078181208093, 0.8461821002957853) , + rgb (0.7945430508923111, 0.8224511622630462, 0.8439218478682798) , + rgb (0.7893144556460892, 0.8200321318870201, 0.8416486380471222) , + rgb (0.7839910104276492, 0.8175542640053343, 0.8393674746403673) , + rgb (0.7785789200822759, 0.8150208937874255, 0.8370834463093898) , + rgb (0.7730841659017094, 0.8124352473546601, 0.8348017295057968) , + rgb (0.7675110850441786, 0.8098007598713145, 0.8325281663805967) , + rgb (0.7618690793798029, 0.8071194938764749, 0.830266486168872) , + rgb (0.7561644358438198, 0.8043940873347794, 0.8280213899472) , + rgb (0.750403467654067, 0.8016269900896532, 0.8257973785108242) , + rgb (0.7445924777189017, 0.7988204771958325, 0.8235986758615652) , + rgb (0.7387377170049494, 0.7959766573503101, 0.8214292278043301) , + rgb (0.7328454364552346, 0.7930974646884407, 0.8192926338423038) , + rgb (0.726921775128297, 0.7901846863592763, 0.8171921746672638) , + rgb (0.7209728066553678, 0.7872399592345264, 0.8151307392087926) , + rgb (0.7150040307625213, 0.7842648709158119, 0.8131111655994991) , + rgb (0.709020781345393, 0.7812608871607091, 0.8111359185511793) , + rgb (0.7030297722540817, 0.7782290497335813, 0.8092061884805697) , + rgb (0.6970365443886174, 0.7751705000806606, 0.8073233538006345) , + rgb (0.691046410093091, 0.7720862946067809, 0.8054884169067907) , + rgb (0.6850644615439593, 0.7689774029354699, 0.8037020626717691) , + rgb (0.6790955449988215, 0.765844721313959, 0.8019646617300199) , + rgb (0.6731442255942621, 0.7626890873389048, 0.8002762854580953) , + rgb (0.6672147980375281, 0.7595112803730375, 0.7986367465453776) , + rgb (0.6613112930078745, 0.7563120270871903, 0.7970456043491897) , + rgb (0.6554369232645472, 0.7530920875676843, 0.7955027112903105) , + rgb (0.6495957300425348, 0.7498520122194177, 0.7940067402149911) , + rgb (0.6437910831099849, 0.7465923800833657, 0.7925565320130605) , + rgb (0.6380258682854598, 0.7433137671403319, 0.7911510045957317) , + rgb (0.6323027138710603, 0.740016721601314, 0.7897889276264043) , + rgb (0.6266240202260459, 0.7367017540369944, 0.7884690131633456) , + rgb (0.6209919306481755, 0.733369347989232, 0.7871899462469658) , + rgb (0.6154084641177048, 0.7300199523273969, 0.7859502270675048) , + rgb (0.6098754317609306, 0.7266539875975829, 0.7847483573269471) , + rgb (0.6043943420027486, 0.7232718614323369, 0.7835829559353559) , + rgb (0.5989665814482068, 0.7198739489224673, 0.7824525989934664) , + rgb (0.5935933569683722, 0.7164606049658685, 0.781355882376401) , + rgb (0.588275797805555, 0.7130321464645814, 0.7802914140563652) , + rgb (0.5830148703693241, 0.7095888767699747, 0.7792578182047659) , + rgb (0.5778116438998202, 0.7061310615715398, 0.7782534512102552) , + rgb (0.5726668948158774, 0.7026589535425779, 0.7772770268091199) , + rgb (0.5675811785386197, 0.6991727930264627, 0.776327485342753) , + rgb (0.5625551535721934, 0.6956727838162965, 0.7754035914230984) , + rgb (0.5575894041960517, 0.6921591145825405, 0.7745041337932782) , + rgb (0.5526845058934713, 0.6886319451516638, 0.7736279426902245) , + rgb (0.5478409815301863, 0.6850914221850988, 0.7727738647344087) , + rgb (0.5430593242401823, 0.6815376725306588, 0.7719407969783508) , + rgb (0.5383401557517628, 0.677970811290954, 0.7711273443905772) , + rgb (0.533683891477284, 0.6743909370521273, 0.7703325054879735) , + rgb (0.529090861832473, 0.6707981230280622, 0.7695555229231313) , + rgb (0.5245615147059358, 0.6671924299614223, 0.7687954171423095) , + rgb (0.5200962739223556, 0.6635739143403039, 0.768051194033441) , + rgb (0.5156955988596057, 0.65994260812898, 0.7673219148959617) , + rgb (0.5113599254160193, 0.6562985398183186, 0.7666066378064533) , + rgb (0.5070896957645166, 0.6526417240314645, 0.7659044566083585) , + rgb (0.5028853540415561, 0.6489721673409526, 0.7652144671817491) , + rgb (0.4987473366135607, 0.6452898684900934, 0.7645357873418008) , + rgb (0.4946761847863938, 0.6415948411950443, 0.7638671900213091) , + rgb (0.4906722493856122, 0.6378870485884708, 0.7632081276316384) , + rgb (0.4867359599430568, 0.6341664625110051, 0.7625578008592404) , + rgb (0.4828677867260272, 0.6304330455306234, 0.761915371498953) , + rgb (0.47906816236197386, 0.6266867625186013, 0.7612800037566242) , + rgb (0.47533752394906287, 0.6229275728383581, 0.7606508557181775) , + rgb (0.4716762951887709, 0.6191554324288464, 0.7600270922788305) , + rgb (0.46808490970531597, 0.6153702869579029, 0.7594078989109274) , + rgb (0.4645637671630393, 0.6115720882286415, 0.7587924262302581) , + rgb (0.4611132664702388, 0.607760777169989, 0.7581798643680714) , + rgb (0.45773377230160567, 0.6039363004658646, 0.7575693690185916) , + rgb (0.45442563977552913, 0.6000985950385866, 0.7569601366060649) , + rgb (0.45118918687617743, 0.5962476205135354, 0.7563512064324664) , + rgb (0.4480247093358917, 0.5923833145214658, 0.7557417647410792) , + rgb (0.4449324685421538, 0.5885055998308617, 0.7551311041857901) , + rgb (0.441912717666964, 0.5846144110017557, 0.7545183888441067) , + rgb (0.43896563958048396, 0.5807096924109849, 0.7539027620828594) , + rgb (0.4360913895835637, 0.5767913799818608, 0.7532834105961016) , + rgb (0.43329008867358393, 0.5728594162560667, 0.7526594653256667) , + rgb (0.4305617907305757, 0.5689137457245718, 0.752030080993127) , + rgb (0.42790652284925834, 0.5649543060909209, 0.7513944352191484) , + rgb (0.42532423665011354, 0.560981049599503, 0.7507516498900512) , + rgb (0.4228148567577266, 0.5569939212699658, 0.7501008698822764) , + rgb (0.42037822361396326, 0.5529928715810817, 0.7494412559451894) , + rgb (0.4180141407923363, 0.5489778542188889, 0.7487719316700112) , + rgb (0.4157223260454232, 0.544948827153504, 0.7480920445900052) , + rgb (0.4135024574331473, 0.5409057477109848, 0.7474007329754309) , + rgb (0.4113541469730457, 0.5368485776500593, 0.7466971285506578) , + rgb (0.4092768899914751, 0.5327773017713032, 0.7459803063570782) , + rgb (0.4072701869421907, 0.5286918801105741, 0.7452494263758127) , + rgb (0.4053334378930318, 0.5245922817498312, 0.7445036583670813) , + rgb (0.40346600333905397, 0.5204784765384003, 0.7437421522356709) , + rgb (0.40166714010896104, 0.5163504496968876, 0.7429640345324835) , + rgb (0.39993606933454834, 0.5122081814321852, 0.7421684457131799) , + rgb (0.3982719152586337, 0.5080516653927614, 0.7413545091809972) , + rgb (0.3966737490566561, 0.5038808905384797, 0.7405213858051674) , + rgb (0.3951405880820763, 0.4996958532637776, 0.7396682021171571) , + rgb (0.39367135736822567, 0.4954965577745118, 0.738794102296364) , + rgb (0.39226494876209317, 0.4912830033289926, 0.7378982478447508) , + rgb (0.390920175719949, 0.4870552025122304, 0.7369797713388125) , + rgb (0.38963580160340855, 0.48281316715123496, 0.7360378254693274) , + rgb (0.3884105330084243, 0.47855691131792805, 0.7350715764115726) , + rgb (0.3872430145933025, 0.4742864593363539, 0.7340801678785439) , + rgb (0.386131841788921, 0.4700018340988123, 0.7330627749243106) , + rgb (0.3850755679365139, 0.46570306719930193, 0.732018540336905) , + rgb (0.38407269378943537, 0.46139018782416635, 0.7309466543290268) , + rgb (0.3831216808440275, 0.457063235814072, 0.7298462679135326) , + rgb (0.38222094988570376, 0.45272225034283325, 0.7287165614400378) , + rgb (0.3813688793045416, 0.4483672766927786, 0.7275567131714135) , + rgb (0.3805638069656562, 0.4439983720863372, 0.7263658704513531) , + rgb (0.3798040374484875, 0.4396155882122263, 0.7251432377876109) , + rgb (0.3790878928311076, 0.43521897612544935, 0.7238879869132313) , + rgb (0.378413635091359, 0.43080859411413064, 0.7225993199306104) , + rgb (0.3777794975351373, 0.4263845142616835, 0.7212763999353023) , + rgb (0.3771837184425123, 0.4219468022345483, 0.7199184152447577) , + rgb (0.37662448930806297, 0.41749553747893614, 0.7185245473617611) , + rgb (0.37610001286385814, 0.4130307995247706, 0.7170939691992023) , + rgb (0.375608469194424, 0.40855267638072096, 0.7156258509158755) , + rgb (0.37514802505380473, 0.4040612609993941, 0.7141193695725726) , + rgb (0.3747168601930223, 0.3995566498711684, 0.7125736851650046) , + rgb (0.3743131319931234, 0.3950389482828331, 0.7109879652237746) , + rgb (0.3739349933047578, 0.3905082752937583, 0.7093613429347845) , + rgb (0.3735806215098284, 0.3859647438605754, 0.7076929760731058) , + rgb (0.37324816143326384, 0.38140848555753937, 0.7059820097480604) , + rgb (0.3729357864666503, 0.3768396383521984, 0.7042275578058994) , + rgb (0.37264166757849604, 0.3722583500483685, 0.7024287314570723) , + rgb (0.37236397858465387, 0.36766477862108266, 0.7005846349652077) , + rgb (0.3721008970244382, 0.3630590973698238, 0.6986943461507372) , + rgb (0.3718506155898596, 0.3584414828587522, 0.6967569581025654) , + rgb (0.3716113323440048, 0.3538121372967869, 0.6947714991938089) , + rgb (0.37138124223736607, 0.34917126878479027, 0.6927370347192883) , + rgb (0.37115856636209105, 0.3445191141023017, 0.6906525358646499) , + rgb (0.3709415155133733, 0.33985591488818123, 0.6885170337950512) , + rgb (0.3707283327942267, 0.33518193808489577, 0.6863294816960677) , + rgb (0.37051738634484427, 0.3304974124430785, 0.6840888878885721) , + rgb (0.37030682071842685, 0.32580269697872455, 0.6817941168448668) , + rgb (0.37009487130772695, 0.3210981375964933, 0.6794440539905685) , + rgb (0.3698798032902536, 0.31638410101153364, 0.6770375543809057) , + rgb (0.36965987626565955, 0.3116609876295197, 0.6745734474341955) , + rgb (0.3694333459127623, 0.3069292355186234, 0.6720505284912062) , + rgb (0.36919847837592484, 0.3021893217650707, 0.6694675433161452) , + rgb (0.3689535530659678, 0.29744175492366276, 0.6668232208982426) , + rgb (0.3686968223189527, 0.292687098561501, 0.6641162529823691) , + rgb (0.36842655638020444, 0.2879259643777846, 0.661345269109446) , + rgb (0.3681410147989972, 0.2831590122118299, 0.6585088880697231) , + rgb (0.3678384369653108, 0.2783869718129776, 0.655605668384537) , + rgb (0.36751707094367697, 0.2736106331709098, 0.6526341171161864) , + rgb (0.36717513650699446, 0.26883085667326956, 0.6495927229789225) , + rgb (0.3668108554010799, 0.26404857724525643, 0.6464799165290824) , + rgb (0.3664224325155063, 0.25926481158628106, 0.6432940914076554) , + rgb (0.36600853966739794, 0.25448043878086224, 0.6400336180336859) , + rgb (0.3655669837353898, 0.24969683475296395, 0.6366967518748858) , + rgb (0.3650957984588681, 0.24491536803550484, 0.6332817352005559) , + rgb (0.3645930889012501, 0.24013747024823828, 0.629786801550261) , + rgb (0.3640569302208851, 0.23536470386204195, 0.6262101345195302) , + rgb (0.36348537610385145, 0.2305987621839642, 0.6225498862239288) , + rgb (0.3628764356004103, 0.2258414929328703, 0.6188041741082302) , + rgb (0.36222809558295926, 0.22109488427338303, 0.6149711234609613) , + rgb (0.36153829010998356, 0.21636111429594002, 0.6110488067964093) , + rgb (0.36080493826624654, 0.21164251793458128, 0.6070353217206471) , + rgb (0.36002681809096376, 0.20694122817889948, 0.6029284543191687) , + rgb (0.35920088560930186, 0.20226037920758122, 0.5987265295935138) , + rgb (0.3583248996661781, 0.197602942459778, 0.5944276851750107) , + rgb (0.35739663292915563, 0.1929720819784246, 0.5900301125106313) , + rgb (0.35641381143126327, 0.18837119869242164, 0.5855320765920552) , + rgb (0.3553741530690672, 0.18380392577704466, 0.580931914318328) , + rgb (0.3542753496066376, 0.17927413271618647, 0.5762280966066872) , + rgb (0.35311574421123737, 0.17478570377561287, 0.5714187152355529) , + rgb (0.3518924860887379, 0.17034320478524959, 0.5665028491121665) , + rgb (0.3506030444193101, 0.1659512998472086, 0.5614796470399323) , + rgb (0.34924513554955644, 0.16161477763045118, 0.5563483747416378) , + rgb (0.3478165323877778, 0.1573386351115298, 0.5511085345270326) , + rgb (0.3463150717579309, 0.15312802296627787, 0.5457599924248665) , + rgb (0.34473901574536375, 0.1489882058982641, 0.5403024592040654) , + rgb (0.34308600291572294, 0.14492465359918028, 0.534737042820671) , + rgb (0.34135411074506483, 0.1409427920655632, 0.5290650094033675) , + rgb (0.33954168752669694, 0.1370480189671817, 0.5232879753508524) , + rgb (0.3376473209067111, 0.13324562282438077, 0.5174080757397947) , + rgb (0.33566978565015315, 0.12954074251271822, 0.5114280721516895) , + rgb (0.33360804901486, 0.1259381830100592, 0.505351647966549) , + rgb (0.33146154891145124, 0.12244245263391232, 0.4991827458843107) , + rgb (0.3292300520323141, 0.11905764321981127, 0.49292595612342666) , + rgb (0.3269137124539796, 0.1157873496841953, 0.4865864649569746) , + rgb (0.32451307931207785, 0.11263459791730848, 0.48017007211645196) , + rgb (0.3220288227606932, 0.10960114111258401, 0.4736849472572688) , + rgb (0.31946262395497965, 0.1066887988239266, 0.46713728801395243) , + rgb (0.316816480890235, 0.10389861387653518, 0.46053414662739794) , + rgb (0.3140927841475553, 0.10123077676403242, 0.45388335612058467) , + rgb (0.31129434479712365, 0.0986847719340522, 0.4471931371516162) , + rgb (0.30842444457210105, 0.09625938534057774, 0.44047194882050544) , + rgb (0.30548675819945936, 0.09395276484082374, 0.4337284999936111) , + rgb (0.3024853636457425, 0.0917611873973036, 0.42697404043749887) , + rgb (0.2994248396021477, 0.08968225371675004, 0.42021619665853854) , + rgb (0.2963100038890529, 0.08771325096046395, 0.41346259134143476) , + rgb (0.2931459309698525, 0.08585065688962071, 0.40672178082365834) , + rgb (0.2899379244517661, 0.08409078829085731, 0.40000214725256295) , + rgb (0.28669151388283165, 0.08242987384848069, 0.39331182532243375) , + rgb (0.28341239797185225, 0.08086415336549937, 0.38665868550105914) , + rgb (0.2801063857697547, 0.07938999480226153, 0.38005028528138707) , + rgb (0.2767793961581559, 0.07800394103378822, 0.37349382846504675) , + rgb (0.2734373934245081, 0.07670280023749607, 0.36699616136347685) , + rgb (0.2700863774911405, 0.07548367558427554, 0.36056376228111864) , + rgb (0.26673233211995284, 0.0743440180285462, 0.3542027606624096) , + rgb (0.26338121807151404, 0.07328165793989708, 0.34791888996380105) , + rgb (0.26003895187439957, 0.0722947810433622, 0.3417175669546984) , + rgb (0.256711916510839, 0.07138010624208224, 0.3356064898460009) , + rgb (0.25340685873736807, 0.07053358292685183, 0.3295945757321303) , + rgb (0.2501284530619938, 0.06975820642910699, 0.32368100685760637) , + rgb (0.24688226237959, 0.06905363944920445, 0.31786993834254956) , + rgb (0.24367372557466271, 0.06841985515092269, 0.3121652405088837) , + rgb (0.2405081333229594, 0.0678571038148556, 0.3065705449367832) , + rgb (0.23739062429054825, 0.06736588805055552, 0.3010892218406587) , + rgb (0.23433055727563878, 0.0669355996616394, 0.295740099298676) , + rgb (0.23132955273021344, 0.06657618693909059, 0.29051361067988485) , + rgb (0.2283917709422868, 0.06628997924139618, 0.28541074411068496) , + rgb (0.22552164337737857, 0.0660781731193956, 0.28043398847505197) , + rgb (0.22272706739121817, 0.06593379067565194, 0.275597146520537) , + rgb (0.22001251100779617, 0.0658579189189076, 0.2709027999432586) , + rgb (0.21737845072382705, 0.06585966123356204, 0.2663420934966951) , + rgb (0.21482843531473683, 0.06594038561377849, 0.26191675992376573) , + rgb (0.21237411048541005, 0.06608502466175845, 0.2576516509356954) , + rgb (0.21001214221188125, 0.06630857391894718, 0.2535289048041211) , + rgb (0.2077442377448806, 0.06661453200418091, 0.24954644291943817) , + rgb (0.20558051999470117, 0.06699046239786874, 0.24572497420147632) , + rgb (0.20352007949514977, 0.06744417961242422, 0.24205576625191821) , + rgb (0.2015613376412984, 0.06798327102620025, 0.23852974228695395) , + rgb (0.19971571438603364, 0.06859271055370472, 0.23517094067076993) , + rgb (0.19794834061899208, 0.06931406607166066, 0.23194647381302336) , + rgb (0.1960826032659409, 0.07032122724242362, 0.22874673279569585) , + rgb (0.19410351363791453, 0.07160830485689157, 0.22558727307410353) , + rgb (0.19199449184606268, 0.0731828306492733, 0.22243385243433622) , + rgb (0.18975853639094634, 0.07501986186214377, 0.2193005075652994) , + rgb (0.18739228342697645, 0.07710209689958833, 0.21618875376309582) , + rgb (0.18488035509396164, 0.07942573027972388, 0.21307651648984993) , + rgb (0.18774482037046955, 0.07725158846803931, 0.21387448578597812) , + rgb (0.19049578401722037, 0.07531127841678764, 0.2146562337112265) , + rgb (0.1931548636579131, 0.07360681904011795, 0.21542362939081539) , + rgb (0.19571853588267552, 0.07215778103960274, 0.21617499187076789) , + rgb (0.19819343656336558, 0.07097462525273879, 0.21690975060032436) , + rgb (0.20058760685133747, 0.07006457614998421, 0.21762721310371608) , + rgb (0.20290365333558247, 0.06943524858045896, 0.21833167885096033) , + rgb (0.20531725273301316, 0.06891959226639757, 0.21911516689288835) , + rgb (0.20785704662965598, 0.06848439879702528, 0.22000133917653536) , + rgb (0.21052882914958676, 0.06812195249816172, 0.22098759107715404) , + rgb (0.2133313859647627, 0.06783014842602667, 0.2220704321302429) , + rgb (0.21625279838647882, 0.06761633027051639, 0.22324568672294431) , + rgb (0.21930503925136402, 0.06746578636294004, 0.22451023616807558) , + rgb (0.22247308588973624, 0.06738821405309284, 0.22585960379408354) , + rgb (0.2257539681670791, 0.06738213230014747, 0.22728984778098055) , + rgb (0.2291562027859284, 0.06743473087115257, 0.22879681433956656) , + rgb (0.23266299920501882, 0.06755710438847978, 0.23037617493752832) , + rgb (0.23627495835774248, 0.06774359820987802, 0.23202360805926608) , + rgb (0.23999586188690308, 0.06798502996477995, 0.23373434258507808) , + rgb (0.2438114972024792, 0.06828985152901187, 0.23550427698321885) , + rgb (0.247720929905011, 0.06865333790948652, 0.2373288009471749) , + rgb (0.25172899728289466, 0.0690646308260355, 0.23920260612763083) , + rgb (0.2558213554748177, 0.06953231029187984, 0.24112190491594204) , + rgb (0.25999463887892144, 0.07005385560386188, 0.24308218808684579) , + rgb (0.2642551220706094, 0.07061659562299544, 0.24507758869355967) , + rgb (0.2685909594817286, 0.07122671627792246, 0.24710443563450618) , + rgb (0.272997015188973, 0.07188355544616351, 0.2491584709323293) , + rgb (0.277471508091428, 0.07258296989925478, 0.2512349399594277) , + rgb (0.2820174629736694, 0.07331569321404097, 0.25332800295084507) , + rgb (0.28662309235899847, 0.07408846082680887, 0.2554347867371703) , + rgb (0.29128515387578635, 0.0748990498474667, 0.25755101595750435) , + rgb (0.2960004726065818, 0.07574533600095842, 0.25967245030364566) , + rgb (0.3007727681291869, 0.07661782433616476, 0.2617929409781967) , + rgb (0.30559226007249934, 0.07752196310753731, 0.2639100669211966) , + rgb (0.31045520848595526, 0.07845687167618218, 0.2660200572779356) , + rgb (0.3153587000920581, 0.07942099731524319, 0.2681190407694196) , + rgb (0.3202998655799406, 0.08041299473755484, 0.2702032289303951) , + rgb (0.3252788886040126, 0.08142839007654609, 0.27226772884656186) , + rgb (0.3302917447118144, 0.08246763389003825, 0.27430929404579435) , + rgb (0.3353335322445545, 0.08353243411900396, 0.2763253435679004) , + rgb (0.34040164359597463, 0.08462223619170267, 0.27831254595259397) , + rgb (0.345493557138718, 0.08573665496512634, 0.28026769921081435) , + rgb (0.3506067824603248, 0.08687555176033529, 0.28218770540182386) , + rgb (0.35573889947341125, 0.08803897435024335, 0.2840695897279818) , + rgb (0.36088752387578377, 0.0892271943627452, 0.28591050458531014) , + rgb (0.36605031412464006, 0.0904406854276979, 0.2877077458811747) , + rgb (0.3712250843130934, 0.09167999748026273, 0.2894586539763317) , + rgb (0.3764103053221462, 0.09294519809377791, 0.2911602415731392) , + rgb (0.38160247377467543, 0.09423873126371218, 0.2928110750626949) , + rgb (0.3867993907954417, 0.09556181960083443, 0.29440901248173756) , + rgb (0.39199887556812907, 0.09691583650296684, 0.2959521200550908) , + rgb (0.39719876876325577, 0.09830232096827862, 0.2974385647628578) , + rgb (0.40239692379737496, 0.09972293031495055, 0.2988667436973397) , + rgb (0.4075912039268871, 0.10117945586419633, 0.300235195077286) , + rgb (0.41277985630360303, 0.1026734006932461, 0.3015422643746897) , + rgb (0.41796105205173684, 0.10420644885760968, 0.3027865203963184) , + rgb (0.42313214269556043, 0.10578120994917611, 0.3039675809469457) , + rgb (0.4282910131578975, 0.1073997763055258, 0.30508479060294547) , + rgb (0.4334355841041439, 0.1090642347484701, 0.3061376792828915) , + rgb (0.4385637818793154, 0.11077667828375456, 0.30712600062348083) , + rgb (0.44367358645071275, 0.11253912421257944, 0.3080497309546545) , + rgb (0.4487629917317482, 0.1143535557462255, 0.30890905921943196) , + rgb (0.4538300508699989, 0.11622183788331528, 0.3097044124984492) , + rgb (0.45887288947308297, 0.11814571137706886, 0.3104363697903881) , + rgb (0.46389102840284874, 0.12012561256850712, 0.31110343446582983) , + rgb (0.46888111384598413, 0.12216445576414045, 0.31170911458932665) , + rgb (0.473841437035254, 0.12426354237989065, 0.31225470169927194) , + rgb (0.47877034239726296, 0.12642401401409453, 0.3127417273582196) , + rgb (0.48366628618847957, 0.1286467902201389, 0.31317188565991266) , + rgb (0.48852847371852987, 0.13093210934893723, 0.31354553695453014) , + rgb (0.49335504375145617, 0.13328091630401023, 0.31386561956734976) , + rgb (0.4981443546207415, 0.13569380302451714, 0.314135190862664) , + rgb (0.5028952497497061, 0.13817086581280427, 0.3143566215383367) , + rgb (0.5076068118105369, 0.14071192654913128, 0.3145320012008257) , + rgb (0.5122783510532176, 0.14331656120063752, 0.3146630922831542) , + rgb (0.5169084880054446, 0.14598463068714407, 0.3147540759228004) , + rgb (0.5214965286322996, 0.14871544765633712, 0.3148076795453443) , + rgb (0.5260418962547748, 0.15150818660835483, 0.31482653406646727) , + rgb (0.5305442048985645, 0.15436183633886777, 0.3148129978918713) , + rgb (0.5350027976174474, 0.15727540775107324, 0.3147708520739653) , + rgb (0.5394173664919906, 0.16024769309971934, 0.31470295028655965) , + rgb (0.5437877131360856, 0.16327738551419116, 0.31461204226295625) , + rgb (0.5481137003346762, 0.1663630904279047, 0.3145010299091471) , + rgb (0.5523952157271191, 0.16950338809328983, 0.3143729155461537) , + rgb (0.5566322903496934, 0.17269677158182117, 0.31423043195101424) , + rgb (0.5608249903911717, 0.17594170887918095, 0.31407639883970623) , + rgb (0.564973435290177, 0.17923664950367169, 0.3139136046337036) , + rgb (0.5690778478401143, 0.18258004462335425, 0.3137444095679653) , + rgb (0.5731384575410787, 0.18597036007065024, 0.3135712686852) , + rgb (0.5771555081299204, 0.18940601489760422, 0.3133970433357208) , + rgb (0.5811293276158656, 0.19288548904692518, 0.3132239939418394) , + rgb (0.5850602439646688, 0.19640737049066315, 0.3130540116373273) , + rgb (0.5889486193554471, 0.19997020971775276, 0.31288922211590126) , + rgb (0.5927948053652026, 0.20357251410079796, 0.3127323483930494) , + rgb (0.5965991810912237, 0.207212956082026, 0.3125852303112123) , + rgb (0.6003621301041158, 0.21089030138947745, 0.3124493441041469) , + rgb (0.6040840169673274, 0.21460331490206347, 0.31232652641170694) , + rgb (0.6077652399481865, 0.21835070166659282, 0.312219032918702) , + rgb (0.6114062072731884, 0.22213124697023234, 0.3121288139643524) , + rgb (0.6150072323639137, 0.22594402043981826, 0.3120568068576574) , + rgb (0.6185686525887719, 0.2297879924917992, 0.3120046383872893) , + rgb (0.6220907982108261, 0.2336621873300741, 0.3119738327362739) , + rgb (0.6255741650043496, 0.23756535071152696, 0.3119669831491227) , + rgb (0.6290189201698587, 0.24149689191922535, 0.3119844719564572) , + rgb (0.6324253485421027, 0.24545598775548677, 0.3120276597462445) , + rgb (0.6357937104834237, 0.24944185818822678, 0.3120979395330059) , + rgb (0.6391243387840212, 0.2534536546198314, 0.3121968961206398) , + rgb (0.642417577481186, 0.257490519876798, 0.31232631707560987) , + rgb (0.6456734938264543, 0.2615520316161528, 0.31248673753935263) , + rgb (0.6488923016945825, 0.2656375533620908, 0.3126794181957019) , + rgb (0.652074172902773, 0.269746505252367, 0.3129056060581917) , + rgb (0.6552193260932713, 0.2738782665241015, 0.3131666792687211) , + rgb (0.6583280801134499, 0.2780321095766563, 0.3134643447952643) , + rgb (0.6614003753260178, 0.28220778870555907, 0.3137991292649849) , + rgb (0.6644363246987884, 0.2864048361425618, 0.31417223403606975) , + rgb (0.6674360376636913, 0.29062280081258873, 0.31458483752056837) , + rgb (0.670399595476762, 0.29486126309253047, 0.3150381395687221) , + rgb (0.6733272556481733, 0.29911962764489264, 0.3155337232398221) , + rgb (0.6762189792440975, 0.30339762792450425, 0.3160724937230589) , + rgb (0.6790747402815734, 0.30769497879760166, 0.31665545668946665) , + rgb (0.6818945715094452, 0.31201133280550686, 0.3172838048924495) , + rgb (0.6846785094249453, 0.3163463482122221, 0.31795870784057567) , + rgb (0.6874265643516962, 0.32069970535138104, 0.3186813762227769) , + rgb (0.6901389321505248, 0.32507091815606004, 0.319453323328983) , + rgb (0.6928154484676493, 0.32945984647042675, 0.3202754315314667) , + rgb (0.6954560834689112, 0.33386622163232865, 0.3211488430698579) , + rgb (0.6980608153581771, 0.3382897632604862, 0.3220747885521809) , + rgb (0.700629624772421, 0.34273019305341756, 0.32305449047765694) , + rgb (0.7031624945881415, 0.34718723719598, 0.32408913679491225) , + rgb (0.7056595112261009, 0.3516605297812094, 0.32518014084085567) , + rgb (0.7081205956842048, 0.356149855233803, 0.32632861885644465) , + rgb (0.7105456546582587, 0.36065500290840113, 0.3275357416278876) , + rgb (0.7129346683977347, 0.36517570519856757, 0.3288027427038317) , + rgb (0.7152876061484729, 0.3697117022522345, 0.3301308728723546) , + rgb (0.7176044490813385, 0.3742627271068619, 0.3315213862095893) , + rgb (0.7198852149054985, 0.37882848839337313, 0.332975552002454) , + rgb (0.7221299918421461, 0.3834086450896306, 0.33449469983585844) , + rgb (0.7243386564778159, 0.38800301593162145, 0.3360799596569183) , + rgb (0.7265112290022755, 0.3926113126792577, 0.3377325942005665) , + rgb (0.7286477385671655, 0.39723324476747235, 0.33945384341064017) , + rgb (0.7307482075484517, 0.401868526884681, 0.3412449533046818) , + rgb (0.7328127050626875, 0.4065168468778026, 0.3431071517341082) , + rgb (0.7348413359856494, 0.4111778700451951, 0.3450416947080907) , + rgb (0.7368342217358587, 0.4158512585029011, 0.347049785207584) , + rgb (0.7387914002459927, 0.4205367299231533, 0.34913260148542435) , + rgb (0.7407130161950609, 0.4252339389526239, 0.35129130890802607) , + rgb (0.7425992159973317, 0.42994254036133867, 0.3535270924537459) , + rgb (0.7444501867657067, 0.4346621718461711, 0.35584108091122535) , + rgb (0.7462661578916344, 0.439392450449735, 0.3582343914230064) , + rgb (0.7480473927555956, 0.44413297780351974, 0.36070813602540136) , + rgb (0.7497942054717047, 0.4488833348154881, 0.3632633755836028) , + rgb (0.7515068504589166, 0.45364314496866825, 0.36590112443835765) , + rgb (0.7531856636904657, 0.45841199172949604, 0.3686223664223477) , + rgb (0.7548310506695954, 0.46318942799460555, 0.3714280448394211) , + rgb (0.7564434157714071, 0.4679750143794846, 0.37431909037543515) , + rgb (0.7580232553845584, 0.4727682731566229, 0.3772963553109668) , + rgb (0.7595711110534006, 0.4775687122205708, 0.380360657784311) , + rgb (0.7610876378057071, 0.48237579130289127, 0.3835127572385229) , + rgb (0.7625733355405261, 0.48718906673415824, 0.38675335037837993) , + rgb (0.7640288560928866, 0.49200802533379656, 0.39008308392311997) , + rgb (0.7654549259333051, 0.4968321290972723, 0.3935025400011538) , + rgb (0.7668522895064389, 0.5016608471009063, 0.39701221751773474) , + rgb (0.768221765997353, 0.5064936237128791, 0.40061257089416885) , + rgb (0.7695642334401418, 0.5113298901696085, 0.4043039806968248) , + rgb (0.7708809196230247, 0.516168926434691, 0.40808667584648967) , + rgb (0.7721725722960555, 0.5210102658711383, 0.4119608998712287) , + rgb (0.7734402182988989, 0.5258533209345156, 0.41592679539764366) , + rgb (0.774684947460632, 0.5306974938477673, 0.4199844035696376) , + rgb (0.775907907306857, 0.5355421788246119, 0.42413367909988375) , + rgb (0.7771103295521099, 0.5403867491056124, 0.4283745037125848) , + rgb (0.7782934580763312, 0.545230594884266, 0.432706647838971) , + rgb (0.7794586273150664, 0.5500730841397727, 0.4371297985644476) , + rgb (0.7806077474948377, 0.5549133574489061, 0.4416433242636464) , + rgb (0.7817418047898184, 0.5597509805259486, 0.44624687186865436) , + rgb (0.7828622526444091, 0.5645853311116688, 0.45093985823706345) , + rgb (0.7839706083641448, 0.5694157832671042, 0.4557215474289206) , + rgb (0.7850684501960684, 0.5742417003617839, 0.46059116206904965) , + rgb (0.7861573713233296, 0.5790624629815756, 0.465547782819184) , + rgb (0.7872390410818835, 0.5838774374455721, 0.47059039582133383) , + rgb (0.7883151404562396, 0.5886860017356244, 0.4757179187907608) , + rgb (0.7893873776625194, 0.5934875421745599, 0.48092913815357724) , + rgb (0.7904577684772788, 0.5982813427706246, 0.48622257801969754) , + rgb (0.7915283284347561, 0.603066705931472, 0.49159667021646397) , + rgb (0.7926003430423745, 0.6078432208703702, 0.4970502062153201) , + rgb (0.7936755969866496, 0.6126102933407219, 0.5025816129126943) , + rgb (0.7947558597265404, 0.617367344002207, 0.5081892121310299) , + rgb (0.7958429237958377, 0.6221137880845115, 0.5138712409190979) , + rgb (0.7969385471995161, 0.626849056792967, 0.5196258425240281) , + rgb (0.7980444781513664, 0.6315725822508955, 0.5254510814483478) , + rgb (0.7991624518501963, 0.6362837937202919, 0.5313449594256143) , + rgb (0.8002941538975398, 0.6409821330674986, 0.5373053518514104) , + rgb (0.8014412429256005, 0.6456670345921877, 0.5433300863249918) , + rgb (0.8026053114611295, 0.6503379374810385, 0.5494169158460365) , + rgb (0.8037879253107763, 0.6549942654947263, 0.5555635086708381) , + rgb (0.804990547908103, 0.6596354502756416, 0.5617674511054698) , + rgb (0.8062146052692706, 0.6642608958528229, 0.5680262917864979) , + rgb (0.8074614045096935, 0.6688700095398864, 0.5743374637345958) , + rgb (0.8087321917008969, 0.6734621670219452, 0.5806983480557674) , + rgb (0.8100280946652069, 0.6780367267397182, 0.5871062690808275) , + rgb (0.8113501401176333, 0.6825930154624339, 0.5935584890905076) , + rgb (0.8126992203988149, 0.6871303371461888, 0.600052148204351) , + rgb (0.8140761104699334, 0.6916479479148213, 0.6065843782630862) , + rgb (0.8154814662727948, 0.6961450550830809, 0.6131522120932265) , + rgb (0.8169157577505589, 0.7006208301478398, 0.6197526063725792) , + rgb (0.8183793116449822, 0.705074381896351, 0.626382454789333) , + rgb (0.8198723065045529, 0.7095047497878748, 0.6330385704006711) , + rgb (0.8213947205565636, 0.7139109141951604, 0.6397176669767276) , + rgb (0.8229463511042843, 0.7182917733129006, 0.6464164243818421) , + rgb (0.8245268129450285, 0.7226461431208888, 0.653131379154226) , + rgb (0.8261354971058026, 0.7269727551823826, 0.659859001562165) , + rgb (0.8277716072353446, 0.7312702332407809, 0.6665957020468297) , + rgb (0.8294340781648147, 0.7355371221572935, 0.6733377200930191) , + rgb (0.8311216352909631, 0.7397718464763862, 0.6800812520363146) , + rgb (0.8328327718577798, 0.7439727181745988, 0.6868223587464855) , + rgb (0.8345656905566583, 0.7481379479992134, 0.6935569764986385) , + rgb (0.8363189884473793, 0.7522654895287526, 0.7002799902886496) , + rgb (0.8380912347613196, 0.7563531486080863, 0.7069856139021298) , + rgb (0.8398783988412087, 0.7603990719977968, 0.7136714781112923) , + rgb (0.8416775076684515, 0.7644010120098295, 0.7203329938728462) , + rgb (0.843485292229337, 0.7683566039987018, 0.7269653699897204) , + rgb (0.8452981073195511, 0.7722633860104472, 0.7335636824054149) , + rgb (0.847111955079651, 0.7761188023604716, 0.7401227576280706) , + rgb (0.8489224556311764, 0.7799202140765015, 0.7466371929366437) , + rgb (0.8507269702317879, 0.7836645734238389, 0.7530974636118285) , + rgb (0.8525190720770844, 0.7873493613354844, 0.7594994148789691) , + rgb (0.8542921961147046, 0.7909719677709199, 0.765838014779141) , + rgb (0.856040223147254, 0.7945296360155061, 0.7721061003767414) , + rgb (0.857756629435049, 0.7980196314271393, 0.778295716672475) , + rgb (0.8594346370300241, 0.8014392309950078, 0.7843978875138392) , + rgb (0.8610711702756552, 0.8047851790981223, 0.7903952966373629) , + rgb (0.8626560105112757, 0.8080552380426153, 0.796282666437655) , + rgb (0.8641834372394103, 0.8112464422465354, 0.8020461269686395) , + rgb (0.8656493432560532, 0.8143554406751491, 0.8076697232416455) , + rgb (0.867053149070485, 0.8173780404191124, 0.813134196269114) , + rgb (0.8683995469581863, 0.8203087551218152, 0.8184163896312899) , + rgb (0.8696913150261381, 0.8231415885956916, 0.8235047668317317) , + rgb (0.8709384671729751, 0.8258685788943851, 0.8283849726114961) , + rgb (0.8721533197845432, 0.8284805282370967, 0.8330486712880828) , + rgb (0.8733517136091627, 0.8309671525127262, 0.8374885100119709) , + rgb (0.8745379332026019, 0.8333197294864546, 0.8417192535806901) , + rgb (0.875714587099614, 0.8355302318472394, 0.8457553751902708) , + rgb (0.8768784845161469, 0.8375923807118654, 0.8496137354915025) , + rgb (0.8780229843664901, 0.8395016561854007, 0.8533064535245892) , + rgb (0.8791324424079277, 0.8412555488447591, 0.8568557229103964) , + rgb (0.8801929331569581, 0.8428522482477862, 0.8602739992715663) , + rgb (0.8811916987134195, 0.8442906671771735, 0.8635659516866988) , + rgb (0.8821154248940161, 0.8455700725455935, 0.8667376504623333) , + rgb (0.8829516859544853, 0.8466897027569927, 0.8697961704819097) , + rgb (0.8836912714589804, 0.8476489176151927, 0.8727414710144156) , + rgb (0.8843271305411354, 0.8484474157205542, 0.8755678522824297) , + rgb (0.8848513815990857, 0.849084264228938, 0.8782823528537247) , + rgb (0.8852589797263047, 0.8495589281098921, 0.8808841479402484) , + rgb (0.8855471481195238, 0.8498717428363158, 0.8833620612117095) , + rgb (0.8857115512284565, 0.8500218611585632, 0.8857253899008712) + }); list_data twilight_shifted = list_data(new pen[] { - rgb (0.18739228342697645, 0.07710209689958833, 0.21618875376309582) , - rgb (0.18975853639094634, 0.07501986186214377, 0.2193005075652994) , - rgb (0.19199449184606268, 0.0731828306492733, 0.22243385243433622) , - rgb (0.19410351363791453, 0.07160830485689157, 0.22558727307410353) , - rgb (0.1960826032659409, 0.07032122724242362, 0.22874673279569585) , - rgb (0.19794834061899208, 0.06931406607166066, 0.23194647381302336) , - rgb (0.19971571438603364, 0.06859271055370472, 0.23517094067076993) , - rgb (0.2015613376412984, 0.06798327102620025, 0.23852974228695395) , - rgb (0.20352007949514977, 0.06744417961242422, 0.24205576625191821) , - rgb (0.20558051999470117, 0.06699046239786874, 0.24572497420147632) , - rgb (0.2077442377448806, 0.06661453200418091, 0.24954644291943817) , - rgb (0.21001214221188125, 0.06630857391894718, 0.2535289048041211) , - rgb (0.21237411048541005, 0.06608502466175845, 0.2576516509356954) , - rgb (0.21482843531473683, 0.06594038561377849, 0.26191675992376573) , - rgb (0.21737845072382705, 0.06585966123356204, 0.2663420934966951) , - rgb (0.22001251100779617, 0.0658579189189076, 0.2709027999432586) , - rgb (0.22272706739121817, 0.06593379067565194, 0.275597146520537) , - rgb (0.22552164337737857, 0.0660781731193956, 0.28043398847505197) , - rgb (0.2283917709422868, 0.06628997924139618, 0.28541074411068496) , - rgb (0.23132955273021344, 0.06657618693909059, 0.29051361067988485) , - rgb (0.23433055727563878, 0.0669355996616394, 0.295740099298676) , - rgb (0.23739062429054825, 0.06736588805055552, 0.3010892218406587) , - rgb (0.2405081333229594, 0.0678571038148556, 0.3065705449367832) , - rgb (0.24367372557466271, 0.06841985515092269, 0.3121652405088837) , - rgb (0.24688226237959, 0.06905363944920445, 0.31786993834254956) , - rgb (0.2501284530619938, 0.06975820642910699, 0.32368100685760637) , - rgb (0.25340685873736807, 0.07053358292685183, 0.3295945757321303) , - rgb (0.256711916510839, 0.07138010624208224, 0.3356064898460009) , - rgb (0.26003895187439957, 0.0722947810433622, 0.3417175669546984) , - rgb (0.26338121807151404, 0.07328165793989708, 0.34791888996380105) , - rgb (0.26673233211995284, 0.0743440180285462, 0.3542027606624096) , - rgb (0.2700863774911405, 0.07548367558427554, 0.36056376228111864) , - rgb (0.2734373934245081, 0.07670280023749607, 0.36699616136347685) , - rgb (0.2767793961581559, 0.07800394103378822, 0.37349382846504675) , - rgb (0.2801063857697547, 0.07938999480226153, 0.38005028528138707) , - rgb (0.28341239797185225, 0.08086415336549937, 0.38665868550105914) , - rgb (0.28669151388283165, 0.08242987384848069, 0.39331182532243375) , - rgb (0.2899379244517661, 0.08409078829085731, 0.40000214725256295) , - rgb (0.2931459309698525, 0.08585065688962071, 0.40672178082365834) , - rgb (0.2963100038890529, 0.08771325096046395, 0.41346259134143476) , - rgb (0.2994248396021477, 0.08968225371675004, 0.42021619665853854) , - rgb (0.3024853636457425, 0.0917611873973036, 0.42697404043749887) , - rgb (0.30548675819945936, 0.09395276484082374, 0.4337284999936111) , - rgb (0.30842444457210105, 0.09625938534057774, 0.44047194882050544) , - rgb (0.31129434479712365, 0.0986847719340522, 0.4471931371516162) , - rgb (0.3140927841475553, 0.10123077676403242, 0.45388335612058467) , - rgb (0.316816480890235, 0.10389861387653518, 0.46053414662739794) , - rgb (0.31946262395497965, 0.1066887988239266, 0.46713728801395243) , - rgb (0.3220288227606932, 0.10960114111258401, 0.4736849472572688) , - rgb (0.32451307931207785, 0.11263459791730848, 0.48017007211645196) , - rgb (0.3269137124539796, 0.1157873496841953, 0.4865864649569746) , - rgb (0.3292300520323141, 0.11905764321981127, 0.49292595612342666) , - rgb (0.33146154891145124, 0.12244245263391232, 0.4991827458843107) , - rgb (0.33360804901486, 0.1259381830100592, 0.505351647966549) , - rgb (0.33566978565015315, 0.12954074251271822, 0.5114280721516895) , - rgb (0.3376473209067111, 0.13324562282438077, 0.5174080757397947) , - rgb (0.33954168752669694, 0.1370480189671817, 0.5232879753508524) , - rgb (0.34135411074506483, 0.1409427920655632, 0.5290650094033675) , - rgb (0.34308600291572294, 0.14492465359918028, 0.534737042820671) , - rgb (0.34473901574536375, 0.1489882058982641, 0.5403024592040654) , - rgb (0.3463150717579309, 0.15312802296627787, 0.5457599924248665) , - rgb (0.3478165323877778, 0.1573386351115298, 0.5511085345270326) , - rgb (0.34924513554955644, 0.16161477763045118, 0.5563483747416378) , - rgb (0.3506030444193101, 0.1659512998472086, 0.5614796470399323) , - rgb (0.3518924860887379, 0.17034320478524959, 0.5665028491121665) , - rgb (0.35311574421123737, 0.17478570377561287, 0.5714187152355529) , - rgb (0.3542753496066376, 0.17927413271618647, 0.5762280966066872) , - rgb (0.3553741530690672, 0.18380392577704466, 0.580931914318328) , - rgb (0.35641381143126327, 0.18837119869242164, 0.5855320765920552) , - rgb (0.35739663292915563, 0.1929720819784246, 0.5900301125106313) , - rgb (0.3583248996661781, 0.197602942459778, 0.5944276851750107) , - rgb (0.35920088560930186, 0.20226037920758122, 0.5987265295935138) , - rgb (0.36002681809096376, 0.20694122817889948, 0.6029284543191687) , - rgb (0.36080493826624654, 0.21164251793458128, 0.6070353217206471) , - rgb (0.36153829010998356, 0.21636111429594002, 0.6110488067964093) , - rgb (0.36222809558295926, 0.22109488427338303, 0.6149711234609613) , - rgb (0.3628764356004103, 0.2258414929328703, 0.6188041741082302) , - rgb (0.36348537610385145, 0.2305987621839642, 0.6225498862239288) , - rgb (0.3640569302208851, 0.23536470386204195, 0.6262101345195302) , - rgb (0.3645930889012501, 0.24013747024823828, 0.629786801550261) , - rgb (0.3650957984588681, 0.24491536803550484, 0.6332817352005559) , - rgb (0.3655669837353898, 0.24969683475296395, 0.6366967518748858) , - rgb (0.36600853966739794, 0.25448043878086224, 0.6400336180336859) , - rgb (0.3664224325155063, 0.25926481158628106, 0.6432940914076554) , - rgb (0.3668108554010799, 0.26404857724525643, 0.6464799165290824) , - rgb (0.36717513650699446, 0.26883085667326956, 0.6495927229789225) , - rgb (0.36751707094367697, 0.2736106331709098, 0.6526341171161864) , - rgb (0.3678384369653108, 0.2783869718129776, 0.655605668384537) , - rgb (0.3681410147989972, 0.2831590122118299, 0.6585088880697231) , - rgb (0.36842655638020444, 0.2879259643777846, 0.661345269109446) , - rgb (0.3686968223189527, 0.292687098561501, 0.6641162529823691) , - rgb (0.3689535530659678, 0.29744175492366276, 0.6668232208982426) , - rgb (0.36919847837592484, 0.3021893217650707, 0.6694675433161452) , - rgb (0.3694333459127623, 0.3069292355186234, 0.6720505284912062) , - rgb (0.36965987626565955, 0.3116609876295197, 0.6745734474341955) , - rgb (0.3698798032902536, 0.31638410101153364, 0.6770375543809057) , - rgb (0.37009487130772695, 0.3210981375964933, 0.6794440539905685) , - rgb (0.37030682071842685, 0.32580269697872455, 0.6817941168448668) , - rgb (0.37051738634484427, 0.3304974124430785, 0.6840888878885721) , - rgb (0.3707283327942267, 0.33518193808489577, 0.6863294816960677) , - rgb (0.3709415155133733, 0.33985591488818123, 0.6885170337950512) , - rgb (0.37115856636209105, 0.3445191141023017, 0.6906525358646499) , - rgb (0.37138124223736607, 0.34917126878479027, 0.6927370347192883) , - rgb (0.3716113323440048, 0.3538121372967869, 0.6947714991938089) , - rgb (0.3718506155898596, 0.3584414828587522, 0.6967569581025654) , - rgb (0.3721008970244382, 0.3630590973698238, 0.6986943461507372) , - rgb (0.37236397858465387, 0.36766477862108266, 0.7005846349652077) , - rgb (0.37264166757849604, 0.3722583500483685, 0.7024287314570723) , - rgb (0.3729357864666503, 0.3768396383521984, 0.7042275578058994) , - rgb (0.37324816143326384, 0.38140848555753937, 0.7059820097480604) , - rgb (0.3735806215098284, 0.3859647438605754, 0.7076929760731058) , - rgb (0.3739349933047578, 0.3905082752937583, 0.7093613429347845) , - rgb (0.3743131319931234, 0.3950389482828331, 0.7109879652237746) , - rgb (0.3747168601930223, 0.3995566498711684, 0.7125736851650046) , - rgb (0.37514802505380473, 0.4040612609993941, 0.7141193695725726) , - rgb (0.375608469194424, 0.40855267638072096, 0.7156258509158755) , - rgb (0.37610001286385814, 0.4130307995247706, 0.7170939691992023) , - rgb (0.37662448930806297, 0.41749553747893614, 0.7185245473617611) , - rgb (0.3771837184425123, 0.4219468022345483, 0.7199184152447577) , - rgb (0.3777794975351373, 0.4263845142616835, 0.7212763999353023) , - rgb (0.378413635091359, 0.43080859411413064, 0.7225993199306104) , - rgb (0.3790878928311076, 0.43521897612544935, 0.7238879869132313) , - rgb (0.3798040374484875, 0.4396155882122263, 0.7251432377876109) , - rgb (0.3805638069656562, 0.4439983720863372, 0.7263658704513531) , - rgb (0.3813688793045416, 0.4483672766927786, 0.7275567131714135) , - rgb (0.38222094988570376, 0.45272225034283325, 0.7287165614400378) , - rgb (0.3831216808440275, 0.457063235814072, 0.7298462679135326) , - rgb (0.38407269378943537, 0.46139018782416635, 0.7309466543290268) , - rgb (0.3850755679365139, 0.46570306719930193, 0.732018540336905) , - rgb (0.386131841788921, 0.4700018340988123, 0.7330627749243106) , - rgb (0.3872430145933025, 0.4742864593363539, 0.7340801678785439) , - rgb (0.3884105330084243, 0.47855691131792805, 0.7350715764115726) , - rgb (0.38963580160340855, 0.48281316715123496, 0.7360378254693274) , - rgb (0.390920175719949, 0.4870552025122304, 0.7369797713388125) , - rgb (0.39226494876209317, 0.4912830033289926, 0.7378982478447508) , - rgb (0.39367135736822567, 0.4954965577745118, 0.738794102296364) , - rgb (0.3951405880820763, 0.4996958532637776, 0.7396682021171571) , - rgb (0.3966737490566561, 0.5038808905384797, 0.7405213858051674) , - rgb (0.3982719152586337, 0.5080516653927614, 0.7413545091809972) , - rgb (0.39993606933454834, 0.5122081814321852, 0.7421684457131799) , - rgb (0.40166714010896104, 0.5163504496968876, 0.7429640345324835) , - rgb (0.40346600333905397, 0.5204784765384003, 0.7437421522356709) , - rgb (0.4053334378930318, 0.5245922817498312, 0.7445036583670813) , - rgb (0.4072701869421907, 0.5286918801105741, 0.7452494263758127) , - rgb (0.4092768899914751, 0.5327773017713032, 0.7459803063570782) , - rgb (0.4113541469730457, 0.5368485776500593, 0.7466971285506578) , - rgb (0.4135024574331473, 0.5409057477109848, 0.7474007329754309) , - rgb (0.4157223260454232, 0.544948827153504, 0.7480920445900052) , - rgb (0.4180141407923363, 0.5489778542188889, 0.7487719316700112) , - rgb (0.42037822361396326, 0.5529928715810817, 0.7494412559451894) , - rgb (0.4228148567577266, 0.5569939212699658, 0.7501008698822764) , - rgb (0.42532423665011354, 0.560981049599503, 0.7507516498900512) , - rgb (0.42790652284925834, 0.5649543060909209, 0.7513944352191484) , - rgb (0.4305617907305757, 0.5689137457245718, 0.752030080993127) , - rgb (0.43329008867358393, 0.5728594162560667, 0.7526594653256667) , - rgb (0.4360913895835637, 0.5767913799818608, 0.7532834105961016) , - rgb (0.43896563958048396, 0.5807096924109849, 0.7539027620828594) , - rgb (0.441912717666964, 0.5846144110017557, 0.7545183888441067) , - rgb (0.4449324685421538, 0.5885055998308617, 0.7551311041857901) , - rgb (0.4480247093358917, 0.5923833145214658, 0.7557417647410792) , - rgb (0.45118918687617743, 0.5962476205135354, 0.7563512064324664) , - rgb (0.45442563977552913, 0.6000985950385866, 0.7569601366060649) , - rgb (0.45773377230160567, 0.6039363004658646, 0.7575693690185916) , - rgb (0.4611132664702388, 0.607760777169989, 0.7581798643680714) , - rgb (0.4645637671630393, 0.6115720882286415, 0.7587924262302581) , - rgb (0.46808490970531597, 0.6153702869579029, 0.7594078989109274) , - rgb (0.4716762951887709, 0.6191554324288464, 0.7600270922788305) , - rgb (0.47533752394906287, 0.6229275728383581, 0.7606508557181775) , - rgb (0.47906816236197386, 0.6266867625186013, 0.7612800037566242) , - rgb (0.4828677867260272, 0.6304330455306234, 0.761915371498953) , - rgb (0.4867359599430568, 0.6341664625110051, 0.7625578008592404) , - rgb (0.4906722493856122, 0.6378870485884708, 0.7632081276316384) , - rgb (0.4946761847863938, 0.6415948411950443, 0.7638671900213091) , - rgb (0.4987473366135607, 0.6452898684900934, 0.7645357873418008) , - rgb (0.5028853540415561, 0.6489721673409526, 0.7652144671817491) , - rgb (0.5070896957645166, 0.6526417240314645, 0.7659044566083585) , - rgb (0.5113599254160193, 0.6562985398183186, 0.7666066378064533) , - rgb (0.5156955988596057, 0.65994260812898, 0.7673219148959617) , - rgb (0.5200962739223556, 0.6635739143403039, 0.768051194033441) , - rgb (0.5245615147059358, 0.6671924299614223, 0.7687954171423095) , - rgb (0.529090861832473, 0.6707981230280622, 0.7695555229231313) , - rgb (0.533683891477284, 0.6743909370521273, 0.7703325054879735) , - rgb (0.5383401557517628, 0.677970811290954, 0.7711273443905772) , - rgb (0.5430593242401823, 0.6815376725306588, 0.7719407969783508) , - rgb (0.5478409815301863, 0.6850914221850988, 0.7727738647344087) , - rgb (0.5526845058934713, 0.6886319451516638, 0.7736279426902245) , - rgb (0.5575894041960517, 0.6921591145825405, 0.7745041337932782) , - rgb (0.5625551535721934, 0.6956727838162965, 0.7754035914230984) , - rgb (0.5675811785386197, 0.6991727930264627, 0.776327485342753) , - rgb (0.5726668948158774, 0.7026589535425779, 0.7772770268091199) , - rgb (0.5778116438998202, 0.7061310615715398, 0.7782534512102552) , - rgb (0.5830148703693241, 0.7095888767699747, 0.7792578182047659) , - rgb (0.588275797805555, 0.7130321464645814, 0.7802914140563652) , - rgb (0.5935933569683722, 0.7164606049658685, 0.781355882376401) , - rgb (0.5989665814482068, 0.7198739489224673, 0.7824525989934664) , - rgb (0.6043943420027486, 0.7232718614323369, 0.7835829559353559) , - rgb (0.6098754317609306, 0.7266539875975829, 0.7847483573269471) , - rgb (0.6154084641177048, 0.7300199523273969, 0.7859502270675048) , - rgb (0.6209919306481755, 0.733369347989232, 0.7871899462469658) , - rgb (0.6266240202260459, 0.7367017540369944, 0.7884690131633456) , - rgb (0.6323027138710603, 0.740016721601314, 0.7897889276264043) , - rgb (0.6380258682854598, 0.7433137671403319, 0.7911510045957317) , - rgb (0.6437910831099849, 0.7465923800833657, 0.7925565320130605) , - rgb (0.6495957300425348, 0.7498520122194177, 0.7940067402149911) , - rgb (0.6554369232645472, 0.7530920875676843, 0.7955027112903105) , - rgb (0.6613112930078745, 0.7563120270871903, 0.7970456043491897) , - rgb (0.6672147980375281, 0.7595112803730375, 0.7986367465453776) , - rgb (0.6731442255942621, 0.7626890873389048, 0.8002762854580953) , - rgb (0.6790955449988215, 0.765844721313959, 0.8019646617300199) , - rgb (0.6850644615439593, 0.7689774029354699, 0.8037020626717691) , - rgb (0.691046410093091, 0.7720862946067809, 0.8054884169067907) , - rgb (0.6970365443886174, 0.7751705000806606, 0.8073233538006345) , - rgb (0.7030297722540817, 0.7782290497335813, 0.8092061884805697) , - rgb (0.709020781345393, 0.7812608871607091, 0.8111359185511793) , - rgb (0.7150040307625213, 0.7842648709158119, 0.8131111655994991) , - rgb (0.7209728066553678, 0.7872399592345264, 0.8151307392087926) , - rgb (0.726921775128297, 0.7901846863592763, 0.8171921746672638) , - rgb (0.7328454364552346, 0.7930974646884407, 0.8192926338423038) , - rgb (0.7387377170049494, 0.7959766573503101, 0.8214292278043301) , - rgb (0.7445924777189017, 0.7988204771958325, 0.8235986758615652) , - rgb (0.750403467654067, 0.8016269900896532, 0.8257973785108242) , - rgb (0.7561644358438198, 0.8043940873347794, 0.8280213899472) , - rgb (0.7618690793798029, 0.8071194938764749, 0.830266486168872) , - rgb (0.7675110850441786, 0.8098007598713145, 0.8325281663805967) , - rgb (0.7730841659017094, 0.8124352473546601, 0.8348017295057968) , - rgb (0.7785789200822759, 0.8150208937874255, 0.8370834463093898) , - rgb (0.7839910104276492, 0.8175542640053343, 0.8393674746403673) , - rgb (0.7893144556460892, 0.8200321318870201, 0.8416486380471222) , - rgb (0.7945430508923111, 0.8224511622630462, 0.8439218478682798) , - rgb (0.79967075421268, 0.8248078181208093, 0.8461821002957853) , - rgb (0.8046916442981458, 0.8270983878056066, 0.8484244929697402) , - rgb (0.8095999819094809, 0.8293189667350546, 0.8506444160105037) , - rgb (0.8143898212114309, 0.8314655869419785, 0.8528375906214702) , - rgb (0.8190465467793753, 0.8335364929949034, 0.855002062870101) , - rgb (0.8235742968025285, 0.8355248776479544, 0.8571319132851495) , - rgb (0.8279689431601354, 0.837426007513952, 0.8592239945130679) , - rgb (0.8322270571293441, 0.8392349062775448, 0.8612756350042788) , - rgb (0.8363403180919118, 0.8409479651895194, 0.8632852800107016) , - rgb (0.8403042080595778, 0.8425605950855084, 0.865250882410458) , - rgb (0.8441261828674842, 0.8440648271103739, 0.8671697332269007) , - rgb (0.8478071070257792, 0.8454546229209523, 0.8690403678369444) , - rgb (0.8513371457085719, 0.8467273579611647, 0.8708608165735044) , - rgb (0.8547259318925698, 0.8478748812467282, 0.8726282980930582) , - rgb (0.8579825924567037, 0.8488893481028184, 0.8743403855344628) , - rgb (0.8611024543689985, 0.8497675485700126, 0.8759924292343957) , - rgb (0.86408985081464, 0.8505039116750779, 0.8775792578489263) , - rgb (0.8669601550533358, 0.8510896085314068, 0.8790976697717334) , - rgb (0.8697047485350982, 0.8515240300479789, 0.8805388339000336) , - rgb (0.8723313408512408, 0.8518016547808089, 0.8818970435500162) , - rgb (0.8748534750857597, 0.8519152612302319, 0.8831692696761383) , - rgb (0.8772488085896548, 0.8518702833887027, 0.8843412038131143) , - rgb (0.8795410528270573, 0.8516567540749572, 0.8854143767924102) , - rgb (0.8817223105928579, 0.8512759407765347, 0.8863805692551482) , - rgb (0.8837852019553906, 0.8507294054031063, 0.8872322209694989) , - rgb (0.8857501584075443, 0.8500092494306783, 0.8879736506427196) , - rgb (0.8857115512284565, 0.8500218611585632, 0.8857253899008712) , - rgb (0.8855471481195238, 0.8498717428363158, 0.8833620612117095) , - rgb (0.8852589797263047, 0.8495589281098921, 0.8808841479402484) , - rgb (0.8848513815990857, 0.849084264228938, 0.8782823528537247) , - rgb (0.8843271305411354, 0.8484474157205542, 0.8755678522824297) , - rgb (0.8836912714589804, 0.8476489176151927, 0.8727414710144156) , - rgb (0.8829516859544853, 0.8466897027569927, 0.8697961704819097) , - rgb (0.8821154248940161, 0.8455700725455935, 0.8667376504623333) , - rgb (0.8811916987134195, 0.8442906671771735, 0.8635659516866988) , - rgb (0.8801929331569581, 0.8428522482477862, 0.8602739992715663) , - rgb (0.8791324424079277, 0.8412555488447591, 0.8568557229103964) , - rgb (0.8780229843664901, 0.8395016561854007, 0.8533064535245892) , - rgb (0.8768784845161469, 0.8375923807118654, 0.8496137354915025) , - rgb (0.875714587099614, 0.8355302318472394, 0.8457553751902708) , - rgb (0.8745379332026019, 0.8333197294864546, 0.8417192535806901) , - rgb (0.8733517136091627, 0.8309671525127262, 0.8374885100119709) , - rgb (0.8721533197845432, 0.8284805282370967, 0.8330486712880828) , - rgb (0.8709384671729751, 0.8258685788943851, 0.8283849726114961) , - rgb (0.8696913150261381, 0.8231415885956916, 0.8235047668317317) , - rgb (0.8683995469581863, 0.8203087551218152, 0.8184163896312899) , - rgb (0.867053149070485, 0.8173780404191124, 0.813134196269114) , - rgb (0.8656493432560532, 0.8143554406751491, 0.8076697232416455) , - rgb (0.8641834372394103, 0.8112464422465354, 0.8020461269686395) , - rgb (0.8626560105112757, 0.8080552380426153, 0.796282666437655) , - rgb (0.8610711702756552, 0.8047851790981223, 0.7903952966373629) , - rgb (0.8594346370300241, 0.8014392309950078, 0.7843978875138392) , - rgb (0.857756629435049, 0.7980196314271393, 0.778295716672475) , - rgb (0.856040223147254, 0.7945296360155061, 0.7721061003767414) , - rgb (0.8542921961147046, 0.7909719677709199, 0.765838014779141) , - rgb (0.8525190720770844, 0.7873493613354844, 0.7594994148789691) , - rgb (0.8507269702317879, 0.7836645734238389, 0.7530974636118285) , - rgb (0.8489224556311764, 0.7799202140765015, 0.7466371929366437) , - rgb (0.847111955079651, 0.7761188023604716, 0.7401227576280706) , - rgb (0.8452981073195511, 0.7722633860104472, 0.7335636824054149) , - rgb (0.843485292229337, 0.7683566039987018, 0.7269653699897204) , - rgb (0.8416775076684515, 0.7644010120098295, 0.7203329938728462) , - rgb (0.8398783988412087, 0.7603990719977968, 0.7136714781112923) , - rgb (0.8380912347613196, 0.7563531486080863, 0.7069856139021298) , - rgb (0.8363189884473793, 0.7522654895287526, 0.7002799902886496) , - rgb (0.8345656905566583, 0.7481379479992134, 0.6935569764986385) , - rgb (0.8328327718577798, 0.7439727181745988, 0.6868223587464855) , - rgb (0.8311216352909631, 0.7397718464763862, 0.6800812520363146) , - rgb (0.8294340781648147, 0.7355371221572935, 0.6733377200930191) , - rgb (0.8277716072353446, 0.7312702332407809, 0.6665957020468297) , - rgb (0.8261354971058026, 0.7269727551823826, 0.659859001562165) , - rgb (0.8245268129450285, 0.7226461431208888, 0.653131379154226) , - rgb (0.8229463511042843, 0.7182917733129006, 0.6464164243818421) , - rgb (0.8213947205565636, 0.7139109141951604, 0.6397176669767276) , - rgb (0.8198723065045529, 0.7095047497878748, 0.6330385704006711) , - rgb (0.8183793116449822, 0.705074381896351, 0.626382454789333) , - rgb (0.8169157577505589, 0.7006208301478398, 0.6197526063725792) , - rgb (0.8154814662727948, 0.6961450550830809, 0.6131522120932265) , - rgb (0.8140761104699334, 0.6916479479148213, 0.6065843782630862) , - rgb (0.8126992203988149, 0.6871303371461888, 0.600052148204351) , - rgb (0.8113501401176333, 0.6825930154624339, 0.5935584890905076) , - rgb (0.8100280946652069, 0.6780367267397182, 0.5871062690808275) , - rgb (0.8087321917008969, 0.6734621670219452, 0.5806983480557674) , - rgb (0.8074614045096935, 0.6688700095398864, 0.5743374637345958) , - rgb (0.8062146052692706, 0.6642608958528229, 0.5680262917864979) , - rgb (0.804990547908103, 0.6596354502756416, 0.5617674511054698) , - rgb (0.8037879253107763, 0.6549942654947263, 0.5555635086708381) , - rgb (0.8026053114611295, 0.6503379374810385, 0.5494169158460365) , - rgb (0.8014412429256005, 0.6456670345921877, 0.5433300863249918) , - rgb (0.8002941538975398, 0.6409821330674986, 0.5373053518514104) , - rgb (0.7991624518501963, 0.6362837937202919, 0.5313449594256143) , - rgb (0.7980444781513664, 0.6315725822508955, 0.5254510814483478) , - rgb (0.7969385471995161, 0.626849056792967, 0.5196258425240281) , - rgb (0.7958429237958377, 0.6221137880845115, 0.5138712409190979) , - rgb (0.7947558597265404, 0.617367344002207, 0.5081892121310299) , - rgb (0.7936755969866496, 0.6126102933407219, 0.5025816129126943) , - rgb (0.7926003430423745, 0.6078432208703702, 0.4970502062153201) , - rgb (0.7915283284347561, 0.603066705931472, 0.49159667021646397) , - rgb (0.7904577684772788, 0.5982813427706246, 0.48622257801969754) , - rgb (0.7893873776625194, 0.5934875421745599, 0.48092913815357724) , - rgb (0.7883151404562396, 0.5886860017356244, 0.4757179187907608) , - rgb (0.7872390410818835, 0.5838774374455721, 0.47059039582133383) , - rgb (0.7861573713233296, 0.5790624629815756, 0.465547782819184) , - rgb (0.7850684501960684, 0.5742417003617839, 0.46059116206904965) , - rgb (0.7839706083641448, 0.5694157832671042, 0.4557215474289206) , - rgb (0.7828622526444091, 0.5645853311116688, 0.45093985823706345) , - rgb (0.7817418047898184, 0.5597509805259486, 0.44624687186865436) , - rgb (0.7806077474948377, 0.5549133574489061, 0.4416433242636464) , - rgb (0.7794586273150664, 0.5500730841397727, 0.4371297985644476) , - rgb (0.7782934580763312, 0.545230594884266, 0.432706647838971) , - rgb (0.7771103295521099, 0.5403867491056124, 0.4283745037125848) , - rgb (0.775907907306857, 0.5355421788246119, 0.42413367909988375) , - rgb (0.774684947460632, 0.5306974938477673, 0.4199844035696376) , - rgb (0.7734402182988989, 0.5258533209345156, 0.41592679539764366) , - rgb (0.7721725722960555, 0.5210102658711383, 0.4119608998712287) , - rgb (0.7708809196230247, 0.516168926434691, 0.40808667584648967) , - rgb (0.7695642334401418, 0.5113298901696085, 0.4043039806968248) , - rgb (0.768221765997353, 0.5064936237128791, 0.40061257089416885) , - rgb (0.7668522895064389, 0.5016608471009063, 0.39701221751773474) , - rgb (0.7654549259333051, 0.4968321290972723, 0.3935025400011538) , - rgb (0.7640288560928866, 0.49200802533379656, 0.39008308392311997) , - rgb (0.7625733355405261, 0.48718906673415824, 0.38675335037837993) , - rgb (0.7610876378057071, 0.48237579130289127, 0.3835127572385229) , - rgb (0.7595711110534006, 0.4775687122205708, 0.380360657784311) , - rgb (0.7580232553845584, 0.4727682731566229, 0.3772963553109668) , - rgb (0.7564434157714071, 0.4679750143794846, 0.37431909037543515) , - rgb (0.7548310506695954, 0.46318942799460555, 0.3714280448394211) , - rgb (0.7531856636904657, 0.45841199172949604, 0.3686223664223477) , - rgb (0.7515068504589166, 0.45364314496866825, 0.36590112443835765) , - rgb (0.7497942054717047, 0.4488833348154881, 0.3632633755836028) , - rgb (0.7480473927555956, 0.44413297780351974, 0.36070813602540136) , - rgb (0.7462661578916344, 0.439392450449735, 0.3582343914230064) , - rgb (0.7444501867657067, 0.4346621718461711, 0.35584108091122535) , - rgb (0.7425992159973317, 0.42994254036133867, 0.3535270924537459) , - rgb (0.7407130161950609, 0.4252339389526239, 0.35129130890802607) , - rgb (0.7387914002459927, 0.4205367299231533, 0.34913260148542435) , - rgb (0.7368342217358587, 0.4158512585029011, 0.347049785207584) , - rgb (0.7348413359856494, 0.4111778700451951, 0.3450416947080907) , - rgb (0.7328127050626875, 0.4065168468778026, 0.3431071517341082) , - rgb (0.7307482075484517, 0.401868526884681, 0.3412449533046818) , - rgb (0.7286477385671655, 0.39723324476747235, 0.33945384341064017) , - rgb (0.7265112290022755, 0.3926113126792577, 0.3377325942005665) , - rgb (0.7243386564778159, 0.38800301593162145, 0.3360799596569183) , - rgb (0.7221299918421461, 0.3834086450896306, 0.33449469983585844) , - rgb (0.7198852149054985, 0.37882848839337313, 0.332975552002454) , - rgb (0.7176044490813385, 0.3742627271068619, 0.3315213862095893) , - rgb (0.7152876061484729, 0.3697117022522345, 0.3301308728723546) , - rgb (0.7129346683977347, 0.36517570519856757, 0.3288027427038317) , - rgb (0.7105456546582587, 0.36065500290840113, 0.3275357416278876) , - rgb (0.7081205956842048, 0.356149855233803, 0.32632861885644465) , - rgb (0.7056595112261009, 0.3516605297812094, 0.32518014084085567) , - rgb (0.7031624945881415, 0.34718723719598, 0.32408913679491225) , - rgb (0.700629624772421, 0.34273019305341756, 0.32305449047765694) , - rgb (0.6980608153581771, 0.3382897632604862, 0.3220747885521809) , - rgb (0.6954560834689112, 0.33386622163232865, 0.3211488430698579) , - rgb (0.6928154484676493, 0.32945984647042675, 0.3202754315314667) , - rgb (0.6901389321505248, 0.32507091815606004, 0.319453323328983) , - rgb (0.6874265643516962, 0.32069970535138104, 0.3186813762227769) , - rgb (0.6846785094249453, 0.3163463482122221, 0.31795870784057567) , - rgb (0.6818945715094452, 0.31201133280550686, 0.3172838048924495) , - rgb (0.6790747402815734, 0.30769497879760166, 0.31665545668946665) , - rgb (0.6762189792440975, 0.30339762792450425, 0.3160724937230589) , - rgb (0.6733272556481733, 0.29911962764489264, 0.3155337232398221) , - rgb (0.670399595476762, 0.29486126309253047, 0.3150381395687221) , - rgb (0.6674360376636913, 0.29062280081258873, 0.31458483752056837) , - rgb (0.6644363246987884, 0.2864048361425618, 0.31417223403606975) , - rgb (0.6614003753260178, 0.28220778870555907, 0.3137991292649849) , - rgb (0.6583280801134499, 0.2780321095766563, 0.3134643447952643) , - rgb (0.6552193260932713, 0.2738782665241015, 0.3131666792687211) , - rgb (0.652074172902773, 0.269746505252367, 0.3129056060581917) , - rgb (0.6488923016945825, 0.2656375533620908, 0.3126794181957019) , - rgb (0.6456734938264543, 0.2615520316161528, 0.31248673753935263) , - rgb (0.642417577481186, 0.257490519876798, 0.31232631707560987) , - rgb (0.6391243387840212, 0.2534536546198314, 0.3121968961206398) , - rgb (0.6357937104834237, 0.24944185818822678, 0.3120979395330059) , - rgb (0.6324253485421027, 0.24545598775548677, 0.3120276597462445) , - rgb (0.6290189201698587, 0.24149689191922535, 0.3119844719564572) , - rgb (0.6255741650043496, 0.23756535071152696, 0.3119669831491227) , - rgb (0.6220907982108261, 0.2336621873300741, 0.3119738327362739) , - rgb (0.6185686525887719, 0.2297879924917992, 0.3120046383872893) , - rgb (0.6150072323639137, 0.22594402043981826, 0.3120568068576574) , - rgb (0.6114062072731884, 0.22213124697023234, 0.3121288139643524) , - rgb (0.6077652399481865, 0.21835070166659282, 0.312219032918702) , - rgb (0.6040840169673274, 0.21460331490206347, 0.31232652641170694) , - rgb (0.6003621301041158, 0.21089030138947745, 0.3124493441041469) , - rgb (0.5965991810912237, 0.207212956082026, 0.3125852303112123) , - rgb (0.5927948053652026, 0.20357251410079796, 0.3127323483930494) , - rgb (0.5889486193554471, 0.19997020971775276, 0.31288922211590126) , - rgb (0.5850602439646688, 0.19640737049066315, 0.3130540116373273) , - rgb (0.5811293276158656, 0.19288548904692518, 0.3132239939418394) , - rgb (0.5771555081299204, 0.18940601489760422, 0.3133970433357208) , - rgb (0.5731384575410787, 0.18597036007065024, 0.3135712686852) , - rgb (0.5690778478401143, 0.18258004462335425, 0.3137444095679653) , - rgb (0.564973435290177, 0.17923664950367169, 0.3139136046337036) , - rgb (0.5608249903911717, 0.17594170887918095, 0.31407639883970623) , - rgb (0.5566322903496934, 0.17269677158182117, 0.31423043195101424) , - rgb (0.5523952157271191, 0.16950338809328983, 0.3143729155461537) , - rgb (0.5481137003346762, 0.1663630904279047, 0.3145010299091471) , - rgb (0.5437877131360856, 0.16327738551419116, 0.31461204226295625) , - rgb (0.5394173664919906, 0.16024769309971934, 0.31470295028655965) , - rgb (0.5350027976174474, 0.15727540775107324, 0.3147708520739653) , - rgb (0.5305442048985645, 0.15436183633886777, 0.3148129978918713) , - rgb (0.5260418962547748, 0.15150818660835483, 0.31482653406646727) , - rgb (0.5214965286322996, 0.14871544765633712, 0.3148076795453443) , - rgb (0.5169084880054446, 0.14598463068714407, 0.3147540759228004) , - rgb (0.5122783510532176, 0.14331656120063752, 0.3146630922831542) , - rgb (0.5076068118105369, 0.14071192654913128, 0.3145320012008257) , - rgb (0.5028952497497061, 0.13817086581280427, 0.3143566215383367) , - rgb (0.4981443546207415, 0.13569380302451714, 0.314135190862664) , - rgb (0.49335504375145617, 0.13328091630401023, 0.31386561956734976) , - rgb (0.48852847371852987, 0.13093210934893723, 0.31354553695453014) , - rgb (0.48366628618847957, 0.1286467902201389, 0.31317188565991266) , - rgb (0.47877034239726296, 0.12642401401409453, 0.3127417273582196) , - rgb (0.473841437035254, 0.12426354237989065, 0.31225470169927194) , - rgb (0.46888111384598413, 0.12216445576414045, 0.31170911458932665) , - rgb (0.46389102840284874, 0.12012561256850712, 0.31110343446582983) , - rgb (0.45887288947308297, 0.11814571137706886, 0.3104363697903881) , - rgb (0.4538300508699989, 0.11622183788331528, 0.3097044124984492) , - rgb (0.4487629917317482, 0.1143535557462255, 0.30890905921943196) , - rgb (0.44367358645071275, 0.11253912421257944, 0.3080497309546545) , - rgb (0.4385637818793154, 0.11077667828375456, 0.30712600062348083) , - rgb (0.4334355841041439, 0.1090642347484701, 0.3061376792828915) , - rgb (0.4282910131578975, 0.1073997763055258, 0.30508479060294547) , - rgb (0.42313214269556043, 0.10578120994917611, 0.3039675809469457) , - rgb (0.41796105205173684, 0.10420644885760968, 0.3027865203963184) , - rgb (0.41277985630360303, 0.1026734006932461, 0.3015422643746897) , - rgb (0.4075912039268871, 0.10117945586419633, 0.300235195077286) , - rgb (0.40239692379737496, 0.09972293031495055, 0.2988667436973397) , - rgb (0.39719876876325577, 0.09830232096827862, 0.2974385647628578) , - rgb (0.39199887556812907, 0.09691583650296684, 0.2959521200550908) , - rgb (0.3867993907954417, 0.09556181960083443, 0.29440901248173756) , - rgb (0.38160247377467543, 0.09423873126371218, 0.2928110750626949) , - rgb (0.3764103053221462, 0.09294519809377791, 0.2911602415731392) , - rgb (0.3712250843130934, 0.09167999748026273, 0.2894586539763317) , - rgb (0.36605031412464006, 0.0904406854276979, 0.2877077458811747) , - rgb (0.36088752387578377, 0.0892271943627452, 0.28591050458531014) , - rgb (0.35573889947341125, 0.08803897435024335, 0.2840695897279818) , - rgb (0.3506067824603248, 0.08687555176033529, 0.28218770540182386) , - rgb (0.345493557138718, 0.08573665496512634, 0.28026769921081435) , - rgb (0.34040164359597463, 0.08462223619170267, 0.27831254595259397) , - rgb (0.3353335322445545, 0.08353243411900396, 0.2763253435679004) , - rgb (0.3302917447118144, 0.08246763389003825, 0.27430929404579435) , - rgb (0.3252788886040126, 0.08142839007654609, 0.27226772884656186) , - rgb (0.3202998655799406, 0.08041299473755484, 0.2702032289303951) , - rgb (0.3153587000920581, 0.07942099731524319, 0.2681190407694196) , - rgb (0.31045520848595526, 0.07845687167618218, 0.2660200572779356) , - rgb (0.30559226007249934, 0.07752196310753731, 0.2639100669211966) , - rgb (0.3007727681291869, 0.07661782433616476, 0.2617929409781967) , - rgb (0.2960004726065818, 0.07574533600095842, 0.25967245030364566) , - rgb (0.29128515387578635, 0.0748990498474667, 0.25755101595750435) , - rgb (0.28662309235899847, 0.07408846082680887, 0.2554347867371703) , - rgb (0.2820174629736694, 0.07331569321404097, 0.25332800295084507) , - rgb (0.277471508091428, 0.07258296989925478, 0.2512349399594277) , - rgb (0.272997015188973, 0.07188355544616351, 0.2491584709323293) , - rgb (0.2685909594817286, 0.07122671627792246, 0.24710443563450618) , - rgb (0.2642551220706094, 0.07061659562299544, 0.24507758869355967) , - rgb (0.25999463887892144, 0.07005385560386188, 0.24308218808684579) , - rgb (0.2558213554748177, 0.06953231029187984, 0.24112190491594204) , - rgb (0.25172899728289466, 0.0690646308260355, 0.23920260612763083) , - rgb (0.247720929905011, 0.06865333790948652, 0.2373288009471749) , - rgb (0.2438114972024792, 0.06828985152901187, 0.23550427698321885) , - rgb (0.23999586188690308, 0.06798502996477995, 0.23373434258507808) , - rgb (0.23627495835774248, 0.06774359820987802, 0.23202360805926608) , - rgb (0.23266299920501882, 0.06755710438847978, 0.23037617493752832) , - rgb (0.2291562027859284, 0.06743473087115257, 0.22879681433956656) , - rgb (0.2257539681670791, 0.06738213230014747, 0.22728984778098055) , - rgb (0.22247308588973624, 0.06738821405309284, 0.22585960379408354) , - rgb (0.21930503925136402, 0.06746578636294004, 0.22451023616807558) , - rgb (0.21625279838647882, 0.06761633027051639, 0.22324568672294431) , - rgb (0.2133313859647627, 0.06783014842602667, 0.2220704321302429) , - rgb (0.21052882914958676, 0.06812195249816172, 0.22098759107715404) , - rgb (0.20785704662965598, 0.06848439879702528, 0.22000133917653536) , - rgb (0.20531725273301316, 0.06891959226639757, 0.21911516689288835) , - rgb (0.20290365333558247, 0.06943524858045896, 0.21833167885096033) , - rgb (0.20058760685133747, 0.07006457614998421, 0.21762721310371608) , - rgb (0.19819343656336558, 0.07097462525273879, 0.21690975060032436) , - rgb (0.19571853588267552, 0.07215778103960274, 0.21617499187076789) , - rgb (0.1931548636579131, 0.07360681904011795, 0.21542362939081539) , - rgb (0.19049578401722037, 0.07531127841678764, 0.2146562337112265) , - rgb (0.18774482037046955, 0.07725158846803931, 0.21387448578597812) , - rgb (0.18488035509396164, 0.07942573027972388, 0.21307651648984993) -}); + rgb (0.18739228342697645, 0.07710209689958833, 0.21618875376309582) , + rgb (0.18975853639094634, 0.07501986186214377, 0.2193005075652994) , + rgb (0.19199449184606268, 0.0731828306492733, 0.22243385243433622) , + rgb (0.19410351363791453, 0.07160830485689157, 0.22558727307410353) , + rgb (0.1960826032659409, 0.07032122724242362, 0.22874673279569585) , + rgb (0.19794834061899208, 0.06931406607166066, 0.23194647381302336) , + rgb (0.19971571438603364, 0.06859271055370472, 0.23517094067076993) , + rgb (0.2015613376412984, 0.06798327102620025, 0.23852974228695395) , + rgb (0.20352007949514977, 0.06744417961242422, 0.24205576625191821) , + rgb (0.20558051999470117, 0.06699046239786874, 0.24572497420147632) , + rgb (0.2077442377448806, 0.06661453200418091, 0.24954644291943817) , + rgb (0.21001214221188125, 0.06630857391894718, 0.2535289048041211) , + rgb (0.21237411048541005, 0.06608502466175845, 0.2576516509356954) , + rgb (0.21482843531473683, 0.06594038561377849, 0.26191675992376573) , + rgb (0.21737845072382705, 0.06585966123356204, 0.2663420934966951) , + rgb (0.22001251100779617, 0.0658579189189076, 0.2709027999432586) , + rgb (0.22272706739121817, 0.06593379067565194, 0.275597146520537) , + rgb (0.22552164337737857, 0.0660781731193956, 0.28043398847505197) , + rgb (0.2283917709422868, 0.06628997924139618, 0.28541074411068496) , + rgb (0.23132955273021344, 0.06657618693909059, 0.29051361067988485) , + rgb (0.23433055727563878, 0.0669355996616394, 0.295740099298676) , + rgb (0.23739062429054825, 0.06736588805055552, 0.3010892218406587) , + rgb (0.2405081333229594, 0.0678571038148556, 0.3065705449367832) , + rgb (0.24367372557466271, 0.06841985515092269, 0.3121652405088837) , + rgb (0.24688226237959, 0.06905363944920445, 0.31786993834254956) , + rgb (0.2501284530619938, 0.06975820642910699, 0.32368100685760637) , + rgb (0.25340685873736807, 0.07053358292685183, 0.3295945757321303) , + rgb (0.256711916510839, 0.07138010624208224, 0.3356064898460009) , + rgb (0.26003895187439957, 0.0722947810433622, 0.3417175669546984) , + rgb (0.26338121807151404, 0.07328165793989708, 0.34791888996380105) , + rgb (0.26673233211995284, 0.0743440180285462, 0.3542027606624096) , + rgb (0.2700863774911405, 0.07548367558427554, 0.36056376228111864) , + rgb (0.2734373934245081, 0.07670280023749607, 0.36699616136347685) , + rgb (0.2767793961581559, 0.07800394103378822, 0.37349382846504675) , + rgb (0.2801063857697547, 0.07938999480226153, 0.38005028528138707) , + rgb (0.28341239797185225, 0.08086415336549937, 0.38665868550105914) , + rgb (0.28669151388283165, 0.08242987384848069, 0.39331182532243375) , + rgb (0.2899379244517661, 0.08409078829085731, 0.40000214725256295) , + rgb (0.2931459309698525, 0.08585065688962071, 0.40672178082365834) , + rgb (0.2963100038890529, 0.08771325096046395, 0.41346259134143476) , + rgb (0.2994248396021477, 0.08968225371675004, 0.42021619665853854) , + rgb (0.3024853636457425, 0.0917611873973036, 0.42697404043749887) , + rgb (0.30548675819945936, 0.09395276484082374, 0.4337284999936111) , + rgb (0.30842444457210105, 0.09625938534057774, 0.44047194882050544) , + rgb (0.31129434479712365, 0.0986847719340522, 0.4471931371516162) , + rgb (0.3140927841475553, 0.10123077676403242, 0.45388335612058467) , + rgb (0.316816480890235, 0.10389861387653518, 0.46053414662739794) , + rgb (0.31946262395497965, 0.1066887988239266, 0.46713728801395243) , + rgb (0.3220288227606932, 0.10960114111258401, 0.4736849472572688) , + rgb (0.32451307931207785, 0.11263459791730848, 0.48017007211645196) , + rgb (0.3269137124539796, 0.1157873496841953, 0.4865864649569746) , + rgb (0.3292300520323141, 0.11905764321981127, 0.49292595612342666) , + rgb (0.33146154891145124, 0.12244245263391232, 0.4991827458843107) , + rgb (0.33360804901486, 0.1259381830100592, 0.505351647966549) , + rgb (0.33566978565015315, 0.12954074251271822, 0.5114280721516895) , + rgb (0.3376473209067111, 0.13324562282438077, 0.5174080757397947) , + rgb (0.33954168752669694, 0.1370480189671817, 0.5232879753508524) , + rgb (0.34135411074506483, 0.1409427920655632, 0.5290650094033675) , + rgb (0.34308600291572294, 0.14492465359918028, 0.534737042820671) , + rgb (0.34473901574536375, 0.1489882058982641, 0.5403024592040654) , + rgb (0.3463150717579309, 0.15312802296627787, 0.5457599924248665) , + rgb (0.3478165323877778, 0.1573386351115298, 0.5511085345270326) , + rgb (0.34924513554955644, 0.16161477763045118, 0.5563483747416378) , + rgb (0.3506030444193101, 0.1659512998472086, 0.5614796470399323) , + rgb (0.3518924860887379, 0.17034320478524959, 0.5665028491121665) , + rgb (0.35311574421123737, 0.17478570377561287, 0.5714187152355529) , + rgb (0.3542753496066376, 0.17927413271618647, 0.5762280966066872) , + rgb (0.3553741530690672, 0.18380392577704466, 0.580931914318328) , + rgb (0.35641381143126327, 0.18837119869242164, 0.5855320765920552) , + rgb (0.35739663292915563, 0.1929720819784246, 0.5900301125106313) , + rgb (0.3583248996661781, 0.197602942459778, 0.5944276851750107) , + rgb (0.35920088560930186, 0.20226037920758122, 0.5987265295935138) , + rgb (0.36002681809096376, 0.20694122817889948, 0.6029284543191687) , + rgb (0.36080493826624654, 0.21164251793458128, 0.6070353217206471) , + rgb (0.36153829010998356, 0.21636111429594002, 0.6110488067964093) , + rgb (0.36222809558295926, 0.22109488427338303, 0.6149711234609613) , + rgb (0.3628764356004103, 0.2258414929328703, 0.6188041741082302) , + rgb (0.36348537610385145, 0.2305987621839642, 0.6225498862239288) , + rgb (0.3640569302208851, 0.23536470386204195, 0.6262101345195302) , + rgb (0.3645930889012501, 0.24013747024823828, 0.629786801550261) , + rgb (0.3650957984588681, 0.24491536803550484, 0.6332817352005559) , + rgb (0.3655669837353898, 0.24969683475296395, 0.6366967518748858) , + rgb (0.36600853966739794, 0.25448043878086224, 0.6400336180336859) , + rgb (0.3664224325155063, 0.25926481158628106, 0.6432940914076554) , + rgb (0.3668108554010799, 0.26404857724525643, 0.6464799165290824) , + rgb (0.36717513650699446, 0.26883085667326956, 0.6495927229789225) , + rgb (0.36751707094367697, 0.2736106331709098, 0.6526341171161864) , + rgb (0.3678384369653108, 0.2783869718129776, 0.655605668384537) , + rgb (0.3681410147989972, 0.2831590122118299, 0.6585088880697231) , + rgb (0.36842655638020444, 0.2879259643777846, 0.661345269109446) , + rgb (0.3686968223189527, 0.292687098561501, 0.6641162529823691) , + rgb (0.3689535530659678, 0.29744175492366276, 0.6668232208982426) , + rgb (0.36919847837592484, 0.3021893217650707, 0.6694675433161452) , + rgb (0.3694333459127623, 0.3069292355186234, 0.6720505284912062) , + rgb (0.36965987626565955, 0.3116609876295197, 0.6745734474341955) , + rgb (0.3698798032902536, 0.31638410101153364, 0.6770375543809057) , + rgb (0.37009487130772695, 0.3210981375964933, 0.6794440539905685) , + rgb (0.37030682071842685, 0.32580269697872455, 0.6817941168448668) , + rgb (0.37051738634484427, 0.3304974124430785, 0.6840888878885721) , + rgb (0.3707283327942267, 0.33518193808489577, 0.6863294816960677) , + rgb (0.3709415155133733, 0.33985591488818123, 0.6885170337950512) , + rgb (0.37115856636209105, 0.3445191141023017, 0.6906525358646499) , + rgb (0.37138124223736607, 0.34917126878479027, 0.6927370347192883) , + rgb (0.3716113323440048, 0.3538121372967869, 0.6947714991938089) , + rgb (0.3718506155898596, 0.3584414828587522, 0.6967569581025654) , + rgb (0.3721008970244382, 0.3630590973698238, 0.6986943461507372) , + rgb (0.37236397858465387, 0.36766477862108266, 0.7005846349652077) , + rgb (0.37264166757849604, 0.3722583500483685, 0.7024287314570723) , + rgb (0.3729357864666503, 0.3768396383521984, 0.7042275578058994) , + rgb (0.37324816143326384, 0.38140848555753937, 0.7059820097480604) , + rgb (0.3735806215098284, 0.3859647438605754, 0.7076929760731058) , + rgb (0.3739349933047578, 0.3905082752937583, 0.7093613429347845) , + rgb (0.3743131319931234, 0.3950389482828331, 0.7109879652237746) , + rgb (0.3747168601930223, 0.3995566498711684, 0.7125736851650046) , + rgb (0.37514802505380473, 0.4040612609993941, 0.7141193695725726) , + rgb (0.375608469194424, 0.40855267638072096, 0.7156258509158755) , + rgb (0.37610001286385814, 0.4130307995247706, 0.7170939691992023) , + rgb (0.37662448930806297, 0.41749553747893614, 0.7185245473617611) , + rgb (0.3771837184425123, 0.4219468022345483, 0.7199184152447577) , + rgb (0.3777794975351373, 0.4263845142616835, 0.7212763999353023) , + rgb (0.378413635091359, 0.43080859411413064, 0.7225993199306104) , + rgb (0.3790878928311076, 0.43521897612544935, 0.7238879869132313) , + rgb (0.3798040374484875, 0.4396155882122263, 0.7251432377876109) , + rgb (0.3805638069656562, 0.4439983720863372, 0.7263658704513531) , + rgb (0.3813688793045416, 0.4483672766927786, 0.7275567131714135) , + rgb (0.38222094988570376, 0.45272225034283325, 0.7287165614400378) , + rgb (0.3831216808440275, 0.457063235814072, 0.7298462679135326) , + rgb (0.38407269378943537, 0.46139018782416635, 0.7309466543290268) , + rgb (0.3850755679365139, 0.46570306719930193, 0.732018540336905) , + rgb (0.386131841788921, 0.4700018340988123, 0.7330627749243106) , + rgb (0.3872430145933025, 0.4742864593363539, 0.7340801678785439) , + rgb (0.3884105330084243, 0.47855691131792805, 0.7350715764115726) , + rgb (0.38963580160340855, 0.48281316715123496, 0.7360378254693274) , + rgb (0.390920175719949, 0.4870552025122304, 0.7369797713388125) , + rgb (0.39226494876209317, 0.4912830033289926, 0.7378982478447508) , + rgb (0.39367135736822567, 0.4954965577745118, 0.738794102296364) , + rgb (0.3951405880820763, 0.4996958532637776, 0.7396682021171571) , + rgb (0.3966737490566561, 0.5038808905384797, 0.7405213858051674) , + rgb (0.3982719152586337, 0.5080516653927614, 0.7413545091809972) , + rgb (0.39993606933454834, 0.5122081814321852, 0.7421684457131799) , + rgb (0.40166714010896104, 0.5163504496968876, 0.7429640345324835) , + rgb (0.40346600333905397, 0.5204784765384003, 0.7437421522356709) , + rgb (0.4053334378930318, 0.5245922817498312, 0.7445036583670813) , + rgb (0.4072701869421907, 0.5286918801105741, 0.7452494263758127) , + rgb (0.4092768899914751, 0.5327773017713032, 0.7459803063570782) , + rgb (0.4113541469730457, 0.5368485776500593, 0.7466971285506578) , + rgb (0.4135024574331473, 0.5409057477109848, 0.7474007329754309) , + rgb (0.4157223260454232, 0.544948827153504, 0.7480920445900052) , + rgb (0.4180141407923363, 0.5489778542188889, 0.7487719316700112) , + rgb (0.42037822361396326, 0.5529928715810817, 0.7494412559451894) , + rgb (0.4228148567577266, 0.5569939212699658, 0.7501008698822764) , + rgb (0.42532423665011354, 0.560981049599503, 0.7507516498900512) , + rgb (0.42790652284925834, 0.5649543060909209, 0.7513944352191484) , + rgb (0.4305617907305757, 0.5689137457245718, 0.752030080993127) , + rgb (0.43329008867358393, 0.5728594162560667, 0.7526594653256667) , + rgb (0.4360913895835637, 0.5767913799818608, 0.7532834105961016) , + rgb (0.43896563958048396, 0.5807096924109849, 0.7539027620828594) , + rgb (0.441912717666964, 0.5846144110017557, 0.7545183888441067) , + rgb (0.4449324685421538, 0.5885055998308617, 0.7551311041857901) , + rgb (0.4480247093358917, 0.5923833145214658, 0.7557417647410792) , + rgb (0.45118918687617743, 0.5962476205135354, 0.7563512064324664) , + rgb (0.45442563977552913, 0.6000985950385866, 0.7569601366060649) , + rgb (0.45773377230160567, 0.6039363004658646, 0.7575693690185916) , + rgb (0.4611132664702388, 0.607760777169989, 0.7581798643680714) , + rgb (0.4645637671630393, 0.6115720882286415, 0.7587924262302581) , + rgb (0.46808490970531597, 0.6153702869579029, 0.7594078989109274) , + rgb (0.4716762951887709, 0.6191554324288464, 0.7600270922788305) , + rgb (0.47533752394906287, 0.6229275728383581, 0.7606508557181775) , + rgb (0.47906816236197386, 0.6266867625186013, 0.7612800037566242) , + rgb (0.4828677867260272, 0.6304330455306234, 0.761915371498953) , + rgb (0.4867359599430568, 0.6341664625110051, 0.7625578008592404) , + rgb (0.4906722493856122, 0.6378870485884708, 0.7632081276316384) , + rgb (0.4946761847863938, 0.6415948411950443, 0.7638671900213091) , + rgb (0.4987473366135607, 0.6452898684900934, 0.7645357873418008) , + rgb (0.5028853540415561, 0.6489721673409526, 0.7652144671817491) , + rgb (0.5070896957645166, 0.6526417240314645, 0.7659044566083585) , + rgb (0.5113599254160193, 0.6562985398183186, 0.7666066378064533) , + rgb (0.5156955988596057, 0.65994260812898, 0.7673219148959617) , + rgb (0.5200962739223556, 0.6635739143403039, 0.768051194033441) , + rgb (0.5245615147059358, 0.6671924299614223, 0.7687954171423095) , + rgb (0.529090861832473, 0.6707981230280622, 0.7695555229231313) , + rgb (0.533683891477284, 0.6743909370521273, 0.7703325054879735) , + rgb (0.5383401557517628, 0.677970811290954, 0.7711273443905772) , + rgb (0.5430593242401823, 0.6815376725306588, 0.7719407969783508) , + rgb (0.5478409815301863, 0.6850914221850988, 0.7727738647344087) , + rgb (0.5526845058934713, 0.6886319451516638, 0.7736279426902245) , + rgb (0.5575894041960517, 0.6921591145825405, 0.7745041337932782) , + rgb (0.5625551535721934, 0.6956727838162965, 0.7754035914230984) , + rgb (0.5675811785386197, 0.6991727930264627, 0.776327485342753) , + rgb (0.5726668948158774, 0.7026589535425779, 0.7772770268091199) , + rgb (0.5778116438998202, 0.7061310615715398, 0.7782534512102552) , + rgb (0.5830148703693241, 0.7095888767699747, 0.7792578182047659) , + rgb (0.588275797805555, 0.7130321464645814, 0.7802914140563652) , + rgb (0.5935933569683722, 0.7164606049658685, 0.781355882376401) , + rgb (0.5989665814482068, 0.7198739489224673, 0.7824525989934664) , + rgb (0.6043943420027486, 0.7232718614323369, 0.7835829559353559) , + rgb (0.6098754317609306, 0.7266539875975829, 0.7847483573269471) , + rgb (0.6154084641177048, 0.7300199523273969, 0.7859502270675048) , + rgb (0.6209919306481755, 0.733369347989232, 0.7871899462469658) , + rgb (0.6266240202260459, 0.7367017540369944, 0.7884690131633456) , + rgb (0.6323027138710603, 0.740016721601314, 0.7897889276264043) , + rgb (0.6380258682854598, 0.7433137671403319, 0.7911510045957317) , + rgb (0.6437910831099849, 0.7465923800833657, 0.7925565320130605) , + rgb (0.6495957300425348, 0.7498520122194177, 0.7940067402149911) , + rgb (0.6554369232645472, 0.7530920875676843, 0.7955027112903105) , + rgb (0.6613112930078745, 0.7563120270871903, 0.7970456043491897) , + rgb (0.6672147980375281, 0.7595112803730375, 0.7986367465453776) , + rgb (0.6731442255942621, 0.7626890873389048, 0.8002762854580953) , + rgb (0.6790955449988215, 0.765844721313959, 0.8019646617300199) , + rgb (0.6850644615439593, 0.7689774029354699, 0.8037020626717691) , + rgb (0.691046410093091, 0.7720862946067809, 0.8054884169067907) , + rgb (0.6970365443886174, 0.7751705000806606, 0.8073233538006345) , + rgb (0.7030297722540817, 0.7782290497335813, 0.8092061884805697) , + rgb (0.709020781345393, 0.7812608871607091, 0.8111359185511793) , + rgb (0.7150040307625213, 0.7842648709158119, 0.8131111655994991) , + rgb (0.7209728066553678, 0.7872399592345264, 0.8151307392087926) , + rgb (0.726921775128297, 0.7901846863592763, 0.8171921746672638) , + rgb (0.7328454364552346, 0.7930974646884407, 0.8192926338423038) , + rgb (0.7387377170049494, 0.7959766573503101, 0.8214292278043301) , + rgb (0.7445924777189017, 0.7988204771958325, 0.8235986758615652) , + rgb (0.750403467654067, 0.8016269900896532, 0.8257973785108242) , + rgb (0.7561644358438198, 0.8043940873347794, 0.8280213899472) , + rgb (0.7618690793798029, 0.8071194938764749, 0.830266486168872) , + rgb (0.7675110850441786, 0.8098007598713145, 0.8325281663805967) , + rgb (0.7730841659017094, 0.8124352473546601, 0.8348017295057968) , + rgb (0.7785789200822759, 0.8150208937874255, 0.8370834463093898) , + rgb (0.7839910104276492, 0.8175542640053343, 0.8393674746403673) , + rgb (0.7893144556460892, 0.8200321318870201, 0.8416486380471222) , + rgb (0.7945430508923111, 0.8224511622630462, 0.8439218478682798) , + rgb (0.79967075421268, 0.8248078181208093, 0.8461821002957853) , + rgb (0.8046916442981458, 0.8270983878056066, 0.8484244929697402) , + rgb (0.8095999819094809, 0.8293189667350546, 0.8506444160105037) , + rgb (0.8143898212114309, 0.8314655869419785, 0.8528375906214702) , + rgb (0.8190465467793753, 0.8335364929949034, 0.855002062870101) , + rgb (0.8235742968025285, 0.8355248776479544, 0.8571319132851495) , + rgb (0.8279689431601354, 0.837426007513952, 0.8592239945130679) , + rgb (0.8322270571293441, 0.8392349062775448, 0.8612756350042788) , + rgb (0.8363403180919118, 0.8409479651895194, 0.8632852800107016) , + rgb (0.8403042080595778, 0.8425605950855084, 0.865250882410458) , + rgb (0.8441261828674842, 0.8440648271103739, 0.8671697332269007) , + rgb (0.8478071070257792, 0.8454546229209523, 0.8690403678369444) , + rgb (0.8513371457085719, 0.8467273579611647, 0.8708608165735044) , + rgb (0.8547259318925698, 0.8478748812467282, 0.8726282980930582) , + rgb (0.8579825924567037, 0.8488893481028184, 0.8743403855344628) , + rgb (0.8611024543689985, 0.8497675485700126, 0.8759924292343957) , + rgb (0.86408985081464, 0.8505039116750779, 0.8775792578489263) , + rgb (0.8669601550533358, 0.8510896085314068, 0.8790976697717334) , + rgb (0.8697047485350982, 0.8515240300479789, 0.8805388339000336) , + rgb (0.8723313408512408, 0.8518016547808089, 0.8818970435500162) , + rgb (0.8748534750857597, 0.8519152612302319, 0.8831692696761383) , + rgb (0.8772488085896548, 0.8518702833887027, 0.8843412038131143) , + rgb (0.8795410528270573, 0.8516567540749572, 0.8854143767924102) , + rgb (0.8817223105928579, 0.8512759407765347, 0.8863805692551482) , + rgb (0.8837852019553906, 0.8507294054031063, 0.8872322209694989) , + rgb (0.8857501584075443, 0.8500092494306783, 0.8879736506427196) , + rgb (0.8857115512284565, 0.8500218611585632, 0.8857253899008712) , + rgb (0.8855471481195238, 0.8498717428363158, 0.8833620612117095) , + rgb (0.8852589797263047, 0.8495589281098921, 0.8808841479402484) , + rgb (0.8848513815990857, 0.849084264228938, 0.8782823528537247) , + rgb (0.8843271305411354, 0.8484474157205542, 0.8755678522824297) , + rgb (0.8836912714589804, 0.8476489176151927, 0.8727414710144156) , + rgb (0.8829516859544853, 0.8466897027569927, 0.8697961704819097) , + rgb (0.8821154248940161, 0.8455700725455935, 0.8667376504623333) , + rgb (0.8811916987134195, 0.8442906671771735, 0.8635659516866988) , + rgb (0.8801929331569581, 0.8428522482477862, 0.8602739992715663) , + rgb (0.8791324424079277, 0.8412555488447591, 0.8568557229103964) , + rgb (0.8780229843664901, 0.8395016561854007, 0.8533064535245892) , + rgb (0.8768784845161469, 0.8375923807118654, 0.8496137354915025) , + rgb (0.875714587099614, 0.8355302318472394, 0.8457553751902708) , + rgb (0.8745379332026019, 0.8333197294864546, 0.8417192535806901) , + rgb (0.8733517136091627, 0.8309671525127262, 0.8374885100119709) , + rgb (0.8721533197845432, 0.8284805282370967, 0.8330486712880828) , + rgb (0.8709384671729751, 0.8258685788943851, 0.8283849726114961) , + rgb (0.8696913150261381, 0.8231415885956916, 0.8235047668317317) , + rgb (0.8683995469581863, 0.8203087551218152, 0.8184163896312899) , + rgb (0.867053149070485, 0.8173780404191124, 0.813134196269114) , + rgb (0.8656493432560532, 0.8143554406751491, 0.8076697232416455) , + rgb (0.8641834372394103, 0.8112464422465354, 0.8020461269686395) , + rgb (0.8626560105112757, 0.8080552380426153, 0.796282666437655) , + rgb (0.8610711702756552, 0.8047851790981223, 0.7903952966373629) , + rgb (0.8594346370300241, 0.8014392309950078, 0.7843978875138392) , + rgb (0.857756629435049, 0.7980196314271393, 0.778295716672475) , + rgb (0.856040223147254, 0.7945296360155061, 0.7721061003767414) , + rgb (0.8542921961147046, 0.7909719677709199, 0.765838014779141) , + rgb (0.8525190720770844, 0.7873493613354844, 0.7594994148789691) , + rgb (0.8507269702317879, 0.7836645734238389, 0.7530974636118285) , + rgb (0.8489224556311764, 0.7799202140765015, 0.7466371929366437) , + rgb (0.847111955079651, 0.7761188023604716, 0.7401227576280706) , + rgb (0.8452981073195511, 0.7722633860104472, 0.7335636824054149) , + rgb (0.843485292229337, 0.7683566039987018, 0.7269653699897204) , + rgb (0.8416775076684515, 0.7644010120098295, 0.7203329938728462) , + rgb (0.8398783988412087, 0.7603990719977968, 0.7136714781112923) , + rgb (0.8380912347613196, 0.7563531486080863, 0.7069856139021298) , + rgb (0.8363189884473793, 0.7522654895287526, 0.7002799902886496) , + rgb (0.8345656905566583, 0.7481379479992134, 0.6935569764986385) , + rgb (0.8328327718577798, 0.7439727181745988, 0.6868223587464855) , + rgb (0.8311216352909631, 0.7397718464763862, 0.6800812520363146) , + rgb (0.8294340781648147, 0.7355371221572935, 0.6733377200930191) , + rgb (0.8277716072353446, 0.7312702332407809, 0.6665957020468297) , + rgb (0.8261354971058026, 0.7269727551823826, 0.659859001562165) , + rgb (0.8245268129450285, 0.7226461431208888, 0.653131379154226) , + rgb (0.8229463511042843, 0.7182917733129006, 0.6464164243818421) , + rgb (0.8213947205565636, 0.7139109141951604, 0.6397176669767276) , + rgb (0.8198723065045529, 0.7095047497878748, 0.6330385704006711) , + rgb (0.8183793116449822, 0.705074381896351, 0.626382454789333) , + rgb (0.8169157577505589, 0.7006208301478398, 0.6197526063725792) , + rgb (0.8154814662727948, 0.6961450550830809, 0.6131522120932265) , + rgb (0.8140761104699334, 0.6916479479148213, 0.6065843782630862) , + rgb (0.8126992203988149, 0.6871303371461888, 0.600052148204351) , + rgb (0.8113501401176333, 0.6825930154624339, 0.5935584890905076) , + rgb (0.8100280946652069, 0.6780367267397182, 0.5871062690808275) , + rgb (0.8087321917008969, 0.6734621670219452, 0.5806983480557674) , + rgb (0.8074614045096935, 0.6688700095398864, 0.5743374637345958) , + rgb (0.8062146052692706, 0.6642608958528229, 0.5680262917864979) , + rgb (0.804990547908103, 0.6596354502756416, 0.5617674511054698) , + rgb (0.8037879253107763, 0.6549942654947263, 0.5555635086708381) , + rgb (0.8026053114611295, 0.6503379374810385, 0.5494169158460365) , + rgb (0.8014412429256005, 0.6456670345921877, 0.5433300863249918) , + rgb (0.8002941538975398, 0.6409821330674986, 0.5373053518514104) , + rgb (0.7991624518501963, 0.6362837937202919, 0.5313449594256143) , + rgb (0.7980444781513664, 0.6315725822508955, 0.5254510814483478) , + rgb (0.7969385471995161, 0.626849056792967, 0.5196258425240281) , + rgb (0.7958429237958377, 0.6221137880845115, 0.5138712409190979) , + rgb (0.7947558597265404, 0.617367344002207, 0.5081892121310299) , + rgb (0.7936755969866496, 0.6126102933407219, 0.5025816129126943) , + rgb (0.7926003430423745, 0.6078432208703702, 0.4970502062153201) , + rgb (0.7915283284347561, 0.603066705931472, 0.49159667021646397) , + rgb (0.7904577684772788, 0.5982813427706246, 0.48622257801969754) , + rgb (0.7893873776625194, 0.5934875421745599, 0.48092913815357724) , + rgb (0.7883151404562396, 0.5886860017356244, 0.4757179187907608) , + rgb (0.7872390410818835, 0.5838774374455721, 0.47059039582133383) , + rgb (0.7861573713233296, 0.5790624629815756, 0.465547782819184) , + rgb (0.7850684501960684, 0.5742417003617839, 0.46059116206904965) , + rgb (0.7839706083641448, 0.5694157832671042, 0.4557215474289206) , + rgb (0.7828622526444091, 0.5645853311116688, 0.45093985823706345) , + rgb (0.7817418047898184, 0.5597509805259486, 0.44624687186865436) , + rgb (0.7806077474948377, 0.5549133574489061, 0.4416433242636464) , + rgb (0.7794586273150664, 0.5500730841397727, 0.4371297985644476) , + rgb (0.7782934580763312, 0.545230594884266, 0.432706647838971) , + rgb (0.7771103295521099, 0.5403867491056124, 0.4283745037125848) , + rgb (0.775907907306857, 0.5355421788246119, 0.42413367909988375) , + rgb (0.774684947460632, 0.5306974938477673, 0.4199844035696376) , + rgb (0.7734402182988989, 0.5258533209345156, 0.41592679539764366) , + rgb (0.7721725722960555, 0.5210102658711383, 0.4119608998712287) , + rgb (0.7708809196230247, 0.516168926434691, 0.40808667584648967) , + rgb (0.7695642334401418, 0.5113298901696085, 0.4043039806968248) , + rgb (0.768221765997353, 0.5064936237128791, 0.40061257089416885) , + rgb (0.7668522895064389, 0.5016608471009063, 0.39701221751773474) , + rgb (0.7654549259333051, 0.4968321290972723, 0.3935025400011538) , + rgb (0.7640288560928866, 0.49200802533379656, 0.39008308392311997) , + rgb (0.7625733355405261, 0.48718906673415824, 0.38675335037837993) , + rgb (0.7610876378057071, 0.48237579130289127, 0.3835127572385229) , + rgb (0.7595711110534006, 0.4775687122205708, 0.380360657784311) , + rgb (0.7580232553845584, 0.4727682731566229, 0.3772963553109668) , + rgb (0.7564434157714071, 0.4679750143794846, 0.37431909037543515) , + rgb (0.7548310506695954, 0.46318942799460555, 0.3714280448394211) , + rgb (0.7531856636904657, 0.45841199172949604, 0.3686223664223477) , + rgb (0.7515068504589166, 0.45364314496866825, 0.36590112443835765) , + rgb (0.7497942054717047, 0.4488833348154881, 0.3632633755836028) , + rgb (0.7480473927555956, 0.44413297780351974, 0.36070813602540136) , + rgb (0.7462661578916344, 0.439392450449735, 0.3582343914230064) , + rgb (0.7444501867657067, 0.4346621718461711, 0.35584108091122535) , + rgb (0.7425992159973317, 0.42994254036133867, 0.3535270924537459) , + rgb (0.7407130161950609, 0.4252339389526239, 0.35129130890802607) , + rgb (0.7387914002459927, 0.4205367299231533, 0.34913260148542435) , + rgb (0.7368342217358587, 0.4158512585029011, 0.347049785207584) , + rgb (0.7348413359856494, 0.4111778700451951, 0.3450416947080907) , + rgb (0.7328127050626875, 0.4065168468778026, 0.3431071517341082) , + rgb (0.7307482075484517, 0.401868526884681, 0.3412449533046818) , + rgb (0.7286477385671655, 0.39723324476747235, 0.33945384341064017) , + rgb (0.7265112290022755, 0.3926113126792577, 0.3377325942005665) , + rgb (0.7243386564778159, 0.38800301593162145, 0.3360799596569183) , + rgb (0.7221299918421461, 0.3834086450896306, 0.33449469983585844) , + rgb (0.7198852149054985, 0.37882848839337313, 0.332975552002454) , + rgb (0.7176044490813385, 0.3742627271068619, 0.3315213862095893) , + rgb (0.7152876061484729, 0.3697117022522345, 0.3301308728723546) , + rgb (0.7129346683977347, 0.36517570519856757, 0.3288027427038317) , + rgb (0.7105456546582587, 0.36065500290840113, 0.3275357416278876) , + rgb (0.7081205956842048, 0.356149855233803, 0.32632861885644465) , + rgb (0.7056595112261009, 0.3516605297812094, 0.32518014084085567) , + rgb (0.7031624945881415, 0.34718723719598, 0.32408913679491225) , + rgb (0.700629624772421, 0.34273019305341756, 0.32305449047765694) , + rgb (0.6980608153581771, 0.3382897632604862, 0.3220747885521809) , + rgb (0.6954560834689112, 0.33386622163232865, 0.3211488430698579) , + rgb (0.6928154484676493, 0.32945984647042675, 0.3202754315314667) , + rgb (0.6901389321505248, 0.32507091815606004, 0.319453323328983) , + rgb (0.6874265643516962, 0.32069970535138104, 0.3186813762227769) , + rgb (0.6846785094249453, 0.3163463482122221, 0.31795870784057567) , + rgb (0.6818945715094452, 0.31201133280550686, 0.3172838048924495) , + rgb (0.6790747402815734, 0.30769497879760166, 0.31665545668946665) , + rgb (0.6762189792440975, 0.30339762792450425, 0.3160724937230589) , + rgb (0.6733272556481733, 0.29911962764489264, 0.3155337232398221) , + rgb (0.670399595476762, 0.29486126309253047, 0.3150381395687221) , + rgb (0.6674360376636913, 0.29062280081258873, 0.31458483752056837) , + rgb (0.6644363246987884, 0.2864048361425618, 0.31417223403606975) , + rgb (0.6614003753260178, 0.28220778870555907, 0.3137991292649849) , + rgb (0.6583280801134499, 0.2780321095766563, 0.3134643447952643) , + rgb (0.6552193260932713, 0.2738782665241015, 0.3131666792687211) , + rgb (0.652074172902773, 0.269746505252367, 0.3129056060581917) , + rgb (0.6488923016945825, 0.2656375533620908, 0.3126794181957019) , + rgb (0.6456734938264543, 0.2615520316161528, 0.31248673753935263) , + rgb (0.642417577481186, 0.257490519876798, 0.31232631707560987) , + rgb (0.6391243387840212, 0.2534536546198314, 0.3121968961206398) , + rgb (0.6357937104834237, 0.24944185818822678, 0.3120979395330059) , + rgb (0.6324253485421027, 0.24545598775548677, 0.3120276597462445) , + rgb (0.6290189201698587, 0.24149689191922535, 0.3119844719564572) , + rgb (0.6255741650043496, 0.23756535071152696, 0.3119669831491227) , + rgb (0.6220907982108261, 0.2336621873300741, 0.3119738327362739) , + rgb (0.6185686525887719, 0.2297879924917992, 0.3120046383872893) , + rgb (0.6150072323639137, 0.22594402043981826, 0.3120568068576574) , + rgb (0.6114062072731884, 0.22213124697023234, 0.3121288139643524) , + rgb (0.6077652399481865, 0.21835070166659282, 0.312219032918702) , + rgb (0.6040840169673274, 0.21460331490206347, 0.31232652641170694) , + rgb (0.6003621301041158, 0.21089030138947745, 0.3124493441041469) , + rgb (0.5965991810912237, 0.207212956082026, 0.3125852303112123) , + rgb (0.5927948053652026, 0.20357251410079796, 0.3127323483930494) , + rgb (0.5889486193554471, 0.19997020971775276, 0.31288922211590126) , + rgb (0.5850602439646688, 0.19640737049066315, 0.3130540116373273) , + rgb (0.5811293276158656, 0.19288548904692518, 0.3132239939418394) , + rgb (0.5771555081299204, 0.18940601489760422, 0.3133970433357208) , + rgb (0.5731384575410787, 0.18597036007065024, 0.3135712686852) , + rgb (0.5690778478401143, 0.18258004462335425, 0.3137444095679653) , + rgb (0.564973435290177, 0.17923664950367169, 0.3139136046337036) , + rgb (0.5608249903911717, 0.17594170887918095, 0.31407639883970623) , + rgb (0.5566322903496934, 0.17269677158182117, 0.31423043195101424) , + rgb (0.5523952157271191, 0.16950338809328983, 0.3143729155461537) , + rgb (0.5481137003346762, 0.1663630904279047, 0.3145010299091471) , + rgb (0.5437877131360856, 0.16327738551419116, 0.31461204226295625) , + rgb (0.5394173664919906, 0.16024769309971934, 0.31470295028655965) , + rgb (0.5350027976174474, 0.15727540775107324, 0.3147708520739653) , + rgb (0.5305442048985645, 0.15436183633886777, 0.3148129978918713) , + rgb (0.5260418962547748, 0.15150818660835483, 0.31482653406646727) , + rgb (0.5214965286322996, 0.14871544765633712, 0.3148076795453443) , + rgb (0.5169084880054446, 0.14598463068714407, 0.3147540759228004) , + rgb (0.5122783510532176, 0.14331656120063752, 0.3146630922831542) , + rgb (0.5076068118105369, 0.14071192654913128, 0.3145320012008257) , + rgb (0.5028952497497061, 0.13817086581280427, 0.3143566215383367) , + rgb (0.4981443546207415, 0.13569380302451714, 0.314135190862664) , + rgb (0.49335504375145617, 0.13328091630401023, 0.31386561956734976) , + rgb (0.48852847371852987, 0.13093210934893723, 0.31354553695453014) , + rgb (0.48366628618847957, 0.1286467902201389, 0.31317188565991266) , + rgb (0.47877034239726296, 0.12642401401409453, 0.3127417273582196) , + rgb (0.473841437035254, 0.12426354237989065, 0.31225470169927194) , + rgb (0.46888111384598413, 0.12216445576414045, 0.31170911458932665) , + rgb (0.46389102840284874, 0.12012561256850712, 0.31110343446582983) , + rgb (0.45887288947308297, 0.11814571137706886, 0.3104363697903881) , + rgb (0.4538300508699989, 0.11622183788331528, 0.3097044124984492) , + rgb (0.4487629917317482, 0.1143535557462255, 0.30890905921943196) , + rgb (0.44367358645071275, 0.11253912421257944, 0.3080497309546545) , + rgb (0.4385637818793154, 0.11077667828375456, 0.30712600062348083) , + rgb (0.4334355841041439, 0.1090642347484701, 0.3061376792828915) , + rgb (0.4282910131578975, 0.1073997763055258, 0.30508479060294547) , + rgb (0.42313214269556043, 0.10578120994917611, 0.3039675809469457) , + rgb (0.41796105205173684, 0.10420644885760968, 0.3027865203963184) , + rgb (0.41277985630360303, 0.1026734006932461, 0.3015422643746897) , + rgb (0.4075912039268871, 0.10117945586419633, 0.300235195077286) , + rgb (0.40239692379737496, 0.09972293031495055, 0.2988667436973397) , + rgb (0.39719876876325577, 0.09830232096827862, 0.2974385647628578) , + rgb (0.39199887556812907, 0.09691583650296684, 0.2959521200550908) , + rgb (0.3867993907954417, 0.09556181960083443, 0.29440901248173756) , + rgb (0.38160247377467543, 0.09423873126371218, 0.2928110750626949) , + rgb (0.3764103053221462, 0.09294519809377791, 0.2911602415731392) , + rgb (0.3712250843130934, 0.09167999748026273, 0.2894586539763317) , + rgb (0.36605031412464006, 0.0904406854276979, 0.2877077458811747) , + rgb (0.36088752387578377, 0.0892271943627452, 0.28591050458531014) , + rgb (0.35573889947341125, 0.08803897435024335, 0.2840695897279818) , + rgb (0.3506067824603248, 0.08687555176033529, 0.28218770540182386) , + rgb (0.345493557138718, 0.08573665496512634, 0.28026769921081435) , + rgb (0.34040164359597463, 0.08462223619170267, 0.27831254595259397) , + rgb (0.3353335322445545, 0.08353243411900396, 0.2763253435679004) , + rgb (0.3302917447118144, 0.08246763389003825, 0.27430929404579435) , + rgb (0.3252788886040126, 0.08142839007654609, 0.27226772884656186) , + rgb (0.3202998655799406, 0.08041299473755484, 0.2702032289303951) , + rgb (0.3153587000920581, 0.07942099731524319, 0.2681190407694196) , + rgb (0.31045520848595526, 0.07845687167618218, 0.2660200572779356) , + rgb (0.30559226007249934, 0.07752196310753731, 0.2639100669211966) , + rgb (0.3007727681291869, 0.07661782433616476, 0.2617929409781967) , + rgb (0.2960004726065818, 0.07574533600095842, 0.25967245030364566) , + rgb (0.29128515387578635, 0.0748990498474667, 0.25755101595750435) , + rgb (0.28662309235899847, 0.07408846082680887, 0.2554347867371703) , + rgb (0.2820174629736694, 0.07331569321404097, 0.25332800295084507) , + rgb (0.277471508091428, 0.07258296989925478, 0.2512349399594277) , + rgb (0.272997015188973, 0.07188355544616351, 0.2491584709323293) , + rgb (0.2685909594817286, 0.07122671627792246, 0.24710443563450618) , + rgb (0.2642551220706094, 0.07061659562299544, 0.24507758869355967) , + rgb (0.25999463887892144, 0.07005385560386188, 0.24308218808684579) , + rgb (0.2558213554748177, 0.06953231029187984, 0.24112190491594204) , + rgb (0.25172899728289466, 0.0690646308260355, 0.23920260612763083) , + rgb (0.247720929905011, 0.06865333790948652, 0.2373288009471749) , + rgb (0.2438114972024792, 0.06828985152901187, 0.23550427698321885) , + rgb (0.23999586188690308, 0.06798502996477995, 0.23373434258507808) , + rgb (0.23627495835774248, 0.06774359820987802, 0.23202360805926608) , + rgb (0.23266299920501882, 0.06755710438847978, 0.23037617493752832) , + rgb (0.2291562027859284, 0.06743473087115257, 0.22879681433956656) , + rgb (0.2257539681670791, 0.06738213230014747, 0.22728984778098055) , + rgb (0.22247308588973624, 0.06738821405309284, 0.22585960379408354) , + rgb (0.21930503925136402, 0.06746578636294004, 0.22451023616807558) , + rgb (0.21625279838647882, 0.06761633027051639, 0.22324568672294431) , + rgb (0.2133313859647627, 0.06783014842602667, 0.2220704321302429) , + rgb (0.21052882914958676, 0.06812195249816172, 0.22098759107715404) , + rgb (0.20785704662965598, 0.06848439879702528, 0.22000133917653536) , + rgb (0.20531725273301316, 0.06891959226639757, 0.21911516689288835) , + rgb (0.20290365333558247, 0.06943524858045896, 0.21833167885096033) , + rgb (0.20058760685133747, 0.07006457614998421, 0.21762721310371608) , + rgb (0.19819343656336558, 0.07097462525273879, 0.21690975060032436) , + rgb (0.19571853588267552, 0.07215778103960274, 0.21617499187076789) , + rgb (0.1931548636579131, 0.07360681904011795, 0.21542362939081539) , + rgb (0.19049578401722037, 0.07531127841678764, 0.2146562337112265) , + rgb (0.18774482037046955, 0.07725158846803931, 0.21387448578597812) , + rgb (0.18488035509396164, 0.07942573027972388, 0.21307651648984993) + }); list_data viridis = list_data(new pen[] { - rgb (0.267004, 0.004874, 0.329415) , - rgb (0.26851, 0.009605, 0.335427) , - rgb (0.269944, 0.014625, 0.341379) , - rgb (0.271305, 0.019942, 0.347269) , - rgb (0.272594, 0.025563, 0.353093) , - rgb (0.273809, 0.031497, 0.358853) , - rgb (0.274952, 0.037752, 0.364543) , - rgb (0.276022, 0.044167, 0.370164) , - rgb (0.277018, 0.050344, 0.375715) , - rgb (0.277941, 0.056324, 0.381191) , - rgb (0.278791, 0.062145, 0.386592) , - rgb (0.279566, 0.067836, 0.391917) , - rgb (0.280267, 0.073417, 0.397163) , - rgb (0.280894, 0.078907, 0.402329) , - rgb (0.281446, 0.08432, 0.407414) , - rgb (0.281924, 0.089666, 0.412415) , - rgb (0.282327, 0.094955, 0.417331) , - rgb (0.282656, 0.100196, 0.42216) , - rgb (0.28291, 0.105393, 0.426902) , - rgb (0.283091, 0.110553, 0.431554) , - rgb (0.283197, 0.11568, 0.436115) , - rgb (0.283229, 0.120777, 0.440584) , - rgb (0.283187, 0.125848, 0.44496) , - rgb (0.283072, 0.130895, 0.449241) , - rgb (0.282884, 0.13592, 0.453427) , - rgb (0.282623, 0.140926, 0.457517) , - rgb (0.28229, 0.145912, 0.46151) , - rgb (0.281887, 0.150881, 0.465405) , - rgb (0.281412, 0.155834, 0.469201) , - rgb (0.280868, 0.160771, 0.472899) , - rgb (0.280255, 0.165693, 0.476498) , - rgb (0.279574, 0.170599, 0.479997) , - rgb (0.278826, 0.17549, 0.483397) , - rgb (0.278012, 0.180367, 0.486697) , - rgb (0.277134, 0.185228, 0.489898) , - rgb (0.276194, 0.190074, 0.493001) , - rgb (0.275191, 0.194905, 0.496005) , - rgb (0.274128, 0.199721, 0.498911) , - rgb (0.273006, 0.20452, 0.501721) , - rgb (0.271828, 0.209303, 0.504434) , - rgb (0.270595, 0.214069, 0.507052) , - rgb (0.269308, 0.218818, 0.509577) , - rgb (0.267968, 0.223549, 0.512008) , - rgb (0.26658, 0.228262, 0.514349) , - rgb (0.265145, 0.232956, 0.516599) , - rgb (0.263663, 0.237631, 0.518762) , - rgb (0.262138, 0.242286, 0.520837) , - rgb (0.260571, 0.246922, 0.522828) , - rgb (0.258965, 0.251537, 0.524736) , - rgb (0.257322, 0.25613, 0.526563) , - rgb (0.255645, 0.260703, 0.528312) , - rgb (0.253935, 0.265254, 0.529983) , - rgb (0.252194, 0.269783, 0.531579) , - rgb (0.250425, 0.27429, 0.533103) , - rgb (0.248629, 0.278775, 0.534556) , - rgb (0.246811, 0.283237, 0.535941) , - rgb (0.244972, 0.287675, 0.53726) , - rgb (0.243113, 0.292092, 0.538516) , - rgb (0.241237, 0.296485, 0.539709) , - rgb (0.239346, 0.300855, 0.540844) , - rgb (0.237441, 0.305202, 0.541921) , - rgb (0.235526, 0.309527, 0.542944) , - rgb (0.233603, 0.313828, 0.543914) , - rgb (0.231674, 0.318106, 0.544834) , - rgb (0.229739, 0.322361, 0.545706) , - rgb (0.227802, 0.326594, 0.546532) , - rgb (0.225863, 0.330805, 0.547314) , - rgb (0.223925, 0.334994, 0.548053) , - rgb (0.221989, 0.339161, 0.548752) , - rgb (0.220057, 0.343307, 0.549413) , - rgb (0.21813, 0.347432, 0.550038) , - rgb (0.21621, 0.351535, 0.550627) , - rgb (0.214298, 0.355619, 0.551184) , - rgb (0.212395, 0.359683, 0.55171) , - rgb (0.210503, 0.363727, 0.552206) , - rgb (0.208623, 0.367752, 0.552675) , - rgb (0.206756, 0.371758, 0.553117) , - rgb (0.204903, 0.375746, 0.553533) , - rgb (0.203063, 0.379716, 0.553925) , - rgb (0.201239, 0.38367, 0.554294) , - rgb (0.19943, 0.387607, 0.554642) , - rgb (0.197636, 0.391528, 0.554969) , - rgb (0.19586, 0.395433, 0.555276) , - rgb (0.1941, 0.399323, 0.555565) , - rgb (0.192357, 0.403199, 0.555836) , - rgb (0.190631, 0.407061, 0.556089) , - rgb (0.188923, 0.41091, 0.556326) , - rgb (0.187231, 0.414746, 0.556547) , - rgb (0.185556, 0.41857, 0.556753) , - rgb (0.183898, 0.422383, 0.556944) , - rgb (0.182256, 0.426184, 0.55712) , - rgb (0.180629, 0.429975, 0.557282) , - rgb (0.179019, 0.433756, 0.55743) , - rgb (0.177423, 0.437527, 0.557565) , - rgb (0.175841, 0.44129, 0.557685) , - rgb (0.174274, 0.445044, 0.557792) , - rgb (0.172719, 0.448791, 0.557885) , - rgb (0.171176, 0.45253, 0.557965) , - rgb (0.169646, 0.456262, 0.55803) , - rgb (0.168126, 0.459988, 0.558082) , - rgb (0.166617, 0.463708, 0.558119) , - rgb (0.165117, 0.467423, 0.558141) , - rgb (0.163625, 0.471133, 0.558148) , - rgb (0.162142, 0.474838, 0.55814) , - rgb (0.160665, 0.47854, 0.558115) , - rgb (0.159194, 0.482237, 0.558073) , - rgb (0.157729, 0.485932, 0.558013) , - rgb (0.15627, 0.489624, 0.557936) , - rgb (0.154815, 0.493313, 0.55784) , - rgb (0.153364, 0.497, 0.557724) , - rgb (0.151918, 0.500685, 0.557587) , - rgb (0.150476, 0.504369, 0.55743) , - rgb (0.149039, 0.508051, 0.55725) , - rgb (0.147607, 0.511733, 0.557049) , - rgb (0.14618, 0.515413, 0.556823) , - rgb (0.144759, 0.519093, 0.556572) , - rgb (0.143343, 0.522773, 0.556295) , - rgb (0.141935, 0.526453, 0.555991) , - rgb (0.140536, 0.530132, 0.555659) , - rgb (0.139147, 0.533812, 0.555298) , - rgb (0.13777, 0.537492, 0.554906) , - rgb (0.136408, 0.541173, 0.554483) , - rgb (0.135066, 0.544853, 0.554029) , - rgb (0.133743, 0.548535, 0.553541) , - rgb (0.132444, 0.552216, 0.553018) , - rgb (0.131172, 0.555899, 0.552459) , - rgb (0.129933, 0.559582, 0.551864) , - rgb (0.128729, 0.563265, 0.551229) , - rgb (0.127568, 0.566949, 0.550556) , - rgb (0.126453, 0.570633, 0.549841) , - rgb (0.125394, 0.574318, 0.549086) , - rgb (0.124395, 0.578002, 0.548287) , - rgb (0.123463, 0.581687, 0.547445) , - rgb (0.122606, 0.585371, 0.546557) , - rgb (0.121831, 0.589055, 0.545623) , - rgb (0.121148, 0.592739, 0.544641) , - rgb (0.120565, 0.596422, 0.543611) , - rgb (0.120092, 0.600104, 0.54253) , - rgb (0.119738, 0.603785, 0.5414) , - rgb (0.119512, 0.607464, 0.540218) , - rgb (0.119423, 0.611141, 0.538982) , - rgb (0.119483, 0.614817, 0.537692) , - rgb (0.119699, 0.61849, 0.536347) , - rgb (0.120081, 0.622161, 0.534946) , - rgb (0.120638, 0.625828, 0.533488) , - rgb (0.12138, 0.629492, 0.531973) , - rgb (0.122312, 0.633153, 0.530398) , - rgb (0.123444, 0.636809, 0.528763) , - rgb (0.12478, 0.640461, 0.527068) , - rgb (0.126326, 0.644107, 0.525311) , - rgb (0.128087, 0.647749, 0.523491) , - rgb (0.130067, 0.651384, 0.521608) , - rgb (0.132268, 0.655014, 0.519661) , - rgb (0.134692, 0.658636, 0.517649) , - rgb (0.137339, 0.662252, 0.515571) , - rgb (0.14021, 0.665859, 0.513427) , - rgb (0.143303, 0.669459, 0.511215) , - rgb (0.146616, 0.67305, 0.508936) , - rgb (0.150148, 0.676631, 0.506589) , - rgb (0.153894, 0.680203, 0.504172) , - rgb (0.157851, 0.683765, 0.501686) , - rgb (0.162016, 0.687316, 0.499129) , - rgb (0.166383, 0.690856, 0.496502) , - rgb (0.170948, 0.694384, 0.493803) , - rgb (0.175707, 0.6979, 0.491033) , - rgb (0.180653, 0.701402, 0.488189) , - rgb (0.185783, 0.704891, 0.485273) , - rgb (0.19109, 0.708366, 0.482284) , - rgb (0.196571, 0.711827, 0.479221) , - rgb (0.202219, 0.715272, 0.476084) , - rgb (0.20803, 0.718701, 0.472873) , - rgb (0.214, 0.722114, 0.469588) , - rgb (0.220124, 0.725509, 0.466226) , - rgb (0.226397, 0.728888, 0.462789) , - rgb (0.232815, 0.732247, 0.459277) , - rgb (0.239374, 0.735588, 0.455688) , - rgb (0.24607, 0.73891, 0.452024) , - rgb (0.252899, 0.742211, 0.448284) , - rgb (0.259857, 0.745492, 0.444467) , - rgb (0.266941, 0.748751, 0.440573) , - rgb (0.274149, 0.751988, 0.436601) , - rgb (0.281477, 0.755203, 0.432552) , - rgb (0.288921, 0.758394, 0.428426) , - rgb (0.296479, 0.761561, 0.424223) , - rgb (0.304148, 0.764704, 0.419943) , - rgb (0.311925, 0.767822, 0.415586) , - rgb (0.319809, 0.770914, 0.411152) , - rgb (0.327796, 0.77398, 0.40664) , - rgb (0.335885, 0.777018, 0.402049) , - rgb (0.344074, 0.780029, 0.397381) , - rgb (0.35236, 0.783011, 0.392636) , - rgb (0.360741, 0.785964, 0.387814) , - rgb (0.369214, 0.788888, 0.382914) , - rgb (0.377779, 0.791781, 0.377939) , - rgb (0.386433, 0.794644, 0.372886) , - rgb (0.395174, 0.797475, 0.367757) , - rgb (0.404001, 0.800275, 0.362552) , - rgb (0.412913, 0.803041, 0.357269) , - rgb (0.421908, 0.805774, 0.35191) , - rgb (0.430983, 0.808473, 0.346476) , - rgb (0.440137, 0.811138, 0.340967) , - rgb (0.449368, 0.813768, 0.335384) , - rgb (0.458674, 0.816363, 0.329727) , - rgb (0.468053, 0.818921, 0.323998) , - rgb (0.477504, 0.821444, 0.318195) , - rgb (0.487026, 0.823929, 0.312321) , - rgb (0.496615, 0.826376, 0.306377) , - rgb (0.506271, 0.828786, 0.300362) , - rgb (0.515992, 0.831158, 0.294279) , - rgb (0.525776, 0.833491, 0.288127) , - rgb (0.535621, 0.835785, 0.281908) , - rgb (0.545524, 0.838039, 0.275626) , - rgb (0.555484, 0.840254, 0.269281) , - rgb (0.565498, 0.84243, 0.262877) , - rgb (0.575563, 0.844566, 0.256415) , - rgb (0.585678, 0.846661, 0.249897) , - rgb (0.595839, 0.848717, 0.243329) , - rgb (0.606045, 0.850733, 0.236712) , - rgb (0.616293, 0.852709, 0.230052) , - rgb (0.626579, 0.854645, 0.223353) , - rgb (0.636902, 0.856542, 0.21662) , - rgb (0.647257, 0.8584, 0.209861) , - rgb (0.657642, 0.860219, 0.203082) , - rgb (0.668054, 0.861999, 0.196293) , - rgb (0.678489, 0.863742, 0.189503) , - rgb (0.688944, 0.865448, 0.182725) , - rgb (0.699415, 0.867117, 0.175971) , - rgb (0.709898, 0.868751, 0.169257) , - rgb (0.720391, 0.87035, 0.162603) , - rgb (0.730889, 0.871916, 0.156029) , - rgb (0.741388, 0.873449, 0.149561) , - rgb (0.751884, 0.874951, 0.143228) , - rgb (0.762373, 0.876424, 0.137064) , - rgb (0.772852, 0.877868, 0.131109) , - rgb (0.783315, 0.879285, 0.125405) , - rgb (0.79376, 0.880678, 0.120005) , - rgb (0.804182, 0.882046, 0.114965) , - rgb (0.814576, 0.883393, 0.110347) , - rgb (0.82494, 0.88472, 0.106217) , - rgb (0.83527, 0.886029, 0.102646) , - rgb (0.845561, 0.887322, 0.099702) , - rgb (0.85581, 0.888601, 0.097452) , - rgb (0.866013, 0.889868, 0.095953) , - rgb (0.876168, 0.891125, 0.09525) , - rgb (0.886271, 0.892374, 0.095374) , - rgb (0.89632, 0.893616, 0.096335) , - rgb (0.906311, 0.894855, 0.098125) , - rgb (0.916242, 0.896091, 0.100717) , - rgb (0.926106, 0.89733, 0.104071) , - rgb (0.935904, 0.89857, 0.108131) , - rgb (0.945636, 0.899815, 0.112838) , - rgb (0.9553, 0.901065, 0.118128) , - rgb (0.964894, 0.902323, 0.123941) , - rgb (0.974417, 0.90359, 0.130215) , - rgb (0.983868, 0.904867, 0.136897) , - rgb (0.993248, 0.906157, 0.143936) -}); + rgb (0.267004, 0.004874, 0.329415) , + rgb (0.26851, 0.009605, 0.335427) , + rgb (0.269944, 0.014625, 0.341379) , + rgb (0.271305, 0.019942, 0.347269) , + rgb (0.272594, 0.025563, 0.353093) , + rgb (0.273809, 0.031497, 0.358853) , + rgb (0.274952, 0.037752, 0.364543) , + rgb (0.276022, 0.044167, 0.370164) , + rgb (0.277018, 0.050344, 0.375715) , + rgb (0.277941, 0.056324, 0.381191) , + rgb (0.278791, 0.062145, 0.386592) , + rgb (0.279566, 0.067836, 0.391917) , + rgb (0.280267, 0.073417, 0.397163) , + rgb (0.280894, 0.078907, 0.402329) , + rgb (0.281446, 0.08432, 0.407414) , + rgb (0.281924, 0.089666, 0.412415) , + rgb (0.282327, 0.094955, 0.417331) , + rgb (0.282656, 0.100196, 0.42216) , + rgb (0.28291, 0.105393, 0.426902) , + rgb (0.283091, 0.110553, 0.431554) , + rgb (0.283197, 0.11568, 0.436115) , + rgb (0.283229, 0.120777, 0.440584) , + rgb (0.283187, 0.125848, 0.44496) , + rgb (0.283072, 0.130895, 0.449241) , + rgb (0.282884, 0.13592, 0.453427) , + rgb (0.282623, 0.140926, 0.457517) , + rgb (0.28229, 0.145912, 0.46151) , + rgb (0.281887, 0.150881, 0.465405) , + rgb (0.281412, 0.155834, 0.469201) , + rgb (0.280868, 0.160771, 0.472899) , + rgb (0.280255, 0.165693, 0.476498) , + rgb (0.279574, 0.170599, 0.479997) , + rgb (0.278826, 0.17549, 0.483397) , + rgb (0.278012, 0.180367, 0.486697) , + rgb (0.277134, 0.185228, 0.489898) , + rgb (0.276194, 0.190074, 0.493001) , + rgb (0.275191, 0.194905, 0.496005) , + rgb (0.274128, 0.199721, 0.498911) , + rgb (0.273006, 0.20452, 0.501721) , + rgb (0.271828, 0.209303, 0.504434) , + rgb (0.270595, 0.214069, 0.507052) , + rgb (0.269308, 0.218818, 0.509577) , + rgb (0.267968, 0.223549, 0.512008) , + rgb (0.26658, 0.228262, 0.514349) , + rgb (0.265145, 0.232956, 0.516599) , + rgb (0.263663, 0.237631, 0.518762) , + rgb (0.262138, 0.242286, 0.520837) , + rgb (0.260571, 0.246922, 0.522828) , + rgb (0.258965, 0.251537, 0.524736) , + rgb (0.257322, 0.25613, 0.526563) , + rgb (0.255645, 0.260703, 0.528312) , + rgb (0.253935, 0.265254, 0.529983) , + rgb (0.252194, 0.269783, 0.531579) , + rgb (0.250425, 0.27429, 0.533103) , + rgb (0.248629, 0.278775, 0.534556) , + rgb (0.246811, 0.283237, 0.535941) , + rgb (0.244972, 0.287675, 0.53726) , + rgb (0.243113, 0.292092, 0.538516) , + rgb (0.241237, 0.296485, 0.539709) , + rgb (0.239346, 0.300855, 0.540844) , + rgb (0.237441, 0.305202, 0.541921) , + rgb (0.235526, 0.309527, 0.542944) , + rgb (0.233603, 0.313828, 0.543914) , + rgb (0.231674, 0.318106, 0.544834) , + rgb (0.229739, 0.322361, 0.545706) , + rgb (0.227802, 0.326594, 0.546532) , + rgb (0.225863, 0.330805, 0.547314) , + rgb (0.223925, 0.334994, 0.548053) , + rgb (0.221989, 0.339161, 0.548752) , + rgb (0.220057, 0.343307, 0.549413) , + rgb (0.21813, 0.347432, 0.550038) , + rgb (0.21621, 0.351535, 0.550627) , + rgb (0.214298, 0.355619, 0.551184) , + rgb (0.212395, 0.359683, 0.55171) , + rgb (0.210503, 0.363727, 0.552206) , + rgb (0.208623, 0.367752, 0.552675) , + rgb (0.206756, 0.371758, 0.553117) , + rgb (0.204903, 0.375746, 0.553533) , + rgb (0.203063, 0.379716, 0.553925) , + rgb (0.201239, 0.38367, 0.554294) , + rgb (0.19943, 0.387607, 0.554642) , + rgb (0.197636, 0.391528, 0.554969) , + rgb (0.19586, 0.395433, 0.555276) , + rgb (0.1941, 0.399323, 0.555565) , + rgb (0.192357, 0.403199, 0.555836) , + rgb (0.190631, 0.407061, 0.556089) , + rgb (0.188923, 0.41091, 0.556326) , + rgb (0.187231, 0.414746, 0.556547) , + rgb (0.185556, 0.41857, 0.556753) , + rgb (0.183898, 0.422383, 0.556944) , + rgb (0.182256, 0.426184, 0.55712) , + rgb (0.180629, 0.429975, 0.557282) , + rgb (0.179019, 0.433756, 0.55743) , + rgb (0.177423, 0.437527, 0.557565) , + rgb (0.175841, 0.44129, 0.557685) , + rgb (0.174274, 0.445044, 0.557792) , + rgb (0.172719, 0.448791, 0.557885) , + rgb (0.171176, 0.45253, 0.557965) , + rgb (0.169646, 0.456262, 0.55803) , + rgb (0.168126, 0.459988, 0.558082) , + rgb (0.166617, 0.463708, 0.558119) , + rgb (0.165117, 0.467423, 0.558141) , + rgb (0.163625, 0.471133, 0.558148) , + rgb (0.162142, 0.474838, 0.55814) , + rgb (0.160665, 0.47854, 0.558115) , + rgb (0.159194, 0.482237, 0.558073) , + rgb (0.157729, 0.485932, 0.558013) , + rgb (0.15627, 0.489624, 0.557936) , + rgb (0.154815, 0.493313, 0.55784) , + rgb (0.153364, 0.497, 0.557724) , + rgb (0.151918, 0.500685, 0.557587) , + rgb (0.150476, 0.504369, 0.55743) , + rgb (0.149039, 0.508051, 0.55725) , + rgb (0.147607, 0.511733, 0.557049) , + rgb (0.14618, 0.515413, 0.556823) , + rgb (0.144759, 0.519093, 0.556572) , + rgb (0.143343, 0.522773, 0.556295) , + rgb (0.141935, 0.526453, 0.555991) , + rgb (0.140536, 0.530132, 0.555659) , + rgb (0.139147, 0.533812, 0.555298) , + rgb (0.13777, 0.537492, 0.554906) , + rgb (0.136408, 0.541173, 0.554483) , + rgb (0.135066, 0.544853, 0.554029) , + rgb (0.133743, 0.548535, 0.553541) , + rgb (0.132444, 0.552216, 0.553018) , + rgb (0.131172, 0.555899, 0.552459) , + rgb (0.129933, 0.559582, 0.551864) , + rgb (0.128729, 0.563265, 0.551229) , + rgb (0.127568, 0.566949, 0.550556) , + rgb (0.126453, 0.570633, 0.549841) , + rgb (0.125394, 0.574318, 0.549086) , + rgb (0.124395, 0.578002, 0.548287) , + rgb (0.123463, 0.581687, 0.547445) , + rgb (0.122606, 0.585371, 0.546557) , + rgb (0.121831, 0.589055, 0.545623) , + rgb (0.121148, 0.592739, 0.544641) , + rgb (0.120565, 0.596422, 0.543611) , + rgb (0.120092, 0.600104, 0.54253) , + rgb (0.119738, 0.603785, 0.5414) , + rgb (0.119512, 0.607464, 0.540218) , + rgb (0.119423, 0.611141, 0.538982) , + rgb (0.119483, 0.614817, 0.537692) , + rgb (0.119699, 0.61849, 0.536347) , + rgb (0.120081, 0.622161, 0.534946) , + rgb (0.120638, 0.625828, 0.533488) , + rgb (0.12138, 0.629492, 0.531973) , + rgb (0.122312, 0.633153, 0.530398) , + rgb (0.123444, 0.636809, 0.528763) , + rgb (0.12478, 0.640461, 0.527068) , + rgb (0.126326, 0.644107, 0.525311) , + rgb (0.128087, 0.647749, 0.523491) , + rgb (0.130067, 0.651384, 0.521608) , + rgb (0.132268, 0.655014, 0.519661) , + rgb (0.134692, 0.658636, 0.517649) , + rgb (0.137339, 0.662252, 0.515571) , + rgb (0.14021, 0.665859, 0.513427) , + rgb (0.143303, 0.669459, 0.511215) , + rgb (0.146616, 0.67305, 0.508936) , + rgb (0.150148, 0.676631, 0.506589) , + rgb (0.153894, 0.680203, 0.504172) , + rgb (0.157851, 0.683765, 0.501686) , + rgb (0.162016, 0.687316, 0.499129) , + rgb (0.166383, 0.690856, 0.496502) , + rgb (0.170948, 0.694384, 0.493803) , + rgb (0.175707, 0.6979, 0.491033) , + rgb (0.180653, 0.701402, 0.488189) , + rgb (0.185783, 0.704891, 0.485273) , + rgb (0.19109, 0.708366, 0.482284) , + rgb (0.196571, 0.711827, 0.479221) , + rgb (0.202219, 0.715272, 0.476084) , + rgb (0.20803, 0.718701, 0.472873) , + rgb (0.214, 0.722114, 0.469588) , + rgb (0.220124, 0.725509, 0.466226) , + rgb (0.226397, 0.728888, 0.462789) , + rgb (0.232815, 0.732247, 0.459277) , + rgb (0.239374, 0.735588, 0.455688) , + rgb (0.24607, 0.73891, 0.452024) , + rgb (0.252899, 0.742211, 0.448284) , + rgb (0.259857, 0.745492, 0.444467) , + rgb (0.266941, 0.748751, 0.440573) , + rgb (0.274149, 0.751988, 0.436601) , + rgb (0.281477, 0.755203, 0.432552) , + rgb (0.288921, 0.758394, 0.428426) , + rgb (0.296479, 0.761561, 0.424223) , + rgb (0.304148, 0.764704, 0.419943) , + rgb (0.311925, 0.767822, 0.415586) , + rgb (0.319809, 0.770914, 0.411152) , + rgb (0.327796, 0.77398, 0.40664) , + rgb (0.335885, 0.777018, 0.402049) , + rgb (0.344074, 0.780029, 0.397381) , + rgb (0.35236, 0.783011, 0.392636) , + rgb (0.360741, 0.785964, 0.387814) , + rgb (0.369214, 0.788888, 0.382914) , + rgb (0.377779, 0.791781, 0.377939) , + rgb (0.386433, 0.794644, 0.372886) , + rgb (0.395174, 0.797475, 0.367757) , + rgb (0.404001, 0.800275, 0.362552) , + rgb (0.412913, 0.803041, 0.357269) , + rgb (0.421908, 0.805774, 0.35191) , + rgb (0.430983, 0.808473, 0.346476) , + rgb (0.440137, 0.811138, 0.340967) , + rgb (0.449368, 0.813768, 0.335384) , + rgb (0.458674, 0.816363, 0.329727) , + rgb (0.468053, 0.818921, 0.323998) , + rgb (0.477504, 0.821444, 0.318195) , + rgb (0.487026, 0.823929, 0.312321) , + rgb (0.496615, 0.826376, 0.306377) , + rgb (0.506271, 0.828786, 0.300362) , + rgb (0.515992, 0.831158, 0.294279) , + rgb (0.525776, 0.833491, 0.288127) , + rgb (0.535621, 0.835785, 0.281908) , + rgb (0.545524, 0.838039, 0.275626) , + rgb (0.555484, 0.840254, 0.269281) , + rgb (0.565498, 0.84243, 0.262877) , + rgb (0.575563, 0.844566, 0.256415) , + rgb (0.585678, 0.846661, 0.249897) , + rgb (0.595839, 0.848717, 0.243329) , + rgb (0.606045, 0.850733, 0.236712) , + rgb (0.616293, 0.852709, 0.230052) , + rgb (0.626579, 0.854645, 0.223353) , + rgb (0.636902, 0.856542, 0.21662) , + rgb (0.647257, 0.8584, 0.209861) , + rgb (0.657642, 0.860219, 0.203082) , + rgb (0.668054, 0.861999, 0.196293) , + rgb (0.678489, 0.863742, 0.189503) , + rgb (0.688944, 0.865448, 0.182725) , + rgb (0.699415, 0.867117, 0.175971) , + rgb (0.709898, 0.868751, 0.169257) , + rgb (0.720391, 0.87035, 0.162603) , + rgb (0.730889, 0.871916, 0.156029) , + rgb (0.741388, 0.873449, 0.149561) , + rgb (0.751884, 0.874951, 0.143228) , + rgb (0.762373, 0.876424, 0.137064) , + rgb (0.772852, 0.877868, 0.131109) , + rgb (0.783315, 0.879285, 0.125405) , + rgb (0.79376, 0.880678, 0.120005) , + rgb (0.804182, 0.882046, 0.114965) , + rgb (0.814576, 0.883393, 0.110347) , + rgb (0.82494, 0.88472, 0.106217) , + rgb (0.83527, 0.886029, 0.102646) , + rgb (0.845561, 0.887322, 0.099702) , + rgb (0.85581, 0.888601, 0.097452) , + rgb (0.866013, 0.889868, 0.095953) , + rgb (0.876168, 0.891125, 0.09525) , + rgb (0.886271, 0.892374, 0.095374) , + rgb (0.89632, 0.893616, 0.096335) , + rgb (0.906311, 0.894855, 0.098125) , + rgb (0.916242, 0.896091, 0.100717) , + rgb (0.926106, 0.89733, 0.104071) , + rgb (0.935904, 0.89857, 0.108131) , + rgb (0.945636, 0.899815, 0.112838) , + rgb (0.9553, 0.901065, 0.118128) , + rgb (0.964894, 0.902323, 0.123941) , + rgb (0.974417, 0.90359, 0.130215) , + rgb (0.983868, 0.904867, 0.136897) , + rgb (0.993248, 0.906157, 0.143936) + }); diff --git a/Build/source/utils/asymptote/base/contour.asy b/Build/source/utils/asymptote/base/contour.asy index fbb4cd1c71a..f2ee0e78fec 100644 --- a/Build/source/utils/asymptote/base/contour.asy +++ b/Build/source/utils/asymptote/base/contour.asy @@ -1,10 +1,10 @@ // Contour routines written by Radoslav Marinov and John Bowman. - + import graph_settings; real eps=10000*realEpsilon; -// 1 +// 1 // 6 +-------------------+ 5 // | \ / | // | \ / | @@ -16,7 +16,7 @@ real eps=10000*realEpsilon; // | / \ | // | / \ | // 7 +-------------------+ 4 or 8 -// 3 +// 3 private struct segment { @@ -76,11 +76,11 @@ private segment case3(pair p0, pair p1, pair p2, private segment checktriangle(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge=-1) { - // default null return + // default null return static segment dflt; real eps=eps*max(abs(v0),abs(v1),abs(v2)); - + if(v0 < -eps) { if(v1 < -eps) { if(v2 < -eps) return dflt; // nothing to do @@ -92,10 +92,10 @@ private segment checktriangle(pair p0, pair p1, pair p2, else return case2(p1,p0,p2,v1,v0,v2,5+edge); } else { if(v2 < -eps) return case3(p0,p1,p2,v0,v1,v2,edge); - else if(v2 <= eps) + else if(v2 <= eps) return case2(p2,p0,p1,v2,v0,v1,edge); else return case3(p1,p0,p2,v1,v0,v2,edge); - } + } } else if(v0 <= eps) { if(v1 < -eps) { if(v2 < -eps) return dflt; // nothing to do @@ -109,7 +109,7 @@ private segment checktriangle(pair p0, pair p1, pair p2, if(v2 < -eps) return case2(p0,p1,p2,v0,v1,v2,4+edge); else if(v2 <= eps) return case1(p0,p2,4+edge); else return dflt; // nothing to do - } + } } else { if(v1 < -eps) { if(v2 < -eps) return case3(p1,p0,p2,v1,v0,v2,edge); @@ -124,8 +124,8 @@ private segment checktriangle(pair p0, pair p1, pair p2, if(v2 < -eps) return case3(p0,p2,p1,v0,v2,v1); else if(v2 <= eps) return dflt; // nothing to do else return dflt; // nothing to do - } - } + } + } } // Collect connecting path segments. @@ -135,7 +135,7 @@ private void collect(pair[][][] points, real[] c) int[] reverseF(int n) {return sequence(new int(int x){return n-1-x;},n-1);} // use to reverse an array, omitting the last point int[] reverseL(int n) {return sequence(new int(int x){return n-2-x;},n-1);} - + for(int cnt=0; cnt < c.length; ++cnt) { pair[][] gdscnt=points[cnt]; for(int i=0; i < gdscnt.length; ++i) { @@ -144,11 +144,11 @@ private void collect(pair[][][] points, real[] c) for(int j=i+1; j < gdscnt.length; ++j) { pair[] gjg=gdscnt[j]; int Lj=gjg.length; - if(abs(gig[0]-gjg[0]) < eps) { + if(abs(gig[0]-gjg[0]) < eps) { gdscnt[j]=gjg[reverseF(Lj)]; gdscnt[j].append(gig); - gdscnt.delete(i); - --i; + gdscnt.delete(i); + --i; break; } else if(abs(gig[0]-gjg[Lj-1]) < eps) { gig.delete(0); @@ -169,7 +169,7 @@ private void collect(pair[][][] points, real[] c) gdscnt.delete(i); --i; break; - } + } } } } @@ -224,7 +224,7 @@ guide[][] contour(pair[][] z, real[][] f, c=sort(c); bool midpoints=midpoint.length > 0; - + segment segments[][][]=new segment[nx][ny][]; // go over region a rectangle at a time @@ -238,7 +238,7 @@ guide[][] contour(pair[][] z, real[][] f, segment[][] segmentsi=segments[i]; for(int j=0; j < ny; ++j) { segment[] segmentsij=segmentsi[j]; - + // define points pair bleft=zi[j]; pair bright=zp[j]; @@ -264,26 +264,26 @@ guide[][] contour(pair[][] z, real[][] f, int countm=0; int countz=0; int countp=0; - + void check(real vertdat) { if(vertdat < -eps) ++countm; else { - if(vertdat <= eps) ++countz; + if(vertdat <= eps) ++countz; else ++countp; } } - + check(vertdat0); check(vertdat1); check(vertdat2); check(vertdat3); - if(countm == 4) return 1; // nothing to do - if(countp == 4) return -1; // nothing to do + if(countm == 4) return 1; // nothing to do + if(countp == 4) return -1; // nothing to do if((countm == 3 || countp == 3) && countz == 1) return 0; // go through the triangles - + void addseg(segment seg) { if(seg.active) { seg.c=cnt; @@ -301,7 +301,7 @@ guide[][] contour(pair[][] z, real[][] f, vertdat0,vertdat1,vertdat4,3)); return 0; } - + void process(int l, int u) { if(l >= u) return; int i=quotient(l+u,2); @@ -313,7 +313,7 @@ guide[][] contour(pair[][] z, real[][] f, process(i+1,u); } } - + process(0,c.length); } } @@ -356,7 +356,7 @@ guide[][] contour(pair[][] z, real[][] f, } return -1; } - + int backward(int I, int J, bool first=true) { if(I >= 0 && I < nx && J >= 0 && J < ny) { segment[] segmentsIJ=segments[I][J]; @@ -380,7 +380,7 @@ guide[][] contour(pair[][] z, real[][] f, } return -1; } - + void follow(int f(int, int, bool first=true), int edge) { int I=i; int J=j; @@ -489,7 +489,7 @@ guide[][] contour(real f(real, real), pair a, pair b, // evaluate function at points and midpoints real[][] dat=new real[nx+1][ny+1]; real[][] midpoint=new real[nx+1][ny+1]; - + for(int i=0; i <= nx; ++i) { real x=interp(a.x,b.x,i/nx); real x2=interp(a.x,b.x,(i+0.5)/nx); @@ -503,7 +503,7 @@ guide[][] contour(real f(real, real), pair a, pair b, return contour(dat,midpoint,a,b,c,join); } - + void draw(picture pic=currentpicture, Label[] L=new Label[], guide[][] g, pen[] p) { @@ -576,7 +576,7 @@ pen[][] interior(picture pic=currentpicture, guide[][] g, pen[] palette) index=i; } } - } + } fillpalettei[j]=palette[index]; } fillpalette[i]=fillpalettei; @@ -620,7 +620,7 @@ void fill(picture pic=currentpicture, guide[][] g, pen[][] palette) // check existing guides and adds new segment to them if possible, // or otherwise store segment as a new guide private void addseg(pair[][] gds, segment seg) -{ +{ if(!seg.active) return; // search for a path to extend for(int i=0; i < gds.length; ++i) { @@ -629,22 +629,22 @@ private void addseg(pair[][] gds, segment seg) gd.insert(0,seg.a); return; } else if(abs(gd[gd.length-1]-seg.b) < eps) { - gd.push(seg.a); + gd.push(seg.a); return; } else if(abs(gd[0]-seg.a) < eps) { gd.insert(0,seg.b); return; - } else if(abs(gd[gd.length-1]-seg.a) < eps) { + } else if(abs(gd[gd.length-1]-seg.a) < eps) { gd.push(seg.b); return; } } - + // in case nothing is found pair[] segm; - segm=new pair[] {seg.a,seg.b}; + segm=new pair[] {seg.a,seg.b}; gds.push(segm); - + return; } @@ -664,7 +664,7 @@ guide[][] contour(pair[] z, real[] f, real[] c, interpolate join=operator --) // array to store guides found so far pair[][][] points=new pair[c.length][][]; - + for(int cnt=0; cnt < c.length; ++cnt) { pair[][] pointscnt=points[cnt]; real C=c[cnt]; diff --git a/Build/source/utils/asymptote/base/contour3.asy b/Build/source/utils/asymptote/base/contour3.asy index 4977a351bf2..a15a6663b23 100644 --- a/Build/source/utils/asymptote/base/contour3.asy +++ b/Build/source/utils/asymptote/base/contour3.asy @@ -81,7 +81,7 @@ vertex[][] contour3(triple[][][] v, real[][][] f, int j2=2j; int j2p1=j2+1; int j2p2=j2+2; - + for(int k=0; k < nz; ++k) { // vertex values real vdat0=fij[k]; @@ -108,21 +108,21 @@ vertex[][] contour3(triple[][][] v, real[][][] f, triple m3=0.25*(p100+p000+p001+p101); triple m4=0.25*(p000+p010+p011+p001); triple m5=0.25*(p001+p011+p111+p101); - triple mc=0.5*(m0+m5); + triple mc=0.5*(m0+m5); // optimization: we make sure we don't work with empty rectangles int countm=0; int countz=0; int countp=0; - + void check(real vdat) { if(vdat < -eps) ++countm; else { - if(vdat <= eps) ++countz; + if(vdat <= eps) ++countz; else ++countp; } } - + check(vdat0); check(vdat1); check(vdat2); @@ -132,32 +132,32 @@ vertex[][] contour3(triple[][][] v, real[][][] f, check(vdat6); check(vdat7); - if(countm == 8 || countp == 8 || + if(countm == 8 || countp == 8 || ((countm == 7 || countp == 7) && countz == 1)) continue; int k2=2k; int k2p1=k2+1; int k2p2=k2+2; - + // Evaluate midpoints of cube sides. // Then evaluate midpoint of cube. real vdat8=midpoints ? midpoint[i2p1][j2p1][k2] : 0.25*(vdat0+vdat2+vdat6+vdat4); - real vdat9=midpoints ? midpoint[i2p1][j2p2][k2p1] : + real vdat9=midpoints ? midpoint[i2p1][j2p2][k2p1] : 0.25*(vdat2+vdat6+vdat7+vdat3); - real vdat10=midpoints ? midpoint[i2p2][j2p1][k2p1] : + real vdat10=midpoints ? midpoint[i2p2][j2p1][k2p1] : 0.25*(vdat7+vdat6+vdat4+vdat5); - real vdat11=midpoints ? midpoint[i2p1][j2][k2p1] : + real vdat11=midpoints ? midpoint[i2p1][j2][k2p1] : 0.25*(vdat0+vdat4+vdat5+vdat1); - real vdat12=midpoints ? midpoint[i2][j2p1][k2p1] : + real vdat12=midpoints ? midpoint[i2][j2p1][k2p1] : 0.25*(vdat0+vdat2+vdat3+vdat1); - real vdat13=midpoints ? midpoint[i2p1][j2p1][k2p2] : + real vdat13=midpoints ? midpoint[i2p1][j2p1][k2p2] : 0.25*(vdat1+vdat3+vdat7+vdat5); - real vdat14=midpoints ? midpoint[i2p1][j2p1][k2p1] : + real vdat14=midpoints ? midpoint[i2p1][j2p1][k2p1] : 0.125*(vdat0+vdat1+vdat2+vdat3+vdat4+vdat5+vdat6+vdat7); - + // Go through the 24 pyramids, 4 for each side. - + void addval(int kp0, int kp1, int kp2, triple add, triple v) { bucket[] cur=kps[kp0][kp1][kp2]; for(int q=0; q < cur.length; ++q) { @@ -192,8 +192,14 @@ vertex[][] contour3(triple[][][] v, real[][][] f, vec0=unit(vec0); triple normal=cross(vec2,vec1); normal *= sgn(dot(normal,dir)); - real angle0=acos(-dot(vec1,vec2)); - real angle1=acos(-dot(vec2,vec0)); + + real angle(triple u, triple v) { + real Dot=-dot(u,v); + return Dot > 1 ? 0 : Dot < -1 ? pi : acos(Dot); + } + + real angle0=angle(vec1,vec2); + real angle1=angle(vec2,vec0); pts[0].normal=normal*angle0; pts[1].normal=normal*angle1; pts[2].normal=normal*(pi-angle0-angle1); @@ -206,7 +212,7 @@ vertex[][] contour3(triple[][][] v, real[][][] f, weighted[] points=obj.pts; object obj1; object obj2; - obj1.active=true; + obj1.active=true; obj2.active=true; obj1.pts=new weighted[] {points[0],points[1],points[2]}; obj2.pts=new weighted[] {points[1],points[2],points[3]}; @@ -220,7 +226,7 @@ vertex[][] contour3(triple[][][] v, real[][][] f, } } - weighted setupweighted(triple va, triple vb, real da, real db, + weighted setupweighted(triple va, triple vb, real da, real db, int[] kpa, int[] kpb) { weighted w; real ratio=abs(da/(db-da)); @@ -318,7 +324,7 @@ vertex[][] contour3(triple[][][] v, real[][][] f, static int[] pm4={0,1,1}; static int[] pm5={1,1,2}; static int[] pmc={1,1,1}; - + check4pyr(p000,p010,p110,p100,mc,m0, vdat0,vdat2,vdat6,vdat4,vdat14,vdat8, pp000,pp010,pp110,pp100,pmc,pm0); @@ -378,14 +384,14 @@ vertex[][] contour3(triple[][][] v, real[][][] f, ret.normal=normal*2/count; return ret; } - + // Prepare return value. vertex[][] g; - + for(int q=0; q < objects.length; ++q) { object p=objects[q]; g.push(new vertex[] {preparevertex(p.pts[0]),preparevertex(p.pts[1]), - preparevertex(p.pts[2])}); + preparevertex(p.pts[2])}); } return g; } @@ -454,7 +460,7 @@ vertex[][] contour3(real f(real, real, real), triple a, triple b, datij[k]=f(x,y,z); if(i == nx || j == ny || k == nz) continue; int k2p1=2k+1; - midpointi2p1j2p1[2k]=f(x2,y2,z); + midpointi2p1j2p1[2k]=f(x2,y2,z); midpointi2p1j2p1[k2p1]=f(x2,y2,z2); midpointi2p1j2[k2p1]=f(x2,y,z2); midpointi2j2p1[k2p1]=f(x,y2,z2); diff --git a/Build/source/utils/asymptote/base/embed.asy b/Build/source/utils/asymptote/base/embed.asy index 88495f12128..30848c10f4c 100644 --- a/Build/source/utils/asymptote/base/embed.asy +++ b/Build/source/utils/asymptote/base/embed.asy @@ -7,23 +7,23 @@ if(latex()) { // For documentation of the options see // http://mirror.ctan.org/macros/latex/contrib/media9/doc/media9.pdf -// Embed PRC or SWF content in pdf file +// Embed PRC or SWF content in pdf file string embedplayer(string name, string text="", string options="", real width=0, real height=0) { - if(width != 0) options += ",width="+(string) (width/pt)+"pt"; - if(height != 0) options += ",height="+(string) (height/pt)+"pt"; + if(width != 0) options += ",width="+(string) (width/pt)+"pt"; + if(height != 0) options += ",height="+(string) (height/pt)+"pt"; return "% \includemedia[noplaybutton,"+options+"]{"+text+"}{"+name+"}"; } -// Embed media in pdf file +// Embed media in pdf file string embed(string name, string text="", string options="", real width=0, real height=0) { return embedplayer("VPlayer.swf",text,"label="+name+ ",activate=pageopen,addresource="+name+ - ",flashvars={source="+name+"&scaleMode=letterbox},"+ + ",flashvars={source="+name+"&scaleMode=letterbox},"+ options,width,height); } diff --git a/Build/source/utils/asymptote/base/external.asy b/Build/source/utils/asymptote/base/external.asy index f9ab5365aea..9e12610c4b2 100644 --- a/Build/source/utils/asymptote/base/external.asy +++ b/Build/source/utils/asymptote/base/external.asy @@ -20,8 +20,8 @@ string embed(string name, string text="", string options="", atexit(exitfunction); } } - if(width != 0) options += ", width="+(string) (width/pt)+"pt"; - if(height != 0) options +=", height="+(string) (height/pt)+"pt"; + if(width != 0) options += ", width="+(string) (width/pt)+"pt"; + if(height != 0) options +=", height="+(string) (height/pt)+"pt"; return "\href{run:"+name+"}{"+graphic(image,options)+"}"; } diff --git a/Build/source/utils/asymptote/base/feynman.asy b/Build/source/utils/asymptote/base/feynman.asy index 4360ee9f524..4182d989287 100644 --- a/Build/source/utils/asymptote/base/feynman.asy +++ b/Build/source/utils/asymptote/base/feynman.asy @@ -10,12 +10,12 @@ // default ratio of width (distance between two loops) to amplitude for a gluon // line. The gluon function uses this ratio, if the width parameter is -// negative. +// negative. real gluonratio; // default ratio of width (distance between two crests) to amplitude for a // photon line. The photon function uses this ratio, if the width parameter is -// negative. +// negative. real photonratio; // default gluon amplitude @@ -337,7 +337,7 @@ void drawGhost(picture pic = currentpicture, real vertexangle = minvertexangle, real margin = linemargin) { - if(erasebg) do_overpaint(pic, p, bgpen, + if(erasebg) do_overpaint(pic, p, bgpen, linewidth(fgpen)+margin, vertexangle); draw(pic, p, fgpen, arrow); } @@ -358,7 +358,7 @@ void drawDoubleLine(picture pic = currentpicture, real vertexangle = minvertexangle, real margin = linemargin) { - if(erasebg) do_overpaint(pic, p, bgpen, + if(erasebg) do_overpaint(pic, p, bgpen, linewidth(fgpen)+margin, vertexangle); real htw = linewidth(fgpen)+dlspacing/2; @@ -466,7 +466,7 @@ void drawVertexX(picture pic = currentpicture, pen fgpen = vertexpen) { draw(pic, shift(xy)*scale(r)*((-1,-1)--(1,1)), fgpen); - draw(pic, shift(xy)*scale(r)*((1,-1)--(-1,1)), fgpen); + draw(pic, shift(xy)*scale(r)*((1,-1)--(-1,1)), fgpen); } // draw a circle with an X in the middle on picture pic, at position xy with @@ -508,7 +508,7 @@ void drawVertexBoxX(picture pic = currentpicture, } // draw a momentum arrow on picture pic, along path p, at position position -// (use one of the predefined pairs left or right), with an offset offset +// (use one of the predefined pairs left or right), with an offset offset // from the path, a length length, a pen fgpen and an arrowhead arrow. Making // adjust nonzero shifts the momentum arrow along the path. If erasebg is true, // the background is erased inside a margin margin around the momentum arrow. @@ -527,7 +527,7 @@ void drawMomArrow(picture pic = currentpicture, real margin = momarrowmargin) { path momarrow = momArrowPath(p, align, pos, offset, length); - if(erasebg) do_overpaint(pic, momarrow, bgpen, + if(erasebg) do_overpaint(pic, momarrow, bgpen, linewidth(fgpen)+margin, 90); draw(pic, momarrow, fgpen, arrow); } @@ -540,7 +540,7 @@ void drawMomArrow(picture pic = currentpicture, // (essentially, currentpen, arrowfactor and dotfactor). After customising the // default parameters of plain.asy, you may call fmdefaults to adjust the // parameters of feynman.asy. -void fmdefaults() +void fmdefaults() { real arrowsize=arrowsize(currentpen); real linewidth=linewidth(currentpen); diff --git a/Build/source/utils/asymptote/base/flowchart.asy b/Build/source/utils/asymptote/base/flowchart.asy index 3db66173755..d1d87b7887e 100644 --- a/Build/source/utils/asymptote/base/flowchart.asy +++ b/Build/source/utils/asymptote/base/flowchart.asy @@ -57,29 +57,29 @@ struct block { // in absolute coordinates. pair top(transform t=identity()) { return shift(t)+f_top; - } + } pair bottom(transform t=identity()) { return shift(t)+f_bottom; - } + } pair left(transform t=identity()) { return shift(t)+f_left; - } + } pair right(transform t=identity()) { return shift(t)+f_right; - } + } pair topleft(transform t=identity()) { return shift(t)+f_topleft; - } + } pair topright(transform t=identity()) { return shift(t)+f_topright; - } + } pair bottomleft(transform t=identity()) { return shift(t)+f_bottomleft; - } + } pair bottomright(transform t=identity()) { return shift(t)+f_bottomright; - } - + } + // Return a frame representing the block. frame draw(pen p=currentpen); @@ -118,25 +118,25 @@ block rectangle(object header, object body, pair center=(0,0), block block; block.draw=new frame(pen p) { - frame block; - filldraw(block,shift(0,z1.y)*box((0,0),z0),headerpen,drawpen); - add(block,shift(-0.5*(Mheader+mheader))*fheader,(0,z1.y)+0.5z0); - filldraw(block,box((0,0),z1),bodypen,drawpen); - add(block,shift(-0.5*(Mbody+mbody))*fbody,0.5z1); - return block; + frame block; + filldraw(block,shift(0,z1.y)*box((0,0),z0),headerpen,drawpen); + add(block,shift(-0.5*(Mheader+mheader))*fheader,(0,z1.y)+0.5z0); + filldraw(block,box((0,0),z1),bodypen,drawpen); + add(block,shift(-0.5*(Mbody+mbody))*fbody,0.5z1); + return block; }; block.f_position=new pair(real x) { - return point(shape,x); + return point(shape,x); }; block.f_center=interp(point(shape,0),point(shape,3),0.5); - block.f_bottomleft=point(shape,0); - block.f_bottom=point(shape,5.5); - block.f_bottomright=point(shape,5); - block.f_right=point(shape,4.5); - block.f_topright=point(shape,3); - block.f_top=point(shape,2.5); - block.f_topleft=point(shape,2); - block.f_left=point(shape,0.5); + block.f_bottomleft=point(shape,0); + block.f_bottom=point(shape,5.5); + block.f_bottomright=point(shape,5); + block.f_right=point(shape,4.5); + block.f_topright=point(shape,3); + block.f_top=point(shape,2.5); + block.f_topleft=point(shape,2); + block.f_left=point(shape,0.5); block.center=center; block.size=point(shape,3); return block; @@ -156,25 +156,25 @@ block rectangle(object body, pair center=(0,0), block block; block.draw=new frame(pen p) { - frame block; - filldraw(block,shape,fillpen,drawpen); - add(block,shift(-0.5*(M+m))*f,0.5z); - return block; + frame block; + filldraw(block,shape,fillpen,drawpen); + add(block,shift(-0.5*(M+m))*f,0.5z); + return block; }; block.f_position=new pair(real x) { - return point(shape,x); + return point(shape,x); }; block.f_center=0.5*z; block.center=center; block.size=z; block.f_bottomleft=point(shape,0); - block.f_bottom=point(shape,0.5); - block.f_bottomright=point(shape,1); - block.f_right=point(shape,1.5); - block.f_topright=point(shape,2); - block.f_top=point(shape,2.5); - block.f_topleft=point(shape,3); - block.f_left=point(shape,3.5); + block.f_bottom=point(shape,0.5); + block.f_bottomright=point(shape,1); + block.f_right=point(shape,1.5); + block.f_topright=point(shape,2); + block.f_top=point(shape,2.5); + block.f_topleft=point(shape,3); + block.f_left=point(shape,3.5); return block; } @@ -197,13 +197,13 @@ block parallelogram(object body, pair center=(0,0), block block; block.draw=new frame(pen p) { - frame block; - filldraw(block,shape,fillpen,drawpen); - add(block,shift(-0.5*(M+m))*f,((a+skew)/2,b/2)); - return block; + frame block; + filldraw(block,shape,fillpen,drawpen); + add(block,shift(-0.5*(M+m))*f,((a+skew)/2,b/2)); + return block; }; block.f_position=new pair(real x) { - return point(shape,x); + return point(shape,x); }; block.f_center=((a+skew)/2,b/2); block.center=center; @@ -229,7 +229,7 @@ block diamond(object body, pair center=(0,0), pair m=min(f); pair M=max(f); pair bound=maxbound(M-m,(minwidth,minheight)); - + real e=ds; real a=0.5bound.x-dw; real b=0.5bound.y; @@ -244,25 +244,25 @@ block diamond(object body, pair center=(0,0), block block; block.draw=new frame(pen p) { - frame block; - filldraw(block,shape,fillpen,drawpen); - add(block,shift(-0.5*(M+m))*f,(d,c)); - return block; + frame block; + filldraw(block,shape,fillpen,drawpen); + add(block,shift(-0.5*(M+m))*f,(d,c)); + return block; }; block.f_position=new pair(real x) { - return point(shape,x); + return point(shape,x); }; block.f_center=(point(shape,1).x,point(shape,0).y); block.center=center; block.size=(point(shape,0).x,point(shape,1).y); - block.f_bottomleft=point(shape,2.5); - block.f_bottom=point(shape,3); - block.f_bottomright=point(shape,3.5); - block.f_right=point(shape,0); - block.f_topright=point(shape,0.5); - block.f_top=point(shape,1); - block.f_topleft=point(shape,1.5); - block.f_left=point(shape,2); + block.f_bottomleft=point(shape,2.5); + block.f_bottom=point(shape,3); + block.f_bottomright=point(shape,3.5); + block.f_right=point(shape,0); + block.f_topright=point(shape,0.5); + block.f_top=point(shape,1); + block.f_topleft=point(shape,1.5); + block.f_left=point(shape,2); return block; } @@ -274,30 +274,30 @@ block circle(object body, pair center=(0,0), pen fillpen=invisible, pair m=min(f); pair M=max(f); real r=max(0.5length(M-m)+dr,0.5mindiameter); - + path shape=(0,r)..(r,2r)..(2r,r)..(r,0)..cycle; - + block block; block.draw=new frame(pen p) { - frame block; - filldraw(block,shape,fillpen,drawpen); - add(block,shift(-0.5*(M+m))*f,(r,r)); - return block; + frame block; + filldraw(block,shape,fillpen,drawpen); + add(block,shift(-0.5*(M+m))*f,(r,r)); + return block; }; block.f_position=new pair(real x) { - return point(shape,x); + return point(shape,x); }; block.f_center=(r,r); block.center=center; block.size=(2r,2r); block.f_left=point(shape,0); - block.f_topleft=point(shape,0.5); - block.f_top=point(shape,1); - block.f_topright=point(shape,1.5); - block.f_right=point(shape,2); - block.f_bottomright=point(shape,2.5); - block.f_bottom=point(shape,3); - block.f_bottomleft=point(shape,3.5); + block.f_topleft=point(shape,0.5); + block.f_top=point(shape,1); + block.f_topright=point(shape,1.5); + block.f_right=point(shape,2); + block.f_bottomright=point(shape,2.5); + block.f_bottom=point(shape,3); + block.f_bottomleft=point(shape,3.5); return block; } @@ -313,33 +313,33 @@ block roundrectangle(object body, pair center=(0,0), real a=bound.x; real b=bound.y; - + path shape=(0,ds+dw)--(0,ds+b-dw){up}..{right} (ds+dw,2ds+b)--(ds+a-dw,2ds+b){right}..{down} (2ds+a,ds+b-dw)--(2ds+a,ds+dw){down}..{left} (ds+a-dw,0)--(ds+dw,0){left}..{up}cycle; - + block block; block.draw=new frame(pen p) { - frame block; - filldraw(block,shape,fillpen,drawpen); - add(block,shift(-0.5*(M+m))*f,(ds,ds)+0.5bound); - return block; + frame block; + filldraw(block,shape,fillpen,drawpen); + add(block,shift(-0.5*(M+m))*f,(ds,ds)+0.5bound); + return block; }; block.f_position=new pair(real x) { - return point(shape,x); + return point(shape,x); }; block.f_center=(ds+0.5a,ds+0.5b); block.center=center; block.size=(2ds+a,2ds+b); - block.f_bottomleft=point(shape,7.5); - block.f_bottom=point(shape,6.5); - block.f_bottomright=point(shape,5.5); - block.f_right=point(shape,4.5); - block.f_topright=point(shape,3.5); - block.f_top=point(shape,2.5); - block.f_topleft=point(shape,1.5); - block.f_left=point(shape,0.5); + block.f_bottomleft=point(shape,7.5); + block.f_bottom=point(shape,6.5); + block.f_bottomright=point(shape,5.5); + block.f_right=point(shape,4.5); + block.f_topright=point(shape,3.5); + block.f_top=point(shape,2.5); + block.f_topleft=point(shape,1.5); + block.f_left=point(shape,0.5); return block; } @@ -359,25 +359,25 @@ block bevel(object body, pair center=(0,0), pen fillpen=invisible, (dw+a,0)--cycle; block block; block.draw=new frame(pen p) { - frame block; - filldraw(block,shape,fillpen,drawpen); - add(block,shift(-0.5*(M+m))*f,(0.5bound+(dw,dh))); - return block; + frame block; + filldraw(block,shape,fillpen,drawpen); + add(block,shift(-0.5*(M+m))*f,(0.5bound+(dw,dh))); + return block; }; block.f_position=new pair(real x) { - return point(shape,x); + return point(shape,x); }; block.f_center=(dw+0.5a,dh+b); block.center=center; block.size=(2dw+a,2dh+2b); - block.f_bottomleft=point(shape,4); - block.f_bottom=point(shape,4.5); - block.f_bottomright=point(shape,5); - block.f_right=point(shape,0); - block.f_topright=point(shape,1); - block.f_top=point(shape,1.5); - block.f_topleft=point(shape,2); - block.f_left=point(shape,3); + block.f_bottomleft=point(shape,4); + block.f_bottom=point(shape,4.5); + block.f_bottomright=point(shape,5); + block.f_right=point(shape,0); + block.f_topright=point(shape,1); + block.f_top=point(shape,1.5); + block.f_topleft=point(shape,2); + block.f_left=point(shape,3); return block; } @@ -388,14 +388,14 @@ path path(pair point[] ... flowdir dir[]) for(int i=1; i < point.length; ++i) { if(i-1 >= dir.length || dir[i-1] == Horizontal) current=(point[i].x,point[i-1].y); - else + else current=(point[i-1].x,point[i].y); - + if(current != prev) { line=line--current; prev=current; } - + current=point[i]; if(current != prev) { line=line--current; diff --git a/Build/source/utils/asymptote/base/geometry.asy b/Build/source/utils/asymptote/base/geometry.asy index 1c8a95063f7..420d5bdc456 100644 --- a/Build/source/utils/asymptote/base/geometry.asy +++ b/Build/source/utils/asymptote/base/geometry.asy @@ -40,7 +40,7 @@ private transform rotate(explicit pair dir) real angle=degrees(dir); if(angle > 90 && angle < 270) angle -= 180; return rotate(angle); -} +} // *=======================================================* // *........................HEADER.........................* @@ -165,7 +165,7 @@ real rd(real x, real y, real z) ed = ea - 6 * eb; ee = ed + ec + ec; return 3 * sum + fac * (1.0 + ed * (-C1 + C5 * ed - C6 * delz * ee) - +delz * (C2 * ee + delz * (-C3 * ec + delz * C4 * ea)))/(ave * sqrt(ave)); + +delz * (C2 * ee + delz * (-C3 * ec + delz * C4 * ea)))/(ave * sqrt(ave)); } /*<asyxml><function type="real" signature="elle(real,real)"><code></asyxml>*/ @@ -258,10 +258,10 @@ struct coordsys {/*<asyxml></code><documentation>This structure represents a coordinate system in the plane.</documentation></asyxml>*/ /*<asyxml><method type = "pair" signature="relativetodefault(pair)"><code></asyxml>*/ restricted convert relativetodefault = new pair(pair m){return m;};/*<asyxml></code><documentation>Convert a pair given relatively to this coordinate system to - the pair relatively to the default coordinate system.</documentation></method></asyxml>*/ + the pair relatively to the default coordinate system.</documentation></method></asyxml>*/ /*<asyxml><method type = "pair" signature="defaulttorelativet(pair)"><code></asyxml>*/ restricted convert defaulttorelative = new pair(pair m){return m;};/*<asyxml></code><documentation>Convert a pair given relatively to the default coordinate system to - the pair relatively to this coordinate system.</documentation></method></asyxml>*/ + the pair relatively to this coordinate system.</documentation></method></asyxml>*/ /*<asyxml><method type = "real" signature="dot(pair,pair)"><code></asyxml>*/ restricted dot dot = new real(pair m, pair n){return dot(m, n);};/*<asyxml></code><documentation>Return the dot product of this coordinate system.</documentation></method></asyxml>*/ /*<asyxml><method type = "real" signature="abs(pair)"><code></asyxml>*/ @@ -287,50 +287,50 @@ struct coordsys /*<asyxml><operator type = "bool" signature="==(coordsys,coordsys)"><code></asyxml>*/ bool operator ==(coordsys c1, coordsys c2) -{/*<asyxml></code><documentation>Return true iff the coordinate system have the same origin and units vector.</documentation></operator></asyxml>*/ - return c1.O == c2.O && c1.i == c2.i && c1.j == c2.j; -} + {/*<asyxml></code><documentation>Return true iff the coordinate system have the same origin and units vector.</documentation></operator></asyxml>*/ + return c1.O == c2.O && c1.i == c2.i && c1.j == c2.j; + } /*<asyxml><function type="coordsys" signature="cartesiansystem(pair,pair,pair)"><code></asyxml>*/ coordsys cartesiansystem(pair O = (0, 0), pair i, pair j) {/*<asyxml></code><documentation>Return the Cartesian coordinate system (O, i, j).</documentation></function></asyxml>*/ - coordsys R; - real[][] P = {{0, 0}, {0, 0}}; - real[][] iP; - P[0][0] = i.x; - P[0][1] = j.x; - P[1][0] = i.y; - P[1][1] = j.y; - iP = inverse(P); - real ni = abs(i); - real nj = abs(j); - real ij = angle(j) - angle(i); - - pair rtd(pair m) - { - return O + (P[0][0] * m.x + P[0][1] * m.y, P[1][0] * m.x + P[1][1] * m.y); - } - - pair dtr(pair m) - { - m-=O; - return (iP[0][0] * m.x + iP[0][1] * m.y, iP[1][0] * m.x + iP[1][1] * m.y); - } - - pair polar(real r, real a) - { - real ca = sin(ij - a)/(ni * sin(ij)); - real sa = sin(a)/(nj * sin(ij)); - return r * (ca, sa); - } - - real tdot(pair m, pair n) - { - return m.x * n.x * ni^2 + m.y * n.y * nj^2 + (m.x * n.y + n.x * m.y) * dot(i, j); - } - - R.init(rtd, dtr, polar, tdot); - return R; + coordsys R; + real[][] P = {{0, 0}, {0, 0}}; + real[][] iP; + P[0][0] = i.x; + P[0][1] = j.x; + P[1][0] = i.y; + P[1][1] = j.y; + iP = inverse(P); + real ni = abs(i); + real nj = abs(j); + real ij = angle(j) - angle(i); + + pair rtd(pair m) + { + return O + (P[0][0] * m.x + P[0][1] * m.y, P[1][0] * m.x + P[1][1] * m.y); + } + + pair dtr(pair m) + { + m-=O; + return (iP[0][0] * m.x + iP[0][1] * m.y, iP[1][0] * m.x + iP[1][1] * m.y); + } + + pair polar(real r, real a) + { + real ca = sin(ij - a)/(ni * sin(ij)); + real sa = sin(a)/(nj * sin(ij)); + return r * (ca, sa); + } + + real tdot(pair m, pair n) + { + return m.x * n.x * ni^2 + m.y * n.y * nj^2 + (m.x * n.y + n.x * m.y) * dot(i, j); + } + + R.init(rtd, dtr, polar, tdot); + return R; } @@ -344,19 +344,19 @@ void show(picture pic = currentpicture, Label lo = "$O$", pen jpen = ipen, arrowbar arrow = Arrow) {/*<asyxml></code><documentation>Draw the components (O, i, j, x - axis, y - axis) of 'R'.</documentation></function></asyxml>*/ - unravel R; - dot(pic, O, dotpen); - drawline(pic, O, O + i, xpen); - drawline(pic, O, O + j, ypen); - draw(pic, li, O--(O + i), ipen, arrow); - Label lj = lj.copy(); - lj.align(lj.align, unit(I * j)); - draw(pic, lj, O--(O + j), jpen, arrow); - draw(pic, lj, O--(O + j), jpen, arrow); - Label lo = lo.copy(); - lo.align(lo.align, -2 * dir(O--O + i, O--O + j)); - lo.p(dotpen); - label(pic, lo, O); + unravel R; + dot(pic, O, dotpen); + drawline(pic, O, O + i, xpen); + drawline(pic, O, O + j, ypen); + draw(pic, li, O--(O + i), ipen, arrow); + Label lj = lj.copy(); + lj.align(lj.align, unit(I * j)); + draw(pic, lj, O--(O + j), jpen, arrow); + draw(pic, lj, O--(O + j), jpen, arrow); + Label lo = lo.copy(); + lo.align(lo.align, -2 * dir(O--O + i, O--O + j)); + lo.p(dotpen); + label(pic, lo, O); } /*<asyxml><operator type = "pair" signature="/(pair,coordsys)"><code></asyxml>*/ @@ -364,7 +364,7 @@ pair operator /(pair p, coordsys R) {/*<asyxml></code><documentation>Return the xy - coordinates of 'p' relatively to the coordinate system 'R'. For example, if R = cartesiansystem((1, 2), (1, 0), (0, 1)), (0, 0)/R is (-1, -2).</documentation></operator></asyxml>*/ - return R.defaulttorelative(p); + return R.defaulttorelative(p); } /*<asyxml><operator type = "pair" signature="*(coordsys,pair)"><code></asyxml>*/ @@ -372,34 +372,34 @@ pair operator *(coordsys R, pair p) {/*<asyxml></code><documentation>Return the coordinates of 'p' given in the xy - coordinates 'R'. For example, if R = cartesiansystem((1, 2), (1, 0), (0, 1)), R * (0, 0) is (1, 2).</documentation></operator></asyxml>*/ - return R.relativetodefault(p); + return R.relativetodefault(p); } /*<asyxml><operator type = "path" signature="*(coordsys,path)"><code></asyxml>*/ path operator *(coordsys R, path g) {/*<asyxml></code><documentation>Return the reconstructed path applying R * pair to each node, pre and post control point of 'g'.</documentation></operator></asyxml>*/ - guide og = R * point(g, 0); - real l = length(g); - for(int i = 1; i <= l; ++i) - { - pair P = R * point(g, i); - pair post = R * postcontrol(g, i - 1); - pair pre = R * precontrol(g, i); - if(i == l && (cyclic(g))) - og = og..controls post and pre..cycle; - else - og = og..controls post and pre..P; - } - return og; + guide og = R * point(g, 0); + real l = length(g); + for(int i = 1; i <= l; ++i) + { + pair P = R * point(g, i); + pair post = R * postcontrol(g, i - 1); + pair pre = R * precontrol(g, i); + if(i == l && (cyclic(g))) + og = og..controls post and pre..cycle; + else + og = og..controls post and pre..P; + } + return og; } /*<asyxml><operator type = "coordsys" signature="*(transform,coordsys)"><code></asyxml>*/ coordsys operator *(transform t,coordsys R) {/*<asyxml></code><documentation>Provide transform * coordsys. Note that shiftless(t) is applied to R.i and R.j.</documentation></operator></asyxml>*/ - coordsys oc; - oc = cartesiansystem(t * R.O, shiftless(t) * R.i, shiftless(t) * R.j); - return oc; + coordsys oc; + oc = cartesiansystem(t * R.O, shiftless(t) * R.i, shiftless(t) * R.j); + return oc; } /*<asyxml><constant type = "coordsys" signature="defaultcoordsys"><code></asyxml>*/ @@ -651,26 +651,26 @@ point operator *(explicit pair p1, explicit point p2) /*<asyxml><operator type = "bool" signature="==(explicit point,explicit point)"><code></asyxml>*/ bool operator ==(explicit point M, explicit point N) -{/*<asyxml></code><documentation>Provide the test 'M == N' wish returns true iff MN < EPS</documentation></operator></asyxml>*/ - return abs(locate(M) - locate(N)) < EPS; -} + {/*<asyxml></code><documentation>Provide the test 'M == N' wish returns true iff MN < EPS</documentation></operator></asyxml>*/ + return abs(locate(M) - locate(N)) < EPS; + } /*<asyxml><operator type = "bool" signature="!=(explicit point,explicit point)"><code></asyxml>*/ bool operator !=(explicit point M, explicit point N) {/*<asyxml></code><documentation>Provide the test 'M != N' wish return true iff MN >= EPS</documentation></operator></asyxml>*/ - return !(M == N); + return !(M == N); } /*<asyxml><operator type = "guide" signature="cast(point)"><code></asyxml>*/ guide operator cast(point p) {/*<asyxml></code><documentation>Cast point to guide.</documentation></operator></asyxml>*/ - return locate(p); + return locate(p); } /*<asyxml><operator type = "path" signature="cast(point)"><code></asyxml>*/ path operator cast(point p) {/*<asyxml></code><documentation>Cast point to path.</documentation></operator></asyxml>*/ - return locate(p); + return locate(p); } /*<asyxml><function type="void" signature="dot(picture,Label,explicit point,align,string,pen)"><code></asyxml>*/ @@ -678,103 +678,103 @@ void dot(picture pic = currentpicture, Label L, explicit point Z, align align = NoAlign, string format = defaultformat, pen p = currentpen) {/*<asyxml></code><documentation></documentation></function></asyxml>*/ - Label L = L.copy(); - L.position(locate(Z)); - if(L.s == "") { - if(format == "") format = defaultformat; - L.s = "("+format(format, Z.x)+", "+format(format, Z.y)+")"; - } - L.align(align, E); - L.p(p); - dot(pic, locate(Z), p); - add(pic, L); + Label L = L.copy(); + L.position(locate(Z)); + if(L.s == "") { + if(format == "") format = defaultformat; + L.s = "("+format(format, Z.x)+", "+format(format, Z.y)+")"; + } + L.align(align, E); + L.p(p); + dot(pic, locate(Z), p); + add(pic, L); } /*<asyxml><function type="real" signature="abs(coordsys,pair)"><code></asyxml>*/ real abs(coordsys R, pair m) {/*<asyxml></code><documentation>Return the modulus |m| in the coordinate system 'R'.</documentation></function></asyxml>*/ - return R.abs(m); + return R.abs(m); } /*<asyxml><function type="real" signature="abs(explicit point)"><code></asyxml>*/ real abs(explicit point M) {/*<asyxml></code><documentation>Return the modulus |M| in its coordinate system.</documentation></function></asyxml>*/ - return M.coordsys.abs(M.coordinates); + return M.coordsys.abs(M.coordinates); } /*<asyxml><function type="real" signature="length(explicit point)"><code></asyxml>*/ real length(explicit point M) {/*<asyxml></code><documentation>Return the modulus |M| in its coordinate system (same as 'abs').</documentation></function></asyxml>*/ - return M.coordsys.abs(M.coordinates); + return M.coordsys.abs(M.coordinates); } /*<asyxml><function type="point" signature="conj(explicit point)"><code></asyxml>*/ point conj(explicit point M) {/*<asyxml></code><documentation>Conjugate.</documentation></function></asyxml>*/ - return point(M.coordsys, conj(M.coordinates), M.m); + return point(M.coordsys, conj(M.coordinates), M.m); } /*<asyxml><function type="real" signature="degrees(explicit point,coordsys,bool)"><code></asyxml>*/ real degrees(explicit point M, coordsys R = M.coordsys, bool warn = true) {/*<asyxml></code><documentation>Return the angle of M (in degrees) relatively to 'R'.</documentation></function></asyxml>*/ - return (degrees(locate(M) - R.O, warn) - degrees(R.i))%360; + return (degrees(locate(M) - R.O, warn) - degrees(R.i))%360; } /*<asyxml><function type="real" signature="angle(explicit point,coordsys,bool)"><code></asyxml>*/ real angle(explicit point M, coordsys R = M.coordsys, bool warn = true) {/*<asyxml></code><documentation>Return the angle of M (in radians) relatively to 'R'.</documentation></function></asyxml>*/ - return radians(degrees(M, R, warn)); + return radians(degrees(M, R, warn)); } bool Finite(explicit point z) { - return abs(z.x) < Infinity && abs(z.y) < Infinity; + return abs(z.x) < Infinity && abs(z.y) < Infinity; } /*<asyxml><function type="bool" signature="finite(explicit point)"><code></asyxml>*/ bool finite(explicit point p) {/*<asyxml></code><documentation>Avoid to compute 'finite((pair)(infinite_point))'.</documentation></function></asyxml>*/ - return finite(p.coordinates); + return finite(p.coordinates); } /*<asyxml><function type="real" signature="dot(point,point)"><code></asyxml>*/ real dot(point A, point B) {/*<asyxml></code><documentation>Return the dot product in the coordinate system of 'A'.</documentation></function></asyxml>*/ - point[] P = standardizecoordsys(A.coordsys, A, B); - return P[0].coordsys.dot(P[0].coordinates, P[1].coordinates); + point[] P = standardizecoordsys(A.coordsys, A, B); + return P[0].coordsys.dot(P[0].coordinates, P[1].coordinates); } /*<asyxml><function type="real" signature="dot(point,explicit pair)"><code></asyxml>*/ real dot(point A, explicit pair B) {/*<asyxml></code><documentation>Return the dot product in the default coordinate system. dot(explicit pair, point) is also defined.</documentation></function></asyxml>*/ - return dot(locate(A), B); + return dot(locate(A), B); } real dot(explicit pair A, point B) { - return dot(A, locate(B)); + return dot(A, locate(B)); } /*<asyxml><function type="transforms" signature="rotateO(real)"><code></asyxml>*/ transform rotateO(real a) {/*<asyxml></code><documentation>Rotation around the origin of the current coordinate system.</documentation></function></asyxml>*/ - return rotate(a, currentcoordsys.O); + return rotate(a, currentcoordsys.O); } /*<asyxml><function type="transform" signature="projection(point,point)"><code></asyxml>*/ transform projection(point A, point B) {/*<asyxml></code><documentation>Return the orthogonal projection on the line (AB).</documentation></function></asyxml>*/ - pair dir = unit(locate(A) - locate(B)); - pair a = locate(A); - real cof = dir.x * a.x + dir.y * a.y; - real tx = a.x - dir.x * cof; - real txx = dir.x^2; - real txy = dir.x * dir.y; - real ty = a.y - dir.y * cof; - real tyx = txy; - real tyy = dir.y^2; - transform t = (tx, ty, txx, txy, tyx, tyy); - return t; + pair dir = unit(locate(A) - locate(B)); + pair a = locate(A); + real cof = dir.x * a.x + dir.y * a.y; + real tx = a.x - dir.x * cof; + real txx = dir.x^2; + real txy = dir.x * dir.y; + real ty = a.y - dir.y * cof; + real tyx = txy; + real tyy = dir.y^2; + transform t = (tx, ty, txx, txy, tyx, tyy); + return t; } /*<asyxml><function type="transform" signature="projection(point,point,point,point,bool)"><code></asyxml>*/ @@ -782,45 +782,45 @@ transform projection(point A, point B, point C, point D, bool safe = false) {/*<asyxml></code><documentation>Return the (CD) parallel projection on (AB). If 'safe = true' and (AB)//(CD) return the identity. If 'safe = false' and (AB)//(CD) return an infinity scaling.</documentation></function></asyxml>*/ - pair a = locate(A); - pair u = unit(locate(B) - locate(A)); - pair v = unit(locate(D) - locate(C)); - real c = u.x * a.y - u.y * a.x; - real d = (conj(u) * v).y; - if (abs(d) < epsgeo) { - return safe ? identity() : scale(infinity); - } - real tx = c * v.x/d; - real ty = c * v.y/d; - real txx = u.x * v.y/d; - real txy = -u.x * v.x/d; - real tyx = u.y * v.y/d; - real tyy = -u.y * v.x/d; - transform t = (tx, ty, txx, txy, tyx, tyy); - return t; + pair a = locate(A); + pair u = unit(locate(B) - locate(A)); + pair v = unit(locate(D) - locate(C)); + real c = u.x * a.y - u.y * a.x; + real d = (conj(u) * v).y; + if (abs(d) < epsgeo) { + return safe ? identity() : scale(infinity); + } + real tx = c * v.x/d; + real ty = c * v.y/d; + real txx = u.x * v.y/d; + real txy = -u.x * v.x/d; + real tyx = u.y * v.y/d; + real tyy = -u.y * v.x/d; + transform t = (tx, ty, txx, txy, tyx, tyy); + return t; } /*<asyxml><function type="transform" signature="scale(real,point)"><code></asyxml>*/ transform scale(real k, point M) {/*<asyxml></code><documentation>Homothety.</documentation></function></asyxml>*/ - pair P = locate(M); - return shift(P) * scale(k) * shift(-P); + pair P = locate(M); + return shift(P) * scale(k) * shift(-P); } /*<asyxml><function type="transform" signature="xscale(real,point)"><code></asyxml>*/ transform xscale(real k, point M) {/*<asyxml></code><documentation>xscale from 'M' relatively to the x - axis of the coordinate system of 'M'.</documentation></function></asyxml>*/ - pair P = locate(M); - real a = degrees(M.coordsys.i); - return (shift(P) * rotate(a)) * xscale(k) * (rotate(-a) * shift(-P)); + pair P = locate(M); + real a = degrees(M.coordsys.i); + return (shift(P) * rotate(a)) * xscale(k) * (rotate(-a) * shift(-P)); } /*<asyxml><function type="transform" signature="yscale(real,point)"><code></asyxml>*/ transform yscale(real k, point M) {/*<asyxml></code><documentation>yscale from 'M' relatively to the y - axis of the coordinate system of 'M'.</documentation></function></asyxml>*/ - pair P = locate(M); - real a = degrees(M.coordsys.j) - 90; - return (shift(P) * rotate(a)) * yscale(k) * (rotate(-a) * shift(-P)); + pair P = locate(M); + real a = degrees(M.coordsys.j) - 90; + return (shift(P) * rotate(a)) * yscale(k) * (rotate(-a) * shift(-P)); } /*<asyxml><function type="transform" signature="scale(real,point,point,point,point,bool)"><code></asyxml>*/ @@ -829,41 +829,41 @@ transform scale(real k, point A, point B, point C, point D, bool safe = false) (help me for English translation...) If 'safe = true' and (AB)//(CD) return the identity. If 'safe = false' and (AB)//(CD) return a infinity scaling.</documentation></function></asyxml>*/ - pair a = locate(A); - pair u = unit(locate(B) - locate(A)); - pair v = unit(locate(D) - locate(C)); - real c = u.x * a.y - u.y * a.x; - real d = (conj(u) * v).y; - real d = (conj(u) * v).y; - if (abs(d) < epsgeo) { - return safe ? identity() : scale(infinity); - } - real tx = (1 - k) * c * v.x/d; - real ty = (1 - k) * c * v.y/d; - real txx = (1 - k) * u.x * v.y/d + k; - real txy = (k - 1) * u.x * v.x/d; - real tyx = (1 - k) * u.y * v.y/d; - real tyy = (k - 1) * u.y * v.x/d + k; - transform t = (tx, ty, txx, txy, tyx, tyy); - return t; + pair a = locate(A); + pair u = unit(locate(B) - locate(A)); + pair v = unit(locate(D) - locate(C)); + real c = u.x * a.y - u.y * a.x; + real d = (conj(u) * v).y; + real d = (conj(u) * v).y; + if (abs(d) < epsgeo) { + return safe ? identity() : scale(infinity); + } + real tx = (1 - k) * c * v.x/d; + real ty = (1 - k) * c * v.y/d; + real txx = (1 - k) * u.x * v.y/d + k; + real txy = (k - 1) * u.x * v.x/d; + real tyx = (1 - k) * u.y * v.y/d; + real tyy = (k - 1) * u.y * v.x/d + k; + transform t = (tx, ty, txx, txy, tyx, tyy); + return t; } /*<asyxml><function type="transform" signature="scaleO(real)"><code></asyxml>*/ transform scaleO(real x) {/*<asyxml></code><documentation>Homothety from the origin of the current coordinate system.</documentation></function></asyxml>*/ - return scale(x, (0, 0)); + return scale(x, (0, 0)); } /*<asyxml><function type="transform" signature="xscaleO(real)"><code></asyxml>*/ transform xscaleO(real x) {/*<asyxml></code><documentation>xscale from the origin and relatively to the current coordinate system.</documentation></function></asyxml>*/ - return scale(x, (0, 0), (0, 1), (0, 0), (1, 0)); + return scale(x, (0, 0), (0, 1), (0, 0), (1, 0)); } /*<asyxml><function type="transform" signature="yscaleO(real)"><code></asyxml>*/ transform yscaleO(real x) {/*<asyxml></code><documentation>yscale from the origin and relatively to the current coordinate system.</documentation></function></asyxml>*/ - return scale(x, (0, 0), (1, 0), (0, 0), (0, 1)); + return scale(x, (0, 0), (1, 0), (0, 0), (0, 1)); } /*<asyxml><struct signature="vector"><code></asyxml>*/ @@ -876,121 +876,121 @@ struct vector /*<asyxml><operator type = "point" signature="cast(vector)"><code></asyxml>*/ point operator cast(vector v) {/*<asyxml></code><documentation>Cast vector 'v' to point 'M' so that OM = v.</documentation></operator></asyxml>*/ - return v.v; + return v.v; } /*<asyxml><operator type = "vector" signature="cast(pair)"><code></asyxml>*/ vector operator cast(pair v) {/*<asyxml></code><documentation>Cast pair to vector relatively to the current coordinate system 'currentcoordsys'.</documentation></operator></asyxml>*/ - vector ov; - ov.v = point(currentcoordsys, v); - return ov; + vector ov; + ov.v = point(currentcoordsys, v); + return ov; } /*<asyxml><operator type = "vector" signature="cast(explicit point)"><code></asyxml>*/ vector operator cast(explicit point v) {/*<asyxml></code><documentation>A point can be interpreted like a vector using the code '(vector)a_point'.</documentation></operator></asyxml>*/ - vector ov; - ov.v = v; - return ov; + vector ov; + ov.v = v; + return ov; } /*<asyxml><operator type = "pair" signature="cast(explicit vector)"><code></asyxml>*/ pair operator cast(explicit vector v) {/*<asyxml></code><documentation>Cast vector to pair (the coordinates of 'v' in the default coordinate system).</documentation></operator></asyxml>*/ - return locate(v.v) - v.v.coordsys.O; + return locate(v.v) - v.v.coordsys.O; } /*<asyxml><operator type = "align" signature="cast(vector)"><code></asyxml>*/ align operator cast(vector v) {/*<asyxml></code><documentation>Cast vector to align.</documentation></operator></asyxml>*/ - return (pair)v; + return (pair)v; } /*<asyxml><function type="vector" signature="vector(coordsys, pair)"><code></asyxml>*/ vector vector(coordsys R = currentcoordsys, pair v) {/*<asyxml></code><documentation>Return the vector of 'R' which has the coordinates 'v'.</documentation></function></asyxml>*/ - vector ov; - ov.v = point(R, v); - return ov; + vector ov; + ov.v = point(R, v); + return ov; } /*<asyxml><function type="vector" signature="vector(point)"><code></asyxml>*/ vector vector(point M) {/*<asyxml></code><documentation>Return the vector OM, where O is the origin of the coordinate system of 'M'. Useful to write 'vector(P - M);' instead of '(vector)(P - M)'.</documentation></function></asyxml>*/ - return M; + return M; } /*<asyxml><function type="point" signature="point(explicit vector)"><code></asyxml>*/ point point(explicit vector u) {/*<asyxml></code><documentation>Return the point M so that OM = u, where O is the origin of the coordinate system of 'u'.</documentation></function></asyxml>*/ - return u.v; + return u.v; } /*<asyxml><function type="pair" signature="locate(explicit vector)"><code></asyxml>*/ pair locate(explicit vector v) {/*<asyxml></code><documentation>Return the coordinates of 'v' in the default coordinate system (like casting vector to pair).</documentation></function></asyxml>*/ - return (pair)v; + return (pair)v; } /*<asyxml><function type="void" signature="show(Label,pen,arrowbar)"><code></asyxml>*/ void show(Label L, vector v, pen p = currentpen, arrowbar arrow = Arrow) {/*<asyxml></code><documentation>Draw the vector v (from the origin of its coordinate system).</documentation></function></asyxml>*/ - coordsys R = v.v.coordsys; - draw(L, R.O--v.v, p, arrow); + coordsys R = v.v.coordsys; + draw(L, R.O--v.v, p, arrow); } /*<asyxml><function type="vector" signature="changecoordsys(coordsys,vector)"><code></asyxml>*/ vector changecoordsys(coordsys R, vector v) {/*<asyxml></code><documentation>Return the vector 'v' relatively to coordinate system 'R'.</documentation></function></asyxml>*/ - vector ov; - ov.v = point(R, (locate(v) + R.O)/R); - return ov; + vector ov; + ov.v = point(R, (locate(v) + R.O)/R); + return ov; } /*<asyxml><operator type = "vector" signature="*(real,explicit vector)"><code></asyxml>*/ vector operator *(real x, explicit vector v) {/*<asyxml></code><documentation>Provide real * vector.</documentation></operator></asyxml>*/ - return x * v.v; + return x * v.v; } /*<asyxml><operator type = "vector" signature="/(explicit vector,real)"><code></asyxml>*/ vector operator /(explicit vector v, real x) {/*<asyxml></code><documentation>Provide vector/real</documentation></operator></asyxml>*/ - return v.v/x; + return v.v/x; } /*<asyxml><operator type = "vector" signature="*(transform t,explicit vector)"><code></asyxml>*/ vector operator *(transform t, explicit vector v) {/*<asyxml></code><documentation>Provide transform * vector.</documentation></operator></asyxml>*/ - return t * v.v; + return t * v.v; } /*<asyxml><operator type = "vector" signature="*(explicit point,explicit vector)"><code></asyxml>*/ vector operator *(explicit point M, explicit vector v) {/*<asyxml></code><documentation>Provide point * vector</documentation></operator></asyxml>*/ - return M * v.v; + return M * v.v; } /*<asyxml><operator type = "point" signature="+(explicit point,explicit vector)"><code></asyxml>*/ point operator +(point M, explicit vector v) {/*<asyxml></code><documentation>Return 'M' shifted by 'v'.</documentation></operator></asyxml>*/ - return shift(locate(v)) * M; + return shift(locate(v)) * M; } /*<asyxml><operator type = "point" signature="-(explicit point,explicit vector)"><code></asyxml>*/ point operator -(point M, explicit vector v) {/*<asyxml></code><documentation>Return 'M' shifted by '-v'.</documentation></operator></asyxml>*/ - return shift(-locate(v)) * M; + return shift(-locate(v)) * M; } /*<asyxml><operator type = "vector" signature="-(explicit vector)"><code></asyxml>*/ vector operator -(explicit vector v) {/*<asyxml></code><documentation>Provide -v.</documentation></operator></asyxml>*/ - return -v.v; + return -v.v; } /*<asyxml><operator type = "point" signature="+(explicit pair,explicit vector)"><code></asyxml>*/ @@ -998,7 +998,7 @@ point operator +(explicit pair m, explicit vector v) {/*<asyxml></code><documentation>The pair 'm' is supposed to be the coordinates of a point in the current coordinates system 'currentcoordsys'. Return this point shifted by the vector 'v'.</documentation></operator></asyxml>*/ - return locate(m) + v; + return locate(m) + v; } /*<asyxml><operator type = "point" signature="-(explicit pair,explicit vector)"><code></asyxml>*/ @@ -1006,7 +1006,7 @@ point operator -(explicit pair m, explicit vector v) {/*<asyxml></code><documentation>The pair 'm' is supposed to be the coordinates of a point in the current coordinates system 'currentcoordsys'. Return this point shifted by the vector '-v'.</documentation></operator></asyxml>*/ - return m + (-v); + return m + (-v); } /*<asyxml><operator type = "vector" signature="+(explicit vector,explicit vector)"><code></asyxml>*/ @@ -1014,9 +1014,9 @@ vector operator +(explicit vector v1, explicit vector v2) {/*<asyxml></code><documentation>Provide vector + vector. If the two vector haven't the same coordinate system, the returned vector is relative to the default coordinate system (without warning).</documentation></operator></asyxml>*/ - coordsys R = v1.v.coordsys; - if(samecoordsys(false, v1, v2)){R = defaultcoordsys;} - return vector(R, (locate(v1) + locate(v2))/R); + coordsys R = v1.v.coordsys; + if(samecoordsys(false, v1, v2)){R = defaultcoordsys;} + return vector(R, (locate(v1) + locate(v2))/R); } /*<asyxml><operator type = "vector" signature="-(explicit vector, explicit vector)"><code></asyxml>*/ @@ -1024,31 +1024,31 @@ vector operator -(explicit vector v1, explicit vector v2) {/*<asyxml></code><documentation>Provide vector - vector. If the two vector haven't the same coordinate system, the returned vector is relative to the default coordinate system (without warning).</documentation></operator></asyxml>*/ - return v1 + (-v2); + return v1 + (-v2); } /*<asyxml><operator type = "bool" signature="==(explicit vector,explicit vector)"><code></asyxml>*/ bool operator ==(explicit vector u, explicit vector v) -{/*<asyxml></code><documentation>Return true iff |u - v|<EPS.</documentation></operator></asyxml>*/ - return abs(u - v) < EPS; -} + {/*<asyxml></code><documentation>Return true iff |u - v|<EPS.</documentation></operator></asyxml>*/ + return abs(u - v) < EPS; + } /*<asyxml><function type="bool" signature="collinear(vector,vector)"><code></asyxml>*/ bool collinear(vector u, vector v) {/*<asyxml></code><documentation>Return 'true' iff the vectors 'u' and 'v' are collinear.</documentation></function></asyxml>*/ - return abs(ypart((conj((pair)u) * (pair)v))) < EPS; + return abs(ypart((conj((pair)u) * (pair)v))) < EPS; } /*<asyxml><function type="vector" signature="unit(point)"><code></asyxml>*/ vector unit(point M) {/*<asyxml></code><documentation>Return the unit vector according to the modulus of its coordinate system.</documentation></function></asyxml>*/ - return M/abs(M); + return M/abs(M); } /*<asyxml><function type="vector" signature="unit(vector)"><code></asyxml>*/ vector unit(vector u) {/*<asyxml></code><documentation>Return the unit vector according to the modulus of its coordinate system.</documentation></function></asyxml>*/ - return u.v/abs(u.v); + return u.v/abs(u.v); } /*<asyxml><function type="real" signature="degrees(vector,coordsys,bool)"><code></asyxml>*/ @@ -1056,7 +1056,7 @@ real degrees(vector v, coordsys R = v.v.coordsys, bool warn = true) {/*<asyxml></code><documentation>Return the angle of 'v' (in degrees) relatively to 'R'.</documentation></function></asyxml>*/ - return (degrees(locate(v), warn) - degrees(R.i))%360; + return (degrees(locate(v), warn) - degrees(R.i))%360; } /*<asyxml><function type="real" signature="angle(vector,coordsys,bool)"><code></asyxml>*/ @@ -1064,13 +1064,13 @@ real angle(explicit vector v, coordsys R = v.v.coordsys, bool warn = true) {/*<asyxml></code><documentation>Return the angle of 'v' (in radians) relatively to 'R'.</documentation></function></asyxml>*/ - return radians(degrees(v, R, warn)); + return radians(degrees(v, R, warn)); } /*<asyxml><function type="vector" signature="conj(explicit vector)"><code></asyxml>*/ vector conj(explicit vector u) {/*<asyxml></code><documentation>Conjugate.</documentation></function></asyxml>*/ - return conj(u.v); + return conj(u.v); } /*<asyxml><function type="transform" signature="rotate(explicit vector)"><code></asyxml>*/ @@ -1079,7 +1079,7 @@ transform rotate(explicit vector dir) This is useful for rotating text along a line in the direction dir. rotate(explicit point dir) is also defined. </documentation></function></asyxml>*/ - return rotate(locate(dir)); + return rotate(locate(dir)); } transform rotate(explicit point dir){return rotate(locate(vector(dir)));} // *......................COORDINATES......................* @@ -1311,7 +1311,7 @@ void perpendicularmark(picture pic = currentpicture, point z, g = margin(g, p).g; draw(apic, g, p); if(filltype != NoFill) filltype.fill(apic, (relpoint(g, 0) - relpoint(g, 0.5)+ - relpoint(g, 1))--g--cycle, p + solid); + relpoint(g, 1))--g--cycle, p + solid); add(pic, apic, locate(z)); } @@ -1360,7 +1360,7 @@ void markrightangle(picture pic = currentpicture, point A, point O, pair Ap = A, Bp = B, Op = O; pair dir = Ap - Op; real a1 = degrees(dir); - pair align = rotate(-a1) * unit(dir(Op--Ap, Op--Bp)); + pair align = rotate(-a1) * dir(Op--Ap, Op--Bp); perpendicularmark(pic = pic, z = O, align = align, dir = dir, size = size, p = p, margin = margin, filltype = filltype); @@ -1700,80 +1700,80 @@ void write(explicit segment s) /*<asyxml><operator type = "bool" signature="==(line,line)"><code></asyxml>*/ bool operator ==(line l1, line l2) -{/*<asyxml></code><documentation>Provide the test 'line == line'.</documentation></operator></asyxml>*/ - return (collinear(l1.u, l2.u) && - abs(ypart((locate(l1.A) - locate(l1.B))/(locate(l1.A) - locate(l2.B)))) < epsgeo && - l1.extendA == l2.extendA && l1.extendB == l2.extendB); -} + {/*<asyxml></code><documentation>Provide the test 'line == line'.</documentation></operator></asyxml>*/ + return (collinear(l1.u, l2.u) && + abs(ypart((locate(l1.A) - locate(l1.B))/(locate(l1.A) - locate(l2.B)))) < epsgeo && + l1.extendA == l2.extendA && l1.extendB == l2.extendB); + } /*<asyxml><operator type = "bool" signature="!=(line,line)"><code></asyxml>*/ bool operator !=(line l1, line l2) {/*<asyxml></code><documentation>Provide the test 'line != line'.</documentation></operator></asyxml>*/ - return !(l1 == l2); + return !(l1 == l2); } /*<asyxml><operator type = "bool" signature="@(point,line)"><code></asyxml>*/ bool operator @(point m, line l) {/*<asyxml></code><documentation>Provide the test 'point @ line'. Return true iff 'm' is on the 'l'.</documentation></operator></asyxml>*/ - point M = changecoordsys(l.A.coordsys, m); - if (abs(l.a * M.x + l.b * M.y + l.c) >= epsgeo) return false; - if (l.extendA && l.extendB) return true; - if (!l.extendA && !l.extendB) return between(l.A, M, l.B); - if (l.extendA) return sameside(M, l.A, l.B); - return sameside(M, l.B, l.A); + point M = changecoordsys(l.A.coordsys, m); + if (abs(l.a * M.x + l.b * M.y + l.c) >= epsgeo) return false; + if (l.extendA && l.extendB) return true; + if (!l.extendA && !l.extendB) return between(l.A, M, l.B); + if (l.extendA) return sameside(M, l.A, l.B); + return sameside(M, l.B, l.A); } /*<asyxml><function type="coordsys" signature="coordsys(line)"><code></asyxml>*/ coordsys coordsys(line l) {/*<asyxml></code><documentation>Return the coordinate system in which 'l' is defined.</documentation></function></asyxml>*/ - return l.A.coordsys; + return l.A.coordsys; } /*<asyxml><function type="line" signature="reverse(line)"><code></asyxml>*/ line reverse(line l) {/*<asyxml></code><documentation>Permute the points 'A' and 'B' of 'l' and so its orientation.</documentation></function></asyxml>*/ - return line(l.B, l.extendB, l.A, l.extendA); + return line(l.B, l.extendB, l.A, l.extendA); } /*<asyxml><function type="line" signature="extend(line)"><code></asyxml>*/ line extend(line l) {/*<asyxml></code><documentation>Return the infinite line passing through 'l.A' and 'l.B'.</documentation></function></asyxml>*/ - line ol = l.copy(); - ol.extendA = true; - ol.extendB = true; - return ol; + line ol = l.copy(); + ol.extendA = true; + ol.extendB = true; + return ol; } /*<asyxml><function type="line" signature="complementary(explicit line)"><code></asyxml>*/ line complementary(explicit line l) {/*<asyxml></code><documentation>Return the complementary of a half-line with respect of the full line 'l'.</documentation></function></asyxml>*/ - if (l.extendA && l.extendB) - abort("complementary: the parameter is not a half-line."); - point origin = l.extendA ? l.B : l.A; - point ptdir = l.extendA ? - rotate(180, l.B) * l.A : rotate(180, l.A) * l.B; - return line(origin, false, ptdir); + if (l.extendA && l.extendB) + abort("complementary: the parameter is not a half-line."); + point origin = l.extendA ? l.B : l.A; + point ptdir = l.extendA ? + rotate(180, l.B) * l.A : rotate(180, l.A) * l.B; + return line(origin, false, ptdir); } /*<asyxml><function type="line[]" signature="complementary(explicit segment)"><code></asyxml>*/ line[] complementary(explicit segment s) {/*<asyxml></code><documentation>Return the two half-lines of origin 's.A' and 's.B' respectively.</documentation></function></asyxml>*/ - line[] ol = new line[2]; - ol[0] = complementary(line(s.A, false, s.B)); - ol[1] = complementary(line(s.A, s.B, false)); - return ol; + line[] ol = new line[2]; + ol[0] = complementary(line(s.A, false, s.B)); + ol[1] = complementary(line(s.A, s.B, false)); + return ol; } /*<asyxml><function type="line" signature="Ox(coordsys)"><code></asyxml>*/ line Ox(coordsys R = currentcoordsys) {/*<asyxml></code><documentation>Return the x-axis of 'R'.</documentation></function></asyxml>*/ - return line(point(R, (0, 0)), point(R, E)); + return line(point(R, (0, 0)), point(R, E)); } /*<asyxml><constant type = "line" signature="Ox"><code></asyxml>*/ restricted line Ox = Ox();/*<asyxml></code><documentation>the x-axis of - the default coordinate system.</documentation></constant></asyxml>*/ + the default coordinate system.</documentation></constant></asyxml>*/ /*<asyxml><function type="line" signature="Oy(coordsys)"><code></asyxml>*/ line Oy(coordsys R = currentcoordsys) @@ -1782,7 +1782,7 @@ line Oy(coordsys R = currentcoordsys) } /*<asyxml><constant type = "line" signature="Oy"><code></asyxml>*/ restricted line Oy = Oy();/*<asyxml></code><documentation>the y-axis of - the default coordinate system.</documentation></constant></asyxml>*/ + the default coordinate system.</documentation></constant></asyxml>*/ /*<asyxml><function type="line" signature="line(real,point)"><code></asyxml>*/ line line(real a, point A = point(currentcoordsys, (0, 0))) @@ -1826,7 +1826,7 @@ line vline(coordsys R = currentcoordsys) } /*<asyxml><constant type = "line" signature="vline"><code></asyxml>*/ restricted line vline = vline();/*<asyxml></code><documentation>The vertical line in the current coordinate system passing - through the origin of this system.</documentation></constant></asyxml>*/ + through the origin of this system.</documentation></constant></asyxml>*/ /*<asyxml><function type="line" signature="hline(coordsys)"><code></asyxml>*/ line hline(coordsys R = currentcoordsys) @@ -1837,7 +1837,7 @@ line hline(coordsys R = currentcoordsys) } /*<asyxml><constant type = "line" signature="hline"><code></asyxml>*/ line hline = hline();/*<asyxml></code><documentation>The horizontal line in the current coordinate system passing - through the origin of this system.</documentation></constant></asyxml>*/ + through the origin of this system.</documentation></constant></asyxml>*/ /*<asyxml><function type="line" signature="changecoordsys(coordsys,line)"><code></asyxml>*/ line changecoordsys(coordsys R, line l) @@ -2358,11 +2358,11 @@ bqe bqe(coordsys R = currentcoordsys, bqe changecoordsys(coordsys R, bqe bqe) {/*<asyxml></code><documentation>Returns the bivariate quadratic equation relatively to 'R'.</documentation></function></asyxml>*/ pair i = coordinates(changecoordsys(R, vector(defaultcoordsys, - bqe.coordsys.i))); + bqe.coordsys.i))); pair j = coordinates(changecoordsys(R, vector(defaultcoordsys, - bqe.coordsys.j))); + bqe.coordsys.j))); pair O = coordinates(changecoordsys(R, point(defaultcoordsys, - bqe.coordsys.O))); + bqe.coordsys.O))); real a = bqe.a[0], b = bqe.a[1], c = bqe.a[2], d = bqe.a[3], f = bqe.a[4], g = bqe.a[5]; real ux = i.x, uy = i.y; real vx = j.x, vy = j.y; @@ -2372,14 +2372,14 @@ bqe changecoordsys(coordsys R, bqe bqe) real bpp = (-2 * a * vx * vy + b * ux * vy + b * uy * vx - 2 * c * ux * uy)/D^2; real cp = (a * vx^2 - b * ux * vx + c * ux^2)/D^2; real dp = (-2a * ox * vy^2 + 2a * oy * vx * vy + 2b * ox * uy * vy- - b * oy * ux * vy - b * oy * uy * vx - 2c * ox * uy^2 + 2c * oy * uy * ux)/D^2+ + b * oy * ux * vy - b * oy * uy * vx - 2c * ox * uy^2 + 2c * oy * uy * ux)/D^2+ (d * vy - f * uy)/D; real fp = (2a * ox * vx * vy - b * ox * ux * vy - 2a * oy * vx^2- - b * ox * uy * vx + 2 * b * oy * ux * vx + 2c * ox * ux * uy - 2c * oy * ux^2)/D^2+ + b * ox * uy * vx + 2 * b * oy * ux * vx + 2c * ox * ux * uy - 2c * oy * ux^2)/D^2+ (f * ux - d * vx)/D; g = (a * ox^2 * vy^2 - 2a * ox * oy * vx * vy - b * ox^2 * uy * vy + b * ox * oy * ux * vy+ - a * oy^2 * vx^2 + b * ox * oy * uy * vx - b * oy^2 * ux * vx + c * ox^2 * uy^2- - 2 * c * ox * oy * ux * uy + c * oy^2 * ux^2)/D^2+ + a * oy^2 * vx^2 + b * ox * oy * uy * vx - b * oy^2 * ux * vx + c * ox^2 * uy^2- + 2 * c * ox * oy * ux * uy + c * oy^2 * ux^2)/D^2+ (d * oy * vx + f * ox * uy - d * ox * vy - f * oy * ux)/D + g; bqe obqe; obqe.a = approximate(new real[] {ap, bpp, cp, dp, fp, g}); @@ -2636,7 +2636,7 @@ struct hyperbola this.b = a * sqrt(this.e^2 - 1); this.p = a * (this.e^2 - 1); point A = this.C + (a^2/this.c) * unit(P[0]-this.C); - this.D1 = line(A, A + rotateO(90) * unit(A - this.C)); + this.D1 = line(A, A + rotate(90,this.C.coordsys.O) * unit(A - this.C)); this.D2 = reverse(rotate(180, C) * D1); this.V1 = C + a * unit(F1 - C); this.V2 = C + a * unit(F2 - C); @@ -3073,8 +3073,8 @@ parabola parabola(point M1, point M2, point M3, line l) real gle = degrees(l); coordsys Rp = cartesiansystem(R.O, rotate(gle) * R.i, rotate(gle) * R.j); pts = new pair[] {coordinates(changecoordsys(Rp, M1)), - coordinates(changecoordsys(Rp, M2)), - coordinates(changecoordsys(Rp, M3))}; + coordinates(changecoordsys(Rp, M2)), + coordinates(changecoordsys(Rp, M3))}; real[][] M; real[] x; for (int i = 0; i < 3; ++i) { @@ -3560,10 +3560,10 @@ path arcfromcenter(explicit conic co, real angle1, real angle2, path g; if(co.e < 1) g = arcfromcenter((ellipse)co, angle1, - angle2, direction, n); + angle2, direction, n); else if(co.e > 1) g = arcfromcenter((hyperbola)co, angle1, - angle2, n, direction); + angle2, n, direction); else abort("arcfromcenter: does not exist for a parabola."); return g; } @@ -3590,8 +3590,8 @@ bqe equation(ellipse el) } real[] coef = solve(M, x); bqe bqe = changecoordsys(coordsys(el), - bqe(defaultcoordsys, - 1, coef[0], coef[1], coef[2], coef[3], coef[4])); + bqe(defaultcoordsys, + 1, coef[0], coef[1], coef[2], coef[3], coef[4])); bqe.a = approximate(bqe.a); return bqe; } @@ -4038,8 +4038,8 @@ real arclength(ellipse el, real angle1, real angle2, // given form the center of the ellipse. real gle = atan(el.a * tan(radians(a))/el.b)+ pi * (((a%90 == 0 && a != 0) ? floor(a/90) - 1 : floor(a/90)) - - ((a%180 == 0) ? 0 : floor(a/180)) - - (a%360 == 0 ? floor(a/(360)) : 0)); + ((a%180 == 0) ? 0 : floor(a/180)) - + (a%360 == 0 ? floor(a/(360)) : 0)); /* // Uncomment to visualize the used branches unitsize(2cm, 1cm); import graph; @@ -4076,7 +4076,7 @@ real arclength(parabola p, real angle) {/*<asyxml></code><documentation>Return the arclength from 180 to 'angle' given from focus in the canonical coordinate system of 'p'.</documentation></function></asyxml>*/ real a = p.a; /* In canonicalcartesiansystem(p) the equation of p - is x = y^2/(4a) */ + is x = y^2/(4a) */ // integrate(sqrt(1 + (x/(2 * a))^2), x); real S(real t){return 0.5 * t * sqrt(1 + t^2/(4 * a^2)) + a * asinh(t/(2 * a));} real R(real gle){return 2 * a/(1 - Cos(gle));} @@ -4110,7 +4110,7 @@ struct abscissa real x;/*<asyxml></code><documentation>The abscissa value.</documentation></property><property type = "int" signature="system"><code></asyxml>*/ int system;/*<asyxml></code><documentation>0 = relativesystem; 1 = curvilinearsystem; 2 = angularsystem; 3 = nodesystem</documentation></property><property type = "polarconicroutine" signature="polarconicroutine"><code></asyxml>*/ polarconicroutine polarconicroutine = fromCenter;/*<asyxml></code><documentation>The routine used with angular system and two foci conic section. - Possible values are 'formCenter' and 'formFocus'.</documentation></property></asyxml>*/ + Possible values are 'formCenter' and 'formFocus'.</documentation></property></asyxml>*/ /*<asyxml><method type = "abscissa" signature="copy()"><code></asyxml>*/ abscissa copy() {/*<asyxml></code><documentation>Return a copy of this abscissa.</documentation></method></asyxml>*/ @@ -4800,7 +4800,7 @@ struct arc { restricted real angle1, angle2;/*<asyxml></code><documentation>Values (in degrees) in ]-360, 360[.</documentation></property><property type = "bool" signature="direction"><code></asyxml>*/ bool direction = CCW;/*<asyxml></code><documentation>The arc will be drawn from 'angle1' to 'angle2' rotating in the direction 'direction'.</documentation></property><property type = "polarconicroutine" signature="polarconicroutine"><code></asyxml>*/ polarconicroutine polarconicroutine = currentpolarconicroutine;/*<asyxml></code><documentation>The routine to which the angles refer. - If 'el' is a circle 'fromCenter' is always used.</documentation></property></asyxml>*/ + If 'el' is a circle 'fromCenter' is always used.</documentation></property></asyxml>*/ /*<asyxml><method type = "void" signature="setangles(real,real,real)"><code></asyxml>*/ void setangles(real a0, real a1, real a2) @@ -6478,7 +6478,7 @@ point[] intersectionpoints(line l, circle c) coordsys Rc = cartesiansystem(c.C, (1, 0), (0, 1)); line ll = changecoordsys(Rc, l); pair[] P = intersectionpoints(ll.A.coordinates, ll.B.coordinates, - 1, 0, 1, 0, 0, -c.r^2); + 1, 0, 1, 0, 0, -c.r^2); for (int i = 0; i < P.length; ++i) { point inter = changecoordsys(R, point(Rc, P[i])); if(inter @ l) op.push(inter); @@ -6518,7 +6518,7 @@ point[] intersectionpoints(line l, ellipse el) coordsys Rc = canonicalcartesiansystem(el); line ll = changecoordsys(Rc, l); pair[] P = intersectionpoints(ll.A.coordinates, ll.B.coordinates, - 1/el.a^2, 0, 1/el.b^2, 0, 0, -1); + 1/el.a^2, 0, 1/el.b^2, 0, 0, -1); for (int i = 0; i < P.length; ++i) { point inter = changecoordsys(R, point(Rc, P[i])); if(inter @ l) op.push(inter); @@ -6575,7 +6575,7 @@ point[] intersectionpoints(line l, hyperbola h) point[] op; coordsys R = coordsys(h); point A = intersectionpoint(l, h.A1), B = intersectionpoint(l, h.A2); - point M = midpoint(segment(A, B)); + point M = 0.5*(A + B); bool tgt = Finite(M) ? M @ h : false; if(tgt) { if(M @ l) op.push(M); @@ -6644,7 +6644,7 @@ point[] intersectionpoints(bqe bqe1, bqe bqe2) if(abs(b[4]) > e) { real D=b[4]^2; c=new real[] {(a[0]*b[4]^2+a[2]*b[3]^2+ - (-2*a[2]*a[3])*b[3]+a[2]*a[3]^2)/D, + (-2*a[2]*a[3])*b[3]+a[2]*a[3]^2)/D, -((-2*a[2]*b[3]+2*a[2]*a[3])*b[5]-a[3]*b[4]^2+ (2*a[2]*a[5])*b[3])/D,a[2]*(a[5]-b[5])^2/D+a[5]}; x=quadraticroots(c[0],c[1],c[2]); diff --git a/Build/source/utils/asymptote/base/graph.asy b/Build/source/utils/asymptote/base/graph.asy index 7498ce8bfdd..46a5d7d0647 100644 --- a/Build/source/utils/asymptote/base/graph.asy +++ b/Build/source/utils/asymptote/base/graph.asy @@ -42,14 +42,14 @@ scaleT Broken(real a, real b, bool automin=false, bool automax=automin) return x-skip; } real Tinv(real x) { - if(x <= a) return x; - return x+skip; + if(x <= a) return x; + return x+skip; } return scaleT(T,Tinv,logarithmic=false,automin,automax); } // A "broken" logarithmic axis omitting the segment [a,b], where a and b are -// automatically rounded to the nearest integral power of the base. +// automatically rounded to the nearest integral power of the base. scaleT BrokenLog(real a, real b, bool automin=false, bool automax=automin) { real A=round(Log.T(a)); @@ -92,7 +92,7 @@ void scale(picture pic=currentpicture, bool xautoscale=false, Linear(zautoscale,zautoscale)); } -struct scientific +struct scientific { int sign; real mantissa; @@ -108,7 +108,7 @@ struct scientific } // Convert x to scientific notation -scientific scientific(real x) +scientific scientific(real x) { scientific s; s.sign=sgn(x); @@ -154,7 +154,7 @@ int[] divisors(int a, int b) real upscale(real b, real a) { - if(b <= 5) b=5; + if(b <= 5) b=5; else if (b > 10 && a >= 0 && b <= 12) b=12; else if (b > 10 && (a >= 0 || 15 % -a == 0) && b <= 15) b=15; else b=ceil(b/10)*10; @@ -182,7 +182,7 @@ bounds autoscale(real Min, real Max, scaleT scale=Linear) if(Min > 0) {Min=0; Max *= 2;} else {Min *= 2; Max=0;} } - + int sign; if(Min < 0 && Max <= 0) {real temp=-Min; Min=-Max; Max=temp; sign=-1;} else sign=1; @@ -203,7 +203,7 @@ bounds autoscale(real Min, real Max, scaleT scale=Linear) while((b-a)*10.0^exp > 10*(Max-Min)) zoom(); - + real bsave=b; if(b-a > (a >= 0 ? 8 : 6)) { b=upscale(b,a); @@ -211,11 +211,11 @@ bounds autoscale(real Min, real Max, scaleT scale=Linear) if(a <= 5) a=0; else a=floor(a/10)*10; } else a=-upscale(-a,-1); } - + // Redo b in case the value of a has changed if(bsave-a > (a >= 0 ? 8 : 6)) b=upscale(bsave,a); - + if(sign == -1) {real temp=-a; a=-b; b=temp;} real Scale=10.0^exp; m.min=scale.T(a*Scale); @@ -266,7 +266,7 @@ ticklabel LogFormat(int base) { ticklabel LogFormat=LogFormat(10); ticklabel DefaultLogFormat=DefaultLogFormat(10); - + // The default direction specifier. pair zero(real) {return 0;} @@ -275,7 +275,7 @@ struct ticklocate { autoscaleT S; // Autoscaling transformation. pair dir(real t); // Absolute 2D tick direction. triple dir3(real t); // Absolute 3D tick direction. - real time(real v); // Returns the time corresponding to the value v. + real time(real v); // Returns the time corresponding to the value v. ticklocate copy() { ticklocate T=new ticklocate; T.a=a; @@ -289,7 +289,7 @@ struct ticklocate { } autoscaleT defaultS; - + typedef real valuetime(real); valuetime linear(scalefcn S=identity, real Min, real Max) @@ -300,7 +300,7 @@ valuetime linear(scalefcn S=identity, real Min, real Max) ticklocate ticklocate(real a, real b, autoscaleT S=defaultS, real tickmin=-infinity, real tickmax=infinity, - real time(real)=null, pair dir(real)=zero) + real time(real)=null, pair dir(real)=zero) { if((valuetime) time == null) time=linear(S.T(),a,b); ticklocate locate; @@ -313,13 +313,13 @@ ticklocate ticklocate(real a, real b, autoscaleT S=defaultS, locate.dir=dir; return locate; } - + private struct locateT { real t; // tick location time pair Z; // tick location in frame coordinates pair pathdir; // path direction in frame coordinates pair dir; // tick direction in frame coordinates - + void dir(transform T, path g, ticklocate locate, real t) { pathdir=unit(shiftless(T)*dir(g,t)); pair Dir=locate.dir(t); @@ -333,7 +333,7 @@ private struct locateT { } } -pair ticklabelshift(pair align, pen p=currentpen) +pair ticklabelshift(pair align, pen p=currentpen) { return 0.25*unit(align)*labelmargin(p); } @@ -347,7 +347,7 @@ void drawtick(frame f, transform T, path g, path g2, ticklocate locate, locate2.calc(T,g2,locate,val); draw(f,locate1.Z--locate2.Z,p); } else - if(sign == 0) + if(sign == 0) draw(f,locate1.Z-Size*locate1.dir--locate1.Z+Size*locate1.dir,p); else draw(f,locate1.Z--locate1.Z+Size*sign*locate1.dir,p); @@ -388,10 +388,10 @@ pair labeltick(frame d, transform T, path g, ticklocate locate, real val, label(d,F.T*baseline(s,baselinetemplate),locate1.Z+shift,align,F.p, F.filltype); return locate1.pathdir; -} +} // Add axis label L to frame f. -void labelaxis(frame f, transform T, Label L, path g, +void labelaxis(frame f, transform T, Label L, path g, ticklocate locate=null, int sign=1, bool ticklabels=false) { Label L0=L.copy(); @@ -403,7 +403,7 @@ void labelaxis(frame f, transform T, Label L, path g, locateT locate1; locate1.dir(T,g,locate,t); L0.align(L0.align,unit(-sgn(dot(sign*locate1.dir,perp))*perp)); - } + } pair align=L0.align.dir; if(L0.align.relative) align *= -perp; pair alignperp=dot(align,perp)*perp; @@ -477,7 +477,7 @@ bool axiscoverage(int N, transform T, path g, ticklocate locate, real Step, // Check the tick coverage of a logarithmic axis. bool logaxiscoverage(int N, transform T, path g, ticklocate locate, pair side, - int sign, real Size, Label F, ticklabel ticklabel, + int sign, real Size, Label F, ticklabel ticklabel, real limit, int first, int last) { bool loop=cyclic(g); @@ -525,7 +525,7 @@ string autoformat(string format="", real norm ... real[] a) int n=0; bool Fixed=find(a >= 1e4-epsilon | (a > 0 & a <= 1e-4-epsilon)) < 0; - + string Format=defaultformat(4,fixed=Fixed); if(Fixed && n < 4) { @@ -576,13 +576,13 @@ tickvalues generateticks(int sign, Label F="", ticklabel ticklabel=null, if(size == 0) size=ticksize; F=F.copy(); F.p(p); - + if(F.align.dir != 0) side=F.align.dir; else if(side == 0) side=((sign == 1) ? left : right); - + bool ticklabels=false; path G=T*g; - + if(!locate.S.scale.logarithmic) { real a=locate.S.Tinv(locate.a); real b=locate.S.Tinv(locate.b); @@ -594,15 +594,15 @@ tickvalues generateticks(int sign, Label F="", ticklabel ticklabel=null, if(a > b) {real temp=a; a=b; b=temp;} if(b-a < 100.0*epsilon*norm) b=a; - + bool autotick=Step == 0 && N == 0; - - real tickmin=finite(locate.S.tickMin) && (autotick || locate.S.automin) ? + + real tickmin=finite(locate.S.tickMin) && (autotick || locate.S.automin) ? locate.S.Tinv(locate.S.tickMin) : a; real tickmax=finite(locate.S.tickMax) && (autotick || locate.S.automax) ? locate.S.Tinv(locate.S.tickMax) : b; if(tickmin > tickmax) {real temp=tickmin; tickmin=tickmax; tickmax=temp;} - + real inStep=Step; bool calcStep=true; @@ -630,7 +630,7 @@ tickvalues generateticks(int sign, Label F="", ticklabel ticklabel=null, // Try using 2 ticks (otherwise 1); int div=divisor[d+1]; Step=quotient(div,2)*len/div; - calcStep=false; + calcStep=false; if(axiscoverage(2,T,g,locate,Step,side,sign,Size,F,ticklabel, norm,limit)) N=2; else Step=len; @@ -650,7 +650,7 @@ tickvalues generateticks(int sign, Label F="", ticklabel ticklabel=null, } } } - + if(inStep != 0 && !locate.S.automin) { tickmin=floor(tickmin/Step)*Step; len=tickmax-tickmin; @@ -661,13 +661,13 @@ tickvalues generateticks(int sign, Label F="", ticklabel ticklabel=null, if(N == 0) N=(int) (len/Step); else Step=len/N; } - + if(n == 0) { if(step != 0) n=ceil(Step/step); } else step=Step/n; - + b += epsilon*norm; - + if(Size > 0) { for(int i=0; i <= N; ++i) { real val=tickmin+i*Step; @@ -684,22 +684,22 @@ tickvalues generateticks(int sign, Label F="", ticklabel ticklabel=null, } } } - + } else { // Logarithmic string format=F.s; if(F.s == "%") F.s=""; int base=round(locate.S.scale.Tinv(1)); - if(ticklabel == null) + if(ticklabel == null) ticklabel=format == "%" ? Format("") : DefaultLogFormat(base); real a=locate.S.postscale.Tinv(locate.a); real b=locate.S.postscale.Tinv(locate.b); if(a > b) {real temp=a; a=b; b=temp;} - + int first=floor(a-epsilon); int last=ceil(b+epsilon); - + if(N == 0) { N=1; while(N <= last-first) { @@ -708,10 +708,10 @@ tickvalues generateticks(int sign, Label F="", ticklabel ticklabel=null, ++N; } } - + if(N <= 2 && n == 0) n=base; tickvalues.N=N; - + if(N > 0) { for(int i=first-1; i <= last+1; ++i) { if(i >= a && i <= b) @@ -725,14 +725,14 @@ tickvalues generateticks(int sign, Label F="", ticklabel ticklabel=null, } } } - } + } return tickvalues; } // Signature of routines that draw labelled paths with ticks and tick labels. typedef void ticks(frame, transform, Label, pair, path, path, pen, arrowbar, margin, ticklocate, int[], bool opposite=false); - + // Tick construction routine for a user-specified array of tick values. ticks Ticks(int sign, Label F="", ticklabel ticklabel=null, bool beginlabel=true, bool endlabel=true, @@ -741,7 +741,7 @@ ticks Ticks(int sign, Label F="", ticklabel ticklabel=null, real Size=0, real size=0, bool extend=false, pen pTick=nullpen, pen ptick=nullpen) { - return new void(frame f, transform t, Label L, pair side, path g, path g2, + return new void(frame f, transform t, Label L, pair side, path g, path g2, pen p, arrowbar arrow, margin margin, ticklocate locate, int[] divisor, bool opposite) { // Use local copy of context variables: @@ -749,28 +749,28 @@ ticks Ticks(int sign, Label F="", ticklabel ticklabel=null, pen pTick=pTick; pen ptick=ptick; ticklabel ticklabel=ticklabel; - + real Size=Size; real size=size; if(Size == 0) Size=Ticksize; if(size == 0) size=ticksize; - + Label L=L.copy(); Label F=F.copy(); L.p(p); F.p(p); if(pTick == nullpen) pTick=p; if(ptick == nullpen) ptick=pTick; - + if(F.align.dir != 0) side=F.align.dir; else if(side == 0) side=F.T*((sign == 1) ? left : right); - + bool ticklabels=false; path G=t*g; path G2=t*g2; - + scalefcn T; - + real a,b; if(locate.S.scale.logarithmic) { a=locate.S.postscale.Tinv(locate.a); @@ -781,11 +781,11 @@ ticks Ticks(int sign, Label F="", ticklabel ticklabel=null, b=locate.S.Tinv(locate.b); T=identity; } - + if(a > b) {real temp=a; a=b; b=temp;} real norm=max(abs(a),abs(b)); - + string format=autoformat(F.s,norm...Ticks); if(F.s == "%") F.s=""; if(ticklabel == null) { @@ -809,7 +809,7 @@ ticks Ticks(int sign, Label F="", ticklabel ticklabel=null, drawtick(f,t,g,g2,locate,val,size,sign,ptick,extend); } endgroup(f); - + if(N == 0) N=1; if(Size > 0 && !opposite) { for(int i=(beginlabel ? 0 : 1); @@ -821,7 +821,7 @@ ticks Ticks(int sign, Label F="", ticklabel ticklabel=null, } } } - if(L.s != "" && !opposite) + if(L.s != "" && !opposite) labelaxis(f,t,L,G,locate,sign,ticklabels); }; } @@ -832,7 +832,7 @@ tickvalues None(tickvalues v) {return v;} // Tickmodifier that removes all ticks in the intervals [a[i],b[i]]. tickmodifier OmitTickIntervals(real[] a, real[] b) { - return new tickvalues(tickvalues v) { + return new tickvalues(tickvalues v) { if(a.length != b.length) abort(differentlengths); void omit(real[] A) { if(A.length != 0) { @@ -939,8 +939,8 @@ ticks Ticks(Label format="", ticklabel ticklabel=null, begin,end,modify,Size,size,extend,pTick,ptick); } -ticks LeftTicks(Label format="", ticklabel ticklabel=null, - bool beginlabel=true, bool endlabel=true, +ticks LeftTicks(Label format="", ticklabel ticklabel=null, + bool beginlabel=true, bool endlabel=true, real[] Ticks, real[] ticks=new real[], real Size=0, real size=0, bool extend=false, pen pTick=nullpen, pen ptick=nullpen) @@ -949,8 +949,8 @@ ticks LeftTicks(Label format="", ticklabel ticklabel=null, Ticks,ticks,Size,size,extend,pTick,ptick); } -ticks RightTicks(Label format="", ticklabel ticklabel=null, - bool beginlabel=true, bool endlabel=true, +ticks RightTicks(Label format="", ticklabel ticklabel=null, + bool beginlabel=true, bool endlabel=true, real[] Ticks, real[] ticks=new real[], real Size=0, real size=0, bool extend=false, pen pTick=nullpen, pen ptick=nullpen) @@ -959,8 +959,8 @@ ticks RightTicks(Label format="", ticklabel ticklabel=null, Ticks,ticks,Size,size,extend,pTick,ptick); } -ticks Ticks(Label format="", ticklabel ticklabel=null, - bool beginlabel=true, bool endlabel=true, +ticks Ticks(Label format="", ticklabel ticklabel=null, + bool beginlabel=true, bool endlabel=true, real[] Ticks, real[] ticks=new real[], real Size=0, real size=0, bool extend=false, pen pTick=nullpen, pen ptick=nullpen) @@ -978,18 +978,18 @@ pair tickMin(picture pic) { return minbound(pic.userMin(),(pic.scale.x.tickMin,pic.scale.y.tickMin)); } - + pair tickMax(picture pic) { return maxbound(pic.userMax(),(pic.scale.x.tickMax,pic.scale.y.tickMax)); } - + int Min=-1; int Value=0; int Max=1; int Both=2; -// Structure used to communicate axis and autoscale settings to tick routines. +// Structure used to communicate axis and autoscale settings to tick routines. struct axisT { int type; // -1 = min, 0 = given value, 1 = max, 2 = min/max int type2; // for 3D axis @@ -1062,7 +1062,7 @@ axis Right(bool extend=false) }; } -axis LeftRight(bool extend=false) +axis LeftRight(bool extend=false) { return new void(picture pic, axisT axis) { axis.type=Both; @@ -1134,7 +1134,7 @@ YZero=YZero(); void axis(picture pic=currentpicture, Label L="", path g, path g2=nullpath, pen p=currentpen, ticks ticks, ticklocate locate, arrowbar arrow=None, margin margin=NoMargin, - int[] divisor=new int[], bool above=false, bool opposite=false) + int[] divisor=new int[], bool above=false, bool opposite=false) { Label L=L.copy(); real t=reltime(g,0.5); @@ -1146,9 +1146,9 @@ void axis(picture pic=currentpicture, Label L="", path g, path g2=nullpath, ticks(d,t,L,0,g,g2,p,arrow,margin,locate,divisor,opposite); (above ? add : prepend)(f,t*T*inverse(t)*d); }); - + pic.addPath(g,p); - + if(L.s != "") { frame f; Label L0=L.copy(); @@ -1195,7 +1195,7 @@ void xaxisAt(picture pic=currentpicture, Label L="", axis axis, pic.scale.x.tickMax=mx.max; divisor=mx.divisor; } - + real fuzz=epsilon*max(abs(a.x),abs(b.x)); a -= (fuzz,0); b += (fuzz,0); @@ -1211,8 +1211,8 @@ void xaxisAt(picture pic=currentpicture, Label L="", axis axis, y2=pic.scale.y.automax() ? tickMax(pic).y : pic.userMax().y; y=opposite ? y2 : (pic.scale.y.automin() ? tickMin(pic).y : pic.userMin().y); - } - else if(type == Min) + } + else if(type == Min) y=pic.scale.y.automin() ? tickMin(pic).y : pic.userMin().y; else if(type == Max) y=pic.scale.y.automax() ? tickMax(pic).y : pic.userMax().y; @@ -1229,7 +1229,7 @@ void xaxisAt(picture pic=currentpicture, Label L="", axis axis, pic.addPoint(a,min(p)); pic.addPoint(a,max(p)); } - + if(finite(b)) { pic.addPoint(b,min(p)); pic.addPoint(b,max(p)); @@ -1299,13 +1299,13 @@ void yaxisAt(picture pic=currentpicture, Label L="", axis axis, ticklocate(a.y,b.y,pic.scale.y),divisor,opposite); (above ? add : prepend)(f,t*T*tinv*d); }); - + void bounds() { if(type == Both) { x2=pic.scale.x.automax() ? tickMax(pic).x : pic.userMax().x; - x=opposite ? x2 : + x=opposite ? x2 : (pic.scale.x.automin() ? tickMin(pic).x : pic.userMin().x); - } else if(type == Min) + } else if(type == Min) x=pic.scale.x.automin() ? tickMin(pic).x : pic.userMin().x; else if(type == Max) x=pic.scale.x.automax() ? tickMax(pic).x : pic.userMax().x; @@ -1317,17 +1317,17 @@ void yaxisAt(picture pic=currentpicture, Label L="", axis axis, pair b=(x,Ymax); pair a2=(x2,Ymin); pair b2=(x2,Ymax); - + if(finite(a)) { pic.addPoint(a,min(p)); pic.addPoint(a,max(p)); } - + if(finite(b)) { pic.addPoint(b,min(p)); pic.addPoint(b,max(p)); } - + if(finite(a) && finite(b)) { frame d; ticks(d,pic.scaling(warn=false),L,side, @@ -1361,32 +1361,32 @@ void xlimits(picture pic=currentpicture, real min=-infinity, real max=infinity, bool crop=NoCrop) { if(min > max) return; - + pic.scale.x.automin=min <= -infinity; pic.scale.x.automax=max >= infinity; - + bounds mx; if(pic.scale.x.automin() || pic.scale.x.automax()) mx=autoscale(pic.userMin().x,pic.userMax().x,pic.scale.x.scale); - + if(pic.scale.x.automin) { if(pic.scale.x.automin()) pic.userMinx(mx.min); } else pic.userMinx(min(pic.scale.x.T(min),pic.scale.x.T(max))); - + if(pic.scale.x.automax) { if(pic.scale.x.automax()) pic.userMaxx(mx.max); } else pic.userMaxx(max(pic.scale.x.T(min),pic.scale.x.T(max))); - + if(crop) { pair userMin=pic.userMin(); pair userMax=pic.userMax(); pic.bounds.xclip(userMin.x,userMax.x); pic.clip(userMin, userMax, - new void (frame f, transform t, transform T, pair, pair) { - frame Tinvf=T == identity() ? f : t*inverse(T)*inverse(t)*f; - clip(f,T*box(((t*userMin).x,(min(Tinvf)).y), - ((t*userMax).x,(max(Tinvf)).y))); - }); + new void (frame f, transform t, transform T, pair, pair) { + frame Tinvf=T == identity() ? f : t*inverse(T)*inverse(t)*f; + clip(f,T*box(((t*userMin).x,(min(Tinvf)).y), + ((t*userMax).x,(max(Tinvf)).y))); + }); } } @@ -1395,37 +1395,37 @@ void ylimits(picture pic=currentpicture, real min=-infinity, real max=infinity, bool crop=NoCrop) { if(min > max) return; - + pic.scale.y.automin=min <= -infinity; pic.scale.y.automax=max >= infinity; - + bounds my; if(pic.scale.y.automin() || pic.scale.y.automax()) my=autoscale(pic.userMin().y,pic.userMax().y,pic.scale.y.scale); - + if(pic.scale.y.automin) { if(pic.scale.y.automin()) pic.userMiny(my.min); } else pic.userMiny(min(pic.scale.y.T(min),pic.scale.y.T(max))); - + if(pic.scale.y.automax) { if(pic.scale.y.automax()) pic.userMaxy(my.max); } else pic.userMaxy(max(pic.scale.y.T(min),pic.scale.y.T(max))); - + if(crop) { pair userMin=pic.userMin(); pair userMax=pic.userMax(); pic.bounds.yclip(userMin.y,userMax.y); - pic.clip(userMin, userMax, - new void (frame f, transform t, transform T, pair, pair) { - frame Tinvf=T == identity() ? f : t*inverse(T)*inverse(t)*f; - clip(f,T*box(((min(Tinvf)).x,(t*userMin).y), - ((max(Tinvf)).x,(t*userMax).y))); - }); + pic.clip(userMin, userMax, + new void (frame f, transform t, transform T, pair, pair) { + frame Tinvf=T == identity() ? f : t*inverse(T)*inverse(t)*f; + clip(f,T*box(((min(Tinvf)).x,(t*userMin).y), + ((max(Tinvf)).x,(t*userMax).y))); + }); } } // Crop a picture to the current user-space picture limits. -void crop(picture pic=currentpicture) +void crop(picture pic=currentpicture) { xlimits(pic,false); ylimits(pic,false); @@ -1441,14 +1441,14 @@ void limits(picture pic=currentpicture, pair min, pair max, bool crop=NoCrop) if(crop && pic.userSetx() && pic.userSety()) clip(pic,box(pic.userMin(),pic.userMax())); } - + // Internal routine to autoscale the user limits of a picture. void autoscale(picture pic=currentpicture, axis axis) { if(!pic.scale.set) { bounds mx,my; pic.scale.set=true; - + if(pic.userSetx()) { mx=autoscale(pic.userMin().x,pic.userMax().x,pic.scale.x.scale); if(pic.scale.x.scale.logarithmic && @@ -1459,7 +1459,7 @@ void autoscale(picture pic=currentpicture, axis axis) pic.userMaxx2(ceil(pic.userMax().x)); } } else {mx.min=mx.max=0; pic.scale.set=false;} - + if(pic.userSety()) { my=autoscale(pic.userMin().y,pic.userMax().y,pic.scale.y.scale); if(pic.scale.y.scale.logarithmic && @@ -1470,7 +1470,7 @@ void autoscale(picture pic=currentpicture, axis axis) pic.userMaxy2(ceil(pic.userMax().y)); } } else {my.min=my.max=0; pic.scale.set=false;} - + pic.scale.x.tickMin=mx.min; pic.scale.x.tickMax=mx.max; pic.scale.y.tickMin=my.min; @@ -1487,7 +1487,7 @@ void xaxis(picture pic=currentpicture, Label L="", axis axis=YZero, bool above=false) { if(xmin > xmax) return; - + if(pic.scale.x.automin && xmin > -infinity) pic.scale.x.automin=false; if(pic.scale.x.automax && xmax < infinity) pic.scale.x.automax=false; @@ -1495,20 +1495,20 @@ void xaxis(picture pic=currentpicture, Label L="", axis axis=YZero, axis(pic,axis); autoscale(pic,axis); } - + Label L=L.copy(); bool newticks=false; - + if(xmin != -infinity) { xmin=pic.scale.x.T(xmin); newticks=true; } - + if(xmax != infinity) { xmax=pic.scale.x.T(xmax); newticks=true; } - + if(newticks && pic.userSetx() && ticks != NoTicks) { if(xmin == -infinity) xmin=pic.userMin().x; if(xmax == infinity) xmax=pic.userMax().x; @@ -1517,16 +1517,16 @@ void xaxis(picture pic=currentpicture, Label L="", axis axis=YZero, pic.scale.x.tickMax=mx.max; axis.xdivisor=mx.divisor; } - + axis(pic,axis); - + if(xmin == -infinity && !axis.extend) { if(pic.scale.set) xmin=pic.scale.x.automin() ? pic.scale.x.tickMin : max(pic.scale.x.tickMin,pic.userMin().x); else xmin=pic.userMin().x; } - + if(xmax == infinity && !axis.extend) { if(pic.scale.set) xmax=pic.scale.x.automax() ? pic.scale.x.tickMax : @@ -1536,7 +1536,7 @@ void xaxis(picture pic=currentpicture, Label L="", axis axis=YZero, if(L.defaultposition) L.position(axis.position); L.align(L.align,axis.align); - + xaxisAt(pic,L,axis,xmin,xmax,p,ticks,arrow,margin,above); if(axis.type == Both) xaxisAt(pic,L,axis,xmin,xmax,p,ticks,arrow,margin,above,true); @@ -1552,25 +1552,25 @@ void yaxis(picture pic=currentpicture, Label L="", axis axis=XZero, if(pic.scale.y.automin && ymin > -infinity) pic.scale.y.automin=false; if(pic.scale.y.automax && ymax < infinity) pic.scale.y.automax=false; - + if(!pic.scale.set) { axis(pic,axis); autoscale(pic,axis); } - + Label L=L.copy(); bool newticks=false; - + if(ymin != -infinity) { ymin=pic.scale.y.T(ymin); newticks=true; } - + if(ymax != infinity) { ymax=pic.scale.y.T(ymax); newticks=true; } - + if(newticks && pic.userSety() && ticks != NoTicks) { if(ymin == -infinity) ymin=pic.userMin().y; if(ymax == infinity) ymax=pic.userMax().y; @@ -1579,17 +1579,17 @@ void yaxis(picture pic=currentpicture, Label L="", axis axis=XZero, pic.scale.y.tickMax=my.max; axis.ydivisor=my.divisor; } - + axis(pic,axis); - + if(ymin == -infinity && !axis.extend) { if(pic.scale.set) ymin=pic.scale.y.automin() ? pic.scale.y.tickMin : max(pic.scale.y.tickMin,pic.userMin().y); else ymin=pic.userMin().y; } - - + + if(ymax == infinity && !axis.extend) { if(pic.scale.set) ymax=pic.scale.y.automax() ? pic.scale.y.tickMax : @@ -1599,14 +1599,14 @@ void yaxis(picture pic=currentpicture, Label L="", axis axis=XZero, if(L.defaultposition) L.position(axis.position); L.align(L.align,axis.align); - + if(autorotate && L.defaulttransform) { frame f; add(f,Label(L.s,(0,0),L.p)); - if(length(max(f)-min(f)) > ylabelwidth*fontsize(L.p)) + if(length(max(f)-min(f)) > ylabelwidth*fontsize(L.p)) L.transform(rotate(90)); } - + yaxisAt(pic,L,axis,ymin,ymax,p,ticks,arrow,margin,above); if(axis.type == Both) yaxisAt(pic,L,axis,ymin,ymax,p,ticks,arrow,margin,above,true); @@ -1627,7 +1627,7 @@ void axes(picture pic=currentpicture, Label xlabel="", Label ylabel="", void xequals(picture pic=currentpicture, Label L="", real x, bool extend=false, real ymin=-infinity, real ymax=infinity, pen p=currentpen, ticks ticks=NoTicks, - arrowbar arrow=None, margin margin=NoMargin, bool above=true) + arrowbar arrow=None, margin margin=NoMargin, bool above=true) { yaxis(pic,L,XEquals(x,extend),ymin,ymax,p,ticks,arrow,margin,above); } @@ -1682,7 +1682,7 @@ void xtick(picture pic=currentpicture, real x, pair dir=N, } void ytick(picture pic=currentpicture, explicit pair z, pair dir=E, - real size=Ticksize, pen p=currentpen) + real size=Ticksize, pen p=currentpen) { tick(pic,z,dir,size,p); } @@ -1799,7 +1799,7 @@ picture secondaryX(picture primary=currentpicture, void f(picture)) bounds a=autoscale(pic.userMin().x,pic.userMax().x,pic.scale.x.scale); real bmin=pic.scale.x.automin() ? a.min : pic.userMin().x; real bmax=pic.scale.x.automax() ? a.max : pic.userMax().x; - + real denom=bmax-bmin; if(denom != 0) { pic.erase(); @@ -1849,7 +1849,7 @@ picture secondaryY(picture primary=currentpicture, void f(picture)) typedef guide graph(pair f(real), real, real, int); typedef guide[] multigraph(pair f(real), real, real, int); - + graph graph(interpolate join) { return new guide(pair f(real), real a, real b, int n) { @@ -2055,7 +2055,7 @@ guide[] graph(picture pic=currentpicture, real[] x, real[] y, bool3[] cond, } // Connect points in z into segments corresponding to consecutive true elements -// of b using interpolation operator join. +// of b using interpolation operator join. path[] segment(pair[] z, bool[] cond, interpolate join=operator --) { checkconditionlength(cond.length,z.length); @@ -2102,7 +2102,7 @@ void errorbar(picture pic, pair z, pair dp, pair dm, pen p=currentpen, if(dmy != dpy) draw(pic,Scale(pic,z+(0,dmy))--Scale(pic,z+(0,dpy)),p, Bars(size)); } - + void errorbars(picture pic=currentpicture, pair[] z, pair[] dp, pair[] dm={}, bool[] cond={}, pen p=currentpen, real size=0) { @@ -2157,13 +2157,13 @@ picture vectorfield(path vector(real), path g, int n, bool truesize=false, real x=(n == 1) ? 0.5 : i/(n-1); if(truesize) draw(relpoint(g,x),pic,vector(x),p,arrow); - else + else draw(pic,shift(relpoint(g,x))*vector(x),p,arrow,margin); } return pic; } -real maxlength(pair a, pair b, int nx, int ny) +real maxlength(pair a, pair b, int nx, int ny) { return min((b.x-a.x)/nx,(b.y-a.y)/ny); } diff --git a/Build/source/utils/asymptote/base/graph3.asy b/Build/source/utils/asymptote/base/graph3.asy index 1fe63490c9b..f690c6a3c10 100644 --- a/Build/source/utils/asymptote/base/graph3.asy +++ b/Build/source/utils/asymptote/base/graph3.asy @@ -9,7 +9,7 @@ direction3 Dir(triple dir) {return new triple(real) {return dir;};} ticklocate ticklocate(real a, real b, autoscaleT S=defaultS, real tickmin=-infinity, real tickmax=infinity, - real time(real)=null, direction3 dir) + real time(real)=null, direction3 dir) { if((valuetime) time == null) time=linear(S.T(),a,b); ticklocate locate; @@ -23,13 +23,13 @@ ticklocate ticklocate(real a, real b, autoscaleT S=defaultS, locate.dir3=dir; return locate; } - + private struct locateT { real t; // tick location time triple V; // tick location in frame coordinates triple pathdir; // path direction in frame coordinates triple dir; // tick direction in frame coordinates - + void dir(transform3 T, path3 g, ticklocate locate, real t) { pathdir=unit(shiftless(T)*dir(g,t)); triple Dir=locate.dir3(t); @@ -60,7 +60,7 @@ void drawtick(picture pic, transform3 T, path3 g, path3 g2, draw(pic,G,p,name="tick"); } -triple ticklabelshift(triple align, pen p=currentpen) +triple ticklabelshift(triple align, pen p=currentpen) { return 0.25*unit(align)*labelmargin(p); } @@ -100,10 +100,10 @@ void labeltick(picture pic, transform3 T, path3 g, if(s != "") label(pic,F.defaulttransform3 ? baseline(s,baselinetemplate) : F.T3*s,v, align,F.p); -} +} // Add axis label L to frame f. -void labelaxis(picture pic, transform3 T, Label L, path3 g, +void labelaxis(picture pic, transform3 T, Label L, path3 g, ticklocate locate=null, int sign=1, bool ticklabels=false) { triple m=pic.min(identity4); @@ -118,7 +118,7 @@ void labelaxis(picture pic, transform3 T, Label L, path3 g, picture F; if(L.align.dir3 == O) align=unit(invert(L.align.dir,v,P))*abs(L.align.dir); - + if(ticklabels && locate != null && piecewisestraight(g)) { locateT locate1; locate1.dir(T,g,locate,t); @@ -171,25 +171,25 @@ ticks3 Ticks3(int sign, Label F="", ticklabel ticklabel=null, pen pTick=pTick; pen ptick=ptick; ticklabel ticklabel=ticklabel; - + real Size=Size; real size=size; if(Size == 0) Size=Ticksize; if(size == 0) size=ticksize; - + Label L=L.copy(); Label F=F.copy(); L.p(p); F.p(p); if(pTick == nullpen) pTick=p; if(ptick == nullpen) ptick=pTick; - + bool ticklabels=false; path3 G=t*g; path3 G2=t*g2; - + scalefcn T; - + real a,b; if(locate.S.scale.logarithmic) { a=locate.S.postscale.Tinv(locate.a); @@ -200,11 +200,11 @@ ticks3 Ticks3(int sign, Label F="", ticklabel ticklabel=null, b=locate.S.Tinv(locate.b); T=identity; } - + if(a > b) {real temp=a; a=b; b=temp;} real norm=max(abs(a),abs(b)); - + string format=autoformat(F.s,norm...Ticks); if(F.s == "%") F.s=""; if(ticklabel == null) { @@ -324,8 +324,8 @@ ticks3 InOutTicks(Label format="", ticklabel ticklabel=null, begin,end,modify,Size,size,extend,pTick,ptick); } -ticks3 InTicks(Label format="", ticklabel ticklabel=null, - bool beginlabel=true, bool endlabel=true, +ticks3 InTicks(Label format="", ticklabel ticklabel=null, + bool beginlabel=true, bool endlabel=true, real[] Ticks, real[] ticks=new real[], real Size=0, real size=0, bool extend=false, pen pTick=nullpen, pen ptick=nullpen) @@ -334,8 +334,8 @@ ticks3 InTicks(Label format="", ticklabel ticklabel=null, Ticks,ticks,Size,size,extend,pTick,ptick); } -ticks3 OutTicks(Label format="", ticklabel ticklabel=null, - bool beginlabel=true, bool endlabel=true, +ticks3 OutTicks(Label format="", ticklabel ticklabel=null, + bool beginlabel=true, bool endlabel=true, real[] Ticks, real[] ticks=new real[], real Size=0, real size=0, bool extend=false, pen pTick=nullpen, pen ptick=nullpen) @@ -344,8 +344,8 @@ ticks3 OutTicks(Label format="", ticklabel ticklabel=null, Ticks,ticks,Size,size,extend,pTick,ptick); } -ticks3 InOutTicks(Label format="", ticklabel ticklabel=null, - bool beginlabel=true, bool endlabel=true, +ticks3 InOutTicks(Label format="", ticklabel ticklabel=null, + bool beginlabel=true, bool endlabel=true, real[] Ticks, real[] ticks=new real[], real Size=0, real size=0, bool extend=false, pen pTick=nullpen, pen ptick=nullpen) @@ -362,15 +362,15 @@ InOutTicks=InOutTicks(); triple tickMin3(picture pic) { return minbound(pic.userMin(),(pic.scale.x.tickMin,pic.scale.y.tickMin, - pic.scale.z.tickMin)); + pic.scale.z.tickMin)); } - + triple tickMax3(picture pic) { return maxbound(pic.userMax(),(pic.scale.x.tickMax,pic.scale.y.tickMax, - pic.scale.z.tickMax)); + pic.scale.z.tickMax)); } - + axis Bounds(int type=Both, int type2=Both, triple align=O, bool extend=false) { return new void(picture pic, axisT axis) { @@ -470,22 +470,22 @@ XYZero=XYZero(); void axis(picture pic=currentpicture, Label L="", path3 g, path3 g2=nullpath3, pen p=currentpen, ticks3 ticks, ticklocate locate, arrowbar3 arrow=None, margin3 margin=NoMargin3, - int[] divisor=new int[], bool above=false, bool opposite=false) + int[] divisor=new int[], bool above=false, bool opposite=false) { Label L=L.copy(); real t=reltime(g,0.5); if(L.defaultposition) L.position(t); divisor=copy(divisor); locate=locate.copy(); - + pic.add(new void (picture f, transform3 t, transform3 T, triple, triple) { picture d; ticks(d,t,L,g,g2,p,arrow,margin,locate,divisor,opposite,true); add(f,t*T*inverse(t)*d); },above=above); - + addPath(pic,g,p); - + if(L.s != "") { frame f; Label L0=L.copy(); @@ -552,7 +552,7 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis, y0=y2; z0=z; } - + triple a2=xmin == -infinity ? tinv*(lb.x-min3(p).x,ytrans(t,y0), ztrans(t,z0)) : (xmin,y0,z0); triple b2=xmax == infinity ? tinv*(rt.x-max3(p).x,ytrans(t,y0), @@ -564,7 +564,7 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis, pic.scale.x.tickMax=mx.max; divisor=mx.divisor; } - + triple fuzz=X*epsilon*max(abs(a.x),abs(b.x)); a -= fuzz; b += fuzz; @@ -584,7 +584,7 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis, y=pic.scale.y.automax() ? tickMax3(pic).y : pic.userMax().y; else if(type == Both) { y2=pic.scale.y.automax() ? tickMax3(pic).y : pic.userMax().y; - y=opposite ? y2 : + y=opposite ? y2 : (pic.scale.y.automin() ? tickMin3(pic).y : pic.userMin().y); } @@ -594,7 +594,7 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis, z=pic.scale.z.automax() ? tickMax3(pic).z : pic.userMax().z; else if(type2 == Both) { z2=pic.scale.z.automax() ? tickMax3(pic).z : pic.userMax().z; - z=opposite2 ? z2 : + z=opposite2 ? z2 : (pic.scale.z.automin() ? tickMin3(pic).z : pic.userMin().z); } @@ -610,7 +610,7 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis, pic.addPoint(a,min3(p)); pic.addPoint(a,max3(p)); } - + if(finite(b)) { pic.addPoint(b,min3(p)); pic.addPoint(b,max3(p)); @@ -650,7 +650,7 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis, pic.scale.x.bound.push(bounds); } -// An internal routine to draw an x axis at a particular y value. +// An internal routine to draw a y axis at a particular value. void yaxis3At(picture pic=currentpicture, Label L="", axis axis, real ymin=-infinity, real ymax=infinity, pen p=currentpen, ticks3 ticks=NoTicks3, @@ -685,19 +685,19 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis, x0=x2; z0=z; } - + triple a2=ymin == -infinity ? tinv*(xtrans(t,x0),lb.y-min3(p).y, ztrans(t,z0)) : (x0,ymin,z0); triple b2=ymax == infinity ? tinv*(xtrans(t,x0),rt.y-max3(p).y, ztrans(t,z0)) : (x0,ymax,z0); - + if(ymin == -infinity || ymax == infinity) { bounds my=autoscale(a.y,b.y,pic.scale.y.scale); pic.scale.y.tickMin=my.min; pic.scale.y.tickMax=my.max; divisor=my.divisor; } - + triple fuzz=Y*epsilon*max(abs(a.y),abs(b.y)); a -= fuzz; b += fuzz; @@ -717,7 +717,7 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis, x=pic.scale.x.automax() ? tickMax3(pic).x : pic.userMax().x; else if(type == Both) { x2=pic.scale.x.automax() ? tickMax3(pic).x : pic.userMax().x; - x=opposite ? x2 : + x=opposite ? x2 : (pic.scale.x.automin() ? tickMin3(pic).x : pic.userMin().x); } @@ -727,7 +727,7 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis, z=pic.scale.z.automax() ? tickMax3(pic).z : pic.userMax().z; else if(type2 == Both) { z2=pic.scale.z.automax() ? tickMax3(pic).z : pic.userMax().z; - z=opposite2 ? z2 : + z=opposite2 ? z2 : (pic.scale.z.automin() ? tickMin3(pic).z : pic.userMin().z); } @@ -743,7 +743,7 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis, pic.addPoint(a,min3(p)); pic.addPoint(a,max3(p)); } - + if(finite(b)) { pic.addPoint(b,min3(p)); pic.addPoint(b,max3(p)); @@ -783,7 +783,7 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis, pic.scale.y.bound.push(bounds); } -// An internal routine to draw an x axis at a particular y value. +// An internal routine to draw a z axis at a particular value. void zaxis3At(picture pic=currentpicture, Label L="", axis axis, real zmin=-infinity, real zmax=infinity, pen p=currentpen, ticks3 ticks=NoTicks3, @@ -818,7 +818,7 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis, x0=x2; y0=y; } - + triple a2=zmin == -infinity ? tinv*(xtrans(t,x0),ytrans(t,y0), lb.z-min3(p).z) : (x0,y0,zmin); triple b2=zmax == infinity ? tinv*(xtrans(t,x0),ytrans(t,y0), @@ -830,7 +830,7 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis, pic.scale.z.tickMax=mz.max; divisor=mz.divisor; } - + triple fuzz=Z*epsilon*max(abs(a.z),abs(b.z)); a -= fuzz; b += fuzz; @@ -850,7 +850,7 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis, x=pic.scale.x.automax() ? tickMax3(pic).x : pic.userMax().x; else if(type == Both) { x2=pic.scale.x.automax() ? tickMax3(pic).x : pic.userMax().x; - x=opposite ? x2 : + x=opposite ? x2 : (pic.scale.x.automin() ? tickMin3(pic).x : pic.userMin().x); } @@ -860,7 +860,7 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis, y=pic.scale.y.automax() ? tickMax3(pic).y : pic.userMax().y; else if(type2 == Both) { y2=pic.scale.y.automax() ? tickMax3(pic).y : pic.userMax().y; - y=opposite2 ? y2 : + y=opposite2 ? y2 : (pic.scale.y.automin() ? tickMin3(pic).y : pic.userMin().y); } @@ -876,7 +876,7 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis, pic.addPoint(a,min3(p)); pic.addPoint(a,max3(p)); } - + if(finite(b)) { pic.addPoint(b,min3(p)); pic.addPoint(b,max3(p)); @@ -934,7 +934,7 @@ void autoscale3(picture pic=currentpicture, axis axis) pic.userMaxz3(ceil(pic.userMax().z)); } } else {mz.min=mz.max=0; pic.scale.set=false;} - + pic.scale.z.tickMin=mz.min; pic.scale.z.tickMax=mz.max; axis.zdivisor=mz.divisor; @@ -948,7 +948,7 @@ void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero, arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false) { if(xmin > xmax) return; - + if(pic.scale.x.automin && xmin > -infinity) pic.scale.x.automin=false; if(pic.scale.x.automax && xmax < infinity) pic.scale.x.automax=false; @@ -956,19 +956,19 @@ void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero, axis(pic,axis); autoscale3(pic,axis); } - + bool newticks=false; - + if(xmin != -infinity) { xmin=pic.scale.x.T(xmin); newticks=true; } - + if(xmax != infinity) { xmax=pic.scale.x.T(xmax); newticks=true; } - + if(newticks && pic.userSetx() && ticks != NoTicks3) { if(xmin == -infinity) xmin=pic.userMin().x; if(xmax == infinity) xmax=pic.userMax().x; @@ -977,16 +977,16 @@ void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero, pic.scale.x.tickMax=mx.max; axis.xdivisor=mx.divisor; } - + axis(pic,axis); - + if(xmin == -infinity && !axis.extend) { if(pic.scale.set) xmin=pic.scale.x.automin() ? pic.scale.x.tickMin : max(pic.scale.x.tickMin,pic.userMin().x); else xmin=pic.userMin().x; } - + if(xmax == infinity && !axis.extend) { if(pic.scale.set) xmax=pic.scale.x.automax() ? pic.scale.x.tickMax : @@ -998,7 +998,7 @@ void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero, L=L.copy(); L.position(axis.position); } - + bool back=false; if(axis.type == Both) { triple v=currentprojection.normal; @@ -1025,24 +1025,24 @@ void yaxis3(picture pic=currentpicture, Label L="", axis axis=XZZero, if(pic.scale.y.automin && ymin > -infinity) pic.scale.y.automin=false; if(pic.scale.y.automax && ymax < infinity) pic.scale.y.automax=false; - + if(!pic.scale.set) { axis(pic,axis); autoscale3(pic,axis); } - + bool newticks=false; - + if(ymin != -infinity) { ymin=pic.scale.y.T(ymin); newticks=true; } - + if(ymax != infinity) { ymax=pic.scale.y.T(ymax); newticks=true; } - + if(newticks && pic.userSety() && ticks != NoTicks3) { if(ymin == -infinity) ymin=pic.userMin().y; if(ymax == infinity) ymax=pic.userMax().y; @@ -1051,17 +1051,17 @@ void yaxis3(picture pic=currentpicture, Label L="", axis axis=XZZero, pic.scale.y.tickMax=my.max; axis.ydivisor=my.divisor; } - + axis(pic,axis); - + if(ymin == -infinity && !axis.extend) { if(pic.scale.set) ymin=pic.scale.y.automin() ? pic.scale.y.tickMin : max(pic.scale.y.tickMin,pic.userMin().y); else ymin=pic.userMin().y; } - - + + if(ymax == infinity && !axis.extend) { if(pic.scale.set) ymax=pic.scale.y.automax() ? pic.scale.y.tickMax : @@ -1073,7 +1073,7 @@ void yaxis3(picture pic=currentpicture, Label L="", axis axis=XZZero, L=L.copy(); L.position(axis.position); } - + bool back=false; if(axis.type == Both) { triple v=currentprojection.normal; @@ -1100,24 +1100,24 @@ void zaxis3(picture pic=currentpicture, Label L="", axis axis=XYZero, if(pic.scale.z.automin && zmin > -infinity) pic.scale.z.automin=false; if(pic.scale.z.automax && zmax < infinity) pic.scale.z.automax=false; - + if(!pic.scale.set) { axis(pic,axis); autoscale3(pic,axis); } - + bool newticks=false; - + if(zmin != -infinity) { zmin=pic.scale.z.T(zmin); newticks=true; } - + if(zmax != infinity) { zmax=pic.scale.z.T(zmax); newticks=true; } - + if(newticks && pic.userSetz() && ticks != NoTicks3) { if(zmin == -infinity) zmin=pic.userMin().z; if(zmax == infinity) zmax=pic.userMax().z; @@ -1126,16 +1126,16 @@ void zaxis3(picture pic=currentpicture, Label L="", axis axis=XYZero, pic.scale.z.tickMax=mz.max; axis.zdivisor=mz.divisor; } - + axis(pic,axis); - + if(zmin == -infinity && !axis.extend) { if(pic.scale.set) zmin=pic.scale.z.automin() ? pic.scale.z.tickMin : max(pic.scale.z.tickMin,pic.userMin().z); else zmin=pic.userMin().z; } - + if(zmax == infinity && !axis.extend) { if(pic.scale.set) zmax=pic.scale.z.automax() ? pic.scale.z.tickMax : @@ -1147,7 +1147,7 @@ void zaxis3(picture pic=currentpicture, Label L="", axis axis=XYZero, L=L.copy(); L.position(axis.position); } - + bool back=false; if(axis.type == Both) { triple v=currentprojection.vector(); @@ -1169,18 +1169,18 @@ void zlimits(picture pic=currentpicture, real min=-infinity, real max=infinity, bool crop=NoCrop) { if(min > max) return; - + pic.scale.z.automin=min <= -infinity; pic.scale.z.automax=max >= infinity; - + bounds mz; if(pic.scale.z.automin() || pic.scale.z.automax()) mz=autoscale(pic.userMin().z,pic.userMax().z,pic.scale.z.scale); - + if(pic.scale.z.automin) { if(pic.scale.z.automin()) pic.userMinz(mz.min); } else pic.userMinz(min(pic.scale.z.T(min),pic.scale.z.T(max))); - + if(pic.scale.z.automax) { if(pic.scale.z.automax()) pic.userMaxz(mz.max); } else pic.userMaxz(max(pic.scale.z.T(min),pic.scale.z.T(max))); @@ -1193,10 +1193,10 @@ void limits(picture pic=currentpicture, triple min, triple max) ylimits(pic,min.y,max.y); zlimits(pic,min.z,max.z); } - + // Draw x, y and z axes. void axes3(picture pic=currentpicture, - Label xlabel="", Label ylabel="", Label zlabel="", + Label xlabel="", Label ylabel="", Label zlabel="", bool extend=false, triple min=(-infinity,-infinity,-infinity), triple max=(infinity,infinity,infinity), @@ -1212,11 +1212,50 @@ triple Scale(picture pic=currentpicture, triple v) return (pic.scale.x.T(v.x),pic.scale.y.T(v.y),pic.scale.z.T(v.z)); } +triple[][] Scale(picture pic=currentpicture, triple[][] P) +{ + triple[][] Q=new triple[P.length][]; + for(int i=0; i < P.length; ++i) { + triple[] Pi=P[i]; + Q[i]=new triple[Pi.length]; + for(int j=0; j < Pi.length; ++j) + Q[i][j]=Scale(pic,Pi[j]); + } + return Q; +} + +real ScaleX(picture pic=currentpicture, real x) +{ + return pic.scale.x.T(x); +} + +real ScaleY(picture pic=currentpicture, real y) +{ + return pic.scale.y.T(y); +} + real ScaleZ(picture pic=currentpicture, real z) { return pic.scale.z.T(z); } +real[][] ScaleZ(picture pic=currentpicture, real[][] P) +{ + real[][] Q=new real[P.length][]; + for(int i=0; i < P.length; ++i) { + real[] Pi=P[i]; + Q[i]=new real[Pi.length]; + for(int j=0; j < Pi.length; ++j) + Q[i][j]=ScaleZ(pic,Pi[j]); + } + return Q; +} + +real[] uniform(real T(real x), real Tinv(real x), real a, real b, int n) +{ + return map(Tinv,uniform(T(a),T(b),n)); +} + // Draw a tick of length size at triple v in direction dir using pen p. void tick(picture pic=currentpicture, triple v, triple dir, real size=Ticksize, pen p=currentpen) @@ -1240,11 +1279,11 @@ void xtick3(picture pic=currentpicture, real x, triple dir=Y, real size=Ticksize, pen p=currentpen) { tick(pic,(x,pic.scale.y.scale.logarithmic ? 1 : 0, - pic.scale.z.scale.logarithmic ? 1 : 0),dir,size,p); + pic.scale.z.scale.logarithmic ? 1 : 0),dir,size,p); } void ytick(picture pic=currentpicture, triple v, triple dir=X, - real size=Ticksize, pen p=currentpen) + real size=Ticksize, pen p=currentpen) { tick(pic,v,dir,size,p); } @@ -1257,7 +1296,7 @@ void ytick3(picture pic=currentpicture, real y, triple dir=X, } void ztick(picture pic=currentpicture, triple v, triple dir=X, - real size=Ticksize, pen p=currentpen) + real size=Ticksize, pen p=currentpen) { xtick(pic,v,dir,size,p); } @@ -1294,7 +1333,7 @@ void xtick3(picture pic=currentpicture, Label L, real x, triple dir=Y, string format="", real size=Ticksize, pen p=currentpen) { xtick(pic,L,(x,pic.scale.y.scale.logarithmic ? 1 : 0, - pic.scale.z.scale.logarithmic ? 1 : 0),dir,size,p); + pic.scale.z.scale.logarithmic ? 1 : 0),dir,size,p); } void ytick(picture pic=currentpicture, Label L, triple v, triple dir=X, @@ -1307,7 +1346,7 @@ void ytick3(picture pic=currentpicture, Label L, real y, triple dir=X, string format="", real size=Ticksize, pen p=currentpen) { xtick(pic,L,(pic.scale.x.scale.logarithmic ? 1 : 0,y, - pic.scale.z.scale.logarithmic ? 1 : 0),dir,format,size,p); + pic.scale.z.scale.logarithmic ? 1 : 0),dir,format,size,p); } void ztick(picture pic=currentpicture, Label L, triple v, triple dir=X, @@ -1320,7 +1359,7 @@ void ztick3(picture pic=currentpicture, Label L, real z, triple dir=X, string format="", real size=Ticksize, pen p=currentpen) { xtick(pic,L,(pic.scale.x.scale.logarithmic ? 1 : 0, - pic.scale.z.scale.logarithmic ? 1 : 0,z),dir,format,size,p); + pic.scale.z.scale.logarithmic ? 1 : 0,z),dir,format,size,p); } private void label(picture pic, Label L, triple v, real x, align align, @@ -1416,7 +1455,7 @@ multigraph graph(interpolate3 join, bool3 cond(real)) guide3 Straight(... guide3[])=operator --; guide3 Spline(... guide3[])=operator ..; - + guide3 graph(picture pic=currentpicture, real x(real), real y(real), real z(real), real a, real b, int n=ngraph, interpolate3 join=operator --) @@ -1519,12 +1558,12 @@ guide3 graph(triple F(path, real), path p, int n=1, guide3 graph(triple F(pair), path p, int n=1, interpolate3 join=operator --) { - return graph(new triple(path p, real position) + return graph(new triple(path p, real position) {return F(point(p,position));},p,n,join); } guide3 graph(picture pic=currentpicture, real f(pair), path p, int n=1, - interpolate3 join=operator --) + interpolate3 join=operator --) { return graph(new triple(pair z) {return Scale(pic,(z.x,z.y,f(z)));},p,n, join); @@ -1538,7 +1577,7 @@ guide3 graph(real f(pair), path p, int n=1, real T(pair), } // Connect points in v into segments corresponding to consecutive true elements -// of b using interpolation operator join. +// of b using interpolation operator join. path3[] segment(triple[] v, bool[] cond, interpolate3 join=operator --) { checkconditionlength(cond.length,v.length); @@ -1596,13 +1635,13 @@ bool vperiodic(triple[][] a) { } // return the surface described by a matrix f -surface surface(triple[][] f, bool[][] cond={}) +surface surface(picture pic=currentpicture, triple[][] f, bool[][] cond={}) { if(!rectangular(f)) abort("matrix is not rectangular"); - + int nx=f.length-1; int ny=nx > 0 ? f[0].length-1 : 0; - + bool all=cond.length == 0; int count; @@ -1632,7 +1671,11 @@ surface surface(triple[][] f, bool[][] cond={}) int[] indexi=s.index[i]; for(int j=0; j < ny; ++j) { if(all || (condi[j] && condi[j+1] && condp[j] && condp[j+1])) - s.s[++k]=patch(new triple[] {fi[j],fp[j],fp[j+1],fi[j+1]}); + s.s[++k]=patch(new triple[] { + Scale(pic,fi[j]), + Scale(pic,fp[j]), + Scale(pic,fp[j+1]), + Scale(pic,fi[j+1])}); indexi[j]=k; } } @@ -1708,14 +1751,15 @@ surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, real zppmppp=zpp-hx*pp[jp]; real zijqij=zij+hy*qi[j]; real zpjqpj=zpj+hy*qp[j]; - + s.s[k]=patch(new triple[][] { - {(xi,yj,zij),(xi,y1,zijqij),(xi,y2,zip-qip),(xi,yp,zip)}, - {(x1,yj,zij+pij),(x1,y1,zijqij+pij+hxy*ri[j]), - (x1,y2,zippip-qip-hxy*ri[jp]),(x1,yp,zippip)}, - {(x2,yj,zpj-ppj),(x2,y1,zpjqpj-ppj-hxy*rp[j]), - (x2,y2,zppmppp-qpp+hxy*rp[jp]),(x2,yp,zppmppp)}, - {(xp,yj,zpj),(xp,y1,zpjqpj),(xp,y2,zpp-qpp),(xp,yp,zpp)}},copy=false); + {(xi,yj,zij),(xi,y1,zijqij),(xi,y2,zip-qip),(xi,yp,zip)}, + {(x1,yj,zij+pij),(x1,y1,zijqij+pij+hxy*ri[j]), + (x1,y2,zippip-qip-hxy*ri[jp]),(x1,yp,zippip)}, + {(x2,yj,zpj-ppj),(x2,y1,zpjqpj-ppj-hxy*rp[j]), + (x2,y2,zppmppp-qpp+hxy*rp[jp]),(x2,yp,zppmppp)}, + {(xp,yj,zpj),(xp,y1,zpjqpj),(xp,y2,zpp-qpp),(xp,yp,zpp)}}, + copy=false); indexi[j]=k; ++k; } @@ -1787,11 +1831,11 @@ private real[][][] bispline0(real[][] z, real[][] p, real[][] q, real[][] r, real zpjqpj=zpj+hy*qp[j]; s[k]=new real[][] {{zij,zijqij,zip-qip,zip}, - {zij+pij,zijqij+pij+hxy*ri[j], - zippip-qip-hxy*ri[jp],zippip}, - {zpj-ppj,zpjqpj-ppj-hxy*rp[j], - zppmppp-qpp+hxy*rp[jp],zppmppp}, - {zpj,zpjqpj,zpp-qpp,zpp}}; + {zij+pij,zijqij+pij+hxy*ri[j], + zippip-qip-hxy*ri[jp],zippip}, + {zpj-ppj,zpjqpj-ppj-hxy*rp[j], + zppmppp-qpp+hxy*rp[jp],zppmppp}, + {zpj,zpjqpj,zpp-qpp,zpp}}; ++k; } } @@ -1831,10 +1875,15 @@ real[][][] bispline(real[][] f, real[] x, real[] y, // return the surface described by a real matrix f, interpolated with // xsplinetype and ysplinetype. -surface surface(real[][] f, real[] x, real[] y, - splinetype xsplinetype=null, splinetype ysplinetype=xsplinetype, +surface surface(picture pic=currentpicture, real[][] f, real[] x, real[] y, + splinetype xsplinetype=null, + splinetype ysplinetype=xsplinetype, bool[][] cond={}) { + real[][] f=ScaleZ(pic,f); + real[] x=map(pic.scale.x.T,x); + real[] y=map(pic.scale.y.T,y); + real epsilon=sqrtEpsilon*norm(y); if(xsplinetype == null) xsplinetype=(abs(x[0]-x[x.length-1]) <= epsilon) ? periodic : notaknot; @@ -1863,8 +1912,9 @@ surface surface(real[][] f, real[] x, real[] y, // return the surface described by a real matrix f, interpolated with // xsplinetype and ysplinetype. -surface surface(real[][] f, pair a, pair b, splinetype xsplinetype, - splinetype ysplinetype=xsplinetype, bool[][] cond={}) +surface surface(picture pic=currentpicture, real[][] f, pair a, pair b, + splinetype xsplinetype, splinetype ysplinetype=xsplinetype, + bool[][] cond={}) { if(!rectangular(f)) abort("matrix is not rectangular"); @@ -1873,13 +1923,14 @@ surface surface(real[][] f, pair a, pair b, splinetype xsplinetype, if(nx == 0 || ny == 0) return nullsurface; - real[] x=uniform(a.x,b.x,nx); - real[] y=uniform(a.y,b.y,ny); - return surface(f,x,y,xsplinetype,ysplinetype,cond); + real[] x=uniform(pic.scale.x.T,pic.scale.x.Tinv,a.x,b.x,nx); + real[] y=uniform(pic.scale.y.T,pic.scale.y.Tinv,a.y,b.y,ny); + return surface(pic,f,x,y,xsplinetype,ysplinetype,cond); } // return the surface described by a real matrix f, interpolated linearly. -surface surface(real[][] f, pair a, pair b, bool[][] cond={}) +surface surface(picture pic=currentpicture, real[][] f, pair a, pair b, + bool[][] cond={}) { if(!rectangular(f)) abort("matrix is not rectangular"); @@ -1891,22 +1942,25 @@ surface surface(real[][] f, pair a, pair b, bool[][] cond={}) bool all=cond.length == 0; triple[][] v=new triple[nx+1][ny+1]; + + pair a=Scale(pic,a); + pair b=Scale(pic,b); for(int i=0; i <= nx; ++i) { - real x=interp(a.x,b.x,i/nx); + real x=pic.scale.x.Tinv(interp(a.x,b.x,i/nx)); bool[] condi=all ? null : cond[i]; triple[] vi=v[i]; real[] fi=f[i]; for(int j=0; j <= ny; ++j) if(all || condi[j]) - vi[j]=(x,interp(a.y,b.y,j/ny),fi[j]); + vi[j]=(x,pic.scale.y.Tinv(interp(a.y,b.y,j/ny)),fi[j]); } - return surface(v,cond); + return surface(pic,v,cond); } // return the surface described by a parametric function f over box(a,b), // interpolated linearly. -surface surface(triple f(pair z), pair a, pair b, int nu=nmesh, int nv=nu, - bool cond(pair z)=null) +surface surface(picture pic=currentpicture, triple f(pair z), pair a, pair b, + int nu=nmesh, int nv=nu, bool cond(pair z)=null) { if(nu <= 0 || nv <= 0) return nullsurface; @@ -1921,23 +1975,25 @@ surface surface(triple f(pair z), pair a, pair b, int nu=nmesh, int nv=nu, triple[][] v=new triple[nu+1][nv+1]; + pair a=Scale(pic,a); + pair b=Scale(pic,b); for(int i=0; i <= nu; ++i) { - real x=interp(a.x,b.x,i*du); + real x=pic.scale.x.Tinv(interp(a.x,b.x,i*du)); bool[] activei=all ? null : active[i]; triple[] vi=v[i]; for(int j=0; j <= nv; ++j) { - pair z=(x,interp(a.y,b.y,j*dv)); + pair z=(x,pic.scale.y.Tinv(interp(a.y,b.y,j*dv))); if(all || (activei[j]=cond(z))) vi[j]=f(z); } } - return surface(v,active); + return surface(pic,v,active); } - + // return the surface described by a parametric function f evaluated at u and v // and interpolated with usplinetype and vsplinetype. -surface surface(triple f(pair z), real[] u, real[] v, - splinetype[] usplinetype, splinetype[] vsplinetype=Spline, - bool cond(pair z)=null) +surface surface(picture pic=currentpicture, triple f(pair z), + real[] u, real[] v, splinetype[] usplinetype, + splinetype[] vsplinetype=Spline, bool cond(pair z)=null) { int nu=u.length-1; int nv=v.length-1; @@ -1960,7 +2016,7 @@ surface surface(triple f(pair z), real[] u, real[] v, for(int j=0; j <= nv; ++j) { pair z=(ui,v[j]); if(!all) activei[j]=cond(z); - triple f=f(z); + triple f=Scale(pic,f(z)); fxi[j]=f.x; fyi[j]=f.y; fzi[j]=f.z; @@ -2020,27 +2076,30 @@ surface surface(triple f(pair z), real[] u, real[] v, // return the surface described by a parametric function f over box(a,b), // interpolated with usplinetype and vsplinetype. -surface surface(triple f(pair z), pair a, pair b, int nu=nmesh, int nv=nu, +surface surface(picture pic=currentpicture, triple f(pair z), pair a, pair b, + int nu=nmesh, int nv=nu, splinetype[] usplinetype, splinetype[] vsplinetype=Spline, bool cond(pair z)=null) { - return surface(f,uniform(a.x,b.x,nu),uniform(a.y,b.y,nv), - usplinetype,vsplinetype,cond); + real[] x=uniform(pic.scale.x.T,pic.scale.x.Tinv,a.x,b.x,nu); + real[] y=uniform(pic.scale.y.T,pic.scale.y.Tinv,a.y,b.y,nv); + return surface(pic,f,x,y,usplinetype,vsplinetype,cond); } // return the surface described by a real function f over box(a,b), // interpolated linearly. -surface surface(real f(pair z), pair a, pair b, int nx=nmesh, int ny=nx, - bool cond(pair z)=null) +surface surface(picture pic=currentpicture, real f(pair z), pair a, pair b, + int nx=nmesh, int ny=nx, bool cond(pair z)=null) { - return surface(new triple(pair z) {return (z.x,z.y,f(z));},a,b,nx,ny,cond); + return surface(pic,new triple(pair z) {return (z.x,z.y,f(z));},a,b,nx,ny, + cond); } // return the surface described by a real function f over box(a,b), // interpolated with xsplinetype and ysplinetype. -surface surface(real f(pair z), pair a, pair b, int nx=nmesh, int ny=nx, - splinetype xsplinetype, splinetype ysplinetype=xsplinetype, - bool cond(pair z)=null) +surface surface(picture pic=currentpicture, real f(pair z), pair a, pair b, + int nx=nmesh, int ny=nx, splinetype xsplinetype, + splinetype ysplinetype=xsplinetype, bool cond(pair z)=null) { bool[][] active; bool all=cond == null; @@ -2052,8 +2111,8 @@ surface surface(real f(pair z), pair a, pair b, int nx=nmesh, int ny=nx, pair dz=(dx,dy); real[][] F=new real[nx+1][ny+1]; - real[] x=uniform(a.x,b.x,nx); - real[] y=uniform(a.y,b.y,ny); + real[] x=uniform(pic.scale.x.T,pic.scale.x.Tinv,a.x,b.x,nx); + real[] y=uniform(pic.scale.y.T,pic.scale.y.Tinv,a.y,b.y,ny); for(int i=0; i <= nx; ++i) { bool[] activei=all ? null : active[i]; real[] Fi=F[i]; @@ -2064,7 +2123,7 @@ surface surface(real f(pair z), pair a, pair b, int nx=nmesh, int ny=nx, if(!all) activei[j]=cond(z); } } - return surface(F,x,y,xsplinetype,ysplinetype,active); + return surface(pic,F,x,y,xsplinetype,ysplinetype,active); } guide3[][] lift(real f(real x, real y), guide[][] g, @@ -2128,7 +2187,7 @@ void draw(picture pic=currentpicture, Label[] L=new Label[], render,interaction); } -real maxlength(triple f(pair z), pair a, pair b, int nu, int nv) +real maxlength(triple f(pair z), pair a, pair b, int nu, int nv) { return min(abs(f((b.x,a.y))-f(a))/nu,abs(f((a.x,b.y))-f(a))/nv); } diff --git a/Build/source/utils/asymptote/base/graph_splinetype.asy b/Build/source/utils/asymptote/base/graph_splinetype.asy index 02f780ca02e..77e459d47e2 100644 --- a/Build/source/utils/asymptote/base/graph_splinetype.asy +++ b/Build/source/utils/asymptote/base/graph_splinetype.asy @@ -13,7 +13,7 @@ void checklengths(int x, int y, string text=differentlengths) abort(text+": "+string(x)+" != "+string(y)); } -void checkincreasing(real[] x) +void checkincreasing(real[] x) { if(!increasing(x,true)) abort("strictly increasing array expected"); @@ -114,7 +114,7 @@ real[] periodic(real[] x, real[] y) // Standard cubic spline interpolation with the natural condition // s''(a)=s''(b)=0. // if n=2, linear interpolation is returned -// Don't use the natural type unless the underlying function +// Don't use the natural type unless the underlying function // has zero second end points derivatives. real[] natural(real[] x, real[] y) { @@ -186,25 +186,25 @@ splinetype clamped(real slopea, real slopeb) // Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) // Modified MATLAB code -// [1] Fritsch, F. N. and R. E. Carlson, -// "Monotone Piecewise Cubic Interpolation," +// [1] Fritsch, F. N. and R. E. Carlson, +// "Monotone Piecewise Cubic Interpolation," // SIAM J. Numerical Analysis, Vol. 17, 1980, pp.238-246. -// [2] Kahaner, David, Cleve Moler, Stephen Nash, +// [2] Kahaner, David, Cleve Moler, Stephen Nash, // Numerical Methods and Software, Prentice Hall, 1988. -real[] monotonic(real[] x, real[] y) +real[] monotonic(real[] x, real[] y) { - int n=x.length; + int n=x.length; checklengths(n,y.length); checkincreasing(x); - real[] d=new real[n]; + real[] d=new real[n]; if(n > 2) { real[] h=new real[n-1]; real[] del=new real[n-1]; for(int i=0; i < n-1; ++i) { - h[i]=x[i+1]-x[i]; - del[i]=(y[i+1]-y[i])/h[i]; - } - int j=0; + h[i]=x[i+1]-x[i]; + del[i]=(y[i+1]-y[i])/h[i]; + } + int j=0; int k[]=new int[]; for(int i=0; i < n-2; ++i) if((sgn(del[i])*sgn(del[i+1])) > 0) {k[j]=i; j=j+1;} @@ -220,10 +220,10 @@ real[] monotonic(real[] x, real[] y) w2[i]=(h[k[i]+1]+hs[i])/(3*hs[i]); dmax[i]=max(abs(del[k[i]]),abs(del[k[i]+1])); dmin[i]=min(abs(del[k[i]]),abs(del[k[i]+1])); - } + } for(int i=0; i < n; ++i) d[i]=0; for(int i=0; i < j; ++i) - d[k[i]+1]=dmin[i]/(w1[i]*(del[k[i]]/dmax[i])+w2[i]*(del[k[i]+1]/dmax[i])); + d[k[i]+1]=dmin[i]/(w1[i]*(del[k[i]]/dmax[i])+w2[i]*(del[k[i]+1]/dmax[i])); d[0]=((2*h[0]+h[1])*del[0]-h[0]*del[1])/(h[0]+h[1]); if(sgn(d[0]) != sgn(del[0])) {d[0]=0;} else if((sgn(del[0]) != sgn(del[1])) && (abs(d[0]) > abs(3*del[0]))) @@ -238,7 +238,7 @@ real[] monotonic(real[] x, real[] y) d[0]=d[1]=(y[1]-y[0])/(x[1]-x[0]); } else abort(morepoints); return d; -} +} // Return standard cubic spline interpolation as a guide guide hermite(real[] x, real[] y, splinetype splinetype=null) diff --git a/Build/source/utils/asymptote/base/grid3.asy b/Build/source/utils/asymptote/base/grid3.asy index 98e043a71d7..62807847ae6 100644 --- a/Build/source/utils/asymptote/base/grid3.asy +++ b/Build/source/utils/asymptote/base/grid3.asy @@ -259,7 +259,7 @@ ticksgrid InOutTicks(Label F="", ticklabel ticklabel=null, N,n,Step,step,begin,end, Size,size,false,pTick,ptick); otg.grid3=new void(picture pic, bool above) { - grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above); + grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above); }; return otg; }; @@ -280,7 +280,7 @@ ticksgrid InTicks(Label F="", ticklabel ticklabel=null, otg.ticks=Ticks3(-1,F,ticklabel,beginlabel,endlabel,N,n,Step,step, begin,end,Size,size,false,pTick,ptick); otg.grid3=new void(picture pic, bool above) { - grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above); + grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above); }; return otg; }; @@ -301,7 +301,7 @@ ticksgrid OutTicks(Label F="", ticklabel ticklabel=null, otg.ticks=Ticks3(1,F,ticklabel,beginlabel,endlabel,N,n,Step,step, begin,end,Size,size,false,pTick,ptick); otg.grid3=new void(picture pic, bool above) { - grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above); + grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above); }; return otg; }; diff --git a/Build/source/utils/asymptote/base/interpolate.asy b/Build/source/utils/asymptote/base/interpolate.asy index a600c94c125..d66f227fcc3 100644 --- a/Build/source/utils/asymptote/base/interpolate.asy +++ b/Build/source/utils/asymptote/base/interpolate.asy @@ -7,8 +7,8 @@ // and values y_0,...,y_n in the array y, // hdiffdiv(x,y,dyp) computes Newton's Divided Difference for -// Hermite interpolation where dyp={dy_0,...,dy_n}. -// +// Hermite interpolation where dyp={dy_0,...,dy_n}. +// // fhorner(x,coeff) uses Horner's rule to compute the polynomial // a_0+a_1(x-x_0)+a_2(x-x_0)(x-x_1)+...+a_n(x-x_0)..(x-x_{n-1}), // where coeff={a_0,a_1,...,a_n}. @@ -54,7 +54,7 @@ fhorner fhorner(horner sh) return s; }; } - + // Newton's Divided Difference method: n(n-1)/2 divisions, n(n-1) additions. horner diffdiv(real[] x, real[] y) { @@ -136,5 +136,5 @@ realfunction fspline(real[] x, real[] y, splinetype splinetype=notaknot) real[] dy=splinetype(x,y); return new real(real t) { return pwhermite(x,y,dy)(t); - }; + }; } diff --git a/Build/source/utils/asymptote/base/labelpath3.asy b/Build/source/utils/asymptote/base/labelpath3.asy index 63b2290f1f2..2c9529dc7e8 100644 --- a/Build/source/utils/asymptote/base/labelpath3.asy +++ b/Build/source/utils/asymptote/base/labelpath3.asy @@ -21,7 +21,7 @@ triple[] firstframe(path3 p, triple optional=O) } // Modification of the bishop frame construction contained in -// space_tube.asy (from Philippe Ivaldi's modules). +// space_tube.asy (from Philippe Ivaldi's modules). // For noncyclic path3s only triple[] nextframe(path3 p, real reltimestart, triple[] start, real reltimeend, int subdiv=20) @@ -40,7 +40,7 @@ triple[] nextframe(path3 p, real reltimestart, triple[] start, real } return bf[subdiv]; } - + surface labelpath(string s, path3 p, real angle=90, triple optional=O) { real Cos=Cos(angle); @@ -48,10 +48,10 @@ surface labelpath(string s, path3 p, real angle=90, triple optional=O) path[] text=texpath(Label(s,(0,0),Align,basealign)); text=scale(1/(max(text).x-min(text).x))*text; path[][] decompose=containmentTree(text); - + real[][] xpos=new real[decompose.length][2]; surface sf; - for(int i=0; i < decompose.length; ++i) {// Identify positions along x-axis + for(int i=0; i < decompose.length; ++i) {// Identify positions along x-axis xpos[i][1]=i; real pos0=0.5(max(decompose[i]).x+min(decompose[i]).x); xpos[i][0]=pos0; diff --git a/Build/source/utils/asymptote/base/latin1.asy b/Build/source/utils/asymptote/base/latin1.asy deleted file mode 100644 index 3d76925be24..00000000000 --- a/Build/source/utils/asymptote/base/latin1.asy +++ /dev/null @@ -1,2 +0,0 @@ -usepackage("fontenc","T1"); -usepackage("inputenc","latin1"); diff --git a/Build/source/utils/asymptote/base/lmfit.asy b/Build/source/utils/asymptote/base/lmfit.asy index c3dfddce061..63e0d7e2386 100644 --- a/Build/source/utils/asymptote/base/lmfit.asy +++ b/Build/source/utils/asymptote/base/lmfit.asy @@ -58,31 +58,31 @@ private real LM_SQRT_GIANT = sqrt(realMax); private real LM_USERTOL = 30 * LM_MACHEP; restricted string lm_infmsg[] = { - "improper input parameters", - "the relative error in the sum of squares is at most tol", - "the relative error between x and the solution is at most tol", - "both errors are at most tol", - "fvec is orthogonal to the columns of the jacobian to machine precision", - "number of calls to fcn has reached or exceeded maxcall*(n+1)", - "ftol is too small: no further reduction in the sum of squares is possible", - "xtol too small: no further improvement in approximate solution x possible", - "gtol too small: no further improvement in approximate solution x possible", - "not enough memory", - "break requested within function evaluation" + "improper input parameters", + "the relative error in the sum of squares is at most tol", + "the relative error between x and the solution is at most tol", + "both errors are at most tol", + "fvec is orthogonal to the columns of the jacobian to machine precision", + "number of calls to fcn has reached or exceeded maxcall*(n+1)", + "ftol is too small: no further reduction in the sum of squares is possible", + "xtol too small: no further improvement in approximate solution x possible", + "gtol too small: no further improvement in approximate solution x possible", + "not enough memory", + "break requested within function evaluation" }; restricted string lm_shortmsg[] = { - "invalid input", - "success (f)", - "success (p)", - "success (f,p)", - "degenerate", - "call limit", - "failed (f)", - "failed (p)", - "failed (o)", - "no memory", - "user break" + "invalid input", + "success (f)", + "success (p)", + "success (f,p)", + "degenerate", + "call limit", + "failed (f)", + "failed (p)", + "failed (o)", + "no memory", + "user break" }; @@ -91,7 +91,7 @@ struct lm_data_type { real[] user_t; real[] user_y; real[] user_w; - real user_func(real user_t_point, real[] par); + real user_func(real user_t_point, real[] par); }; @@ -99,7 +99,7 @@ struct lm_data_type { // the int and real types struct lm_int_type { int val; - + void operator init(int val) { this.val = val; } @@ -108,7 +108,7 @@ struct lm_int_type { struct lm_real_type { real val; - + void operator init(real val) { this.val = val; } @@ -402,7 +402,7 @@ private void lm_qrsolv(int n, real[] r, int ldr, int[] ipvt, real[] diag, real[] } break; } - + sdiag[j] = r[j * ldr + j]; r[j * ldr + j] = x[j]; } @@ -508,10 +508,10 @@ private void lm_lmpar(int n, real[] r, int ldr, int[] ipvt, real[] diag, real[] dxnorm = lm_enorm(n, wa2); fp_old = fp; fp = dxnorm - delta; - + if (fabs(fp) <= p1 * delta || (parl == 0.0 && fp <= fp_old && fp_old < 0.0) || iter == 10) break; - + for (j = 0; j < n; ++j) wa1[j] = diag[ipvt[j]] * wa2[ipvt[j]] / dxnorm; @@ -522,12 +522,12 @@ private void lm_lmpar(int n, real[] r, int ldr, int[] ipvt, real[] diag, real[] } temp = lm_enorm(n, wa1); parc = fp / delta / temp / temp; - + if (fp > 0) parl = max(parl, par.val); else if (fp < 0) paru = min(paru, par.val); - + par.val = max(parl, par.val + parc); } } @@ -540,7 +540,7 @@ void lm_lmdif(int m, int n, real[] x, real[] fvec, real ftol, real xtol, real gt static real p25 = 0.25; static real p75 = 0.75; static real p0001 = 1.0e-4; - + nfev.val = 0; int iter = 1; lm_real_type par = lm_real_type(0); @@ -563,7 +563,7 @@ void lm_lmdif(int m, int n, real[] x, real[] fvec, real ftol, real xtol, real gt } } } - + info.val = 0; evaluate(x, m, fvec, data, info); if(printout != null) printout(n, x, m, fvec, data, 0, 0, ++nfev.val); @@ -587,7 +587,7 @@ void lm_lmdif(int m, int n, real[] x, real[] fvec, real ftol, real xtol, real gt fjac[j * m + i] = (wa4[i] - fvec[i]) / (x[j] - temp); x[j] = temp; } - + lm_qrfac(m, n, fjac, true, ipvt, wa1, wa2, wa3); if (iter == 1) { @@ -695,7 +695,7 @@ void lm_lmdif(int m, int n, real[] x, real[] fvec, real ftol, real xtol, real gt delta = pnorm / p5; par.val *= p5; } - + if (ratio >= p0001) { for (j = 0; j < n; ++j) { x[j] = wa2[j]; @@ -735,7 +735,7 @@ void lm_lmdif(int m, int n, real[] x, real[] fvec, real ftol, real xtol, real gt void lm_minimize(int m_dat, int n_par, real[] par, lm_evaluate_ftype evaluate, lm_print_ftype printout, lm_data_type data, lm_control_type control) { int n = n_par; int m = m_dat; - + real[] fvec = new real[m]; real[] diag = new real[n]; real[] qtf = new real[n]; @@ -838,13 +838,13 @@ FitResult fit(real[] xdata, real[] ydata, real[] errors, real function(real[], r int n_par = parameters.length; lm_evaluate_ftype evaluate = lm_evaluate_default; lm_print_ftype printout = control.verbose ? lm_print_default : lm_print_quiet; - + lm_data_type data; data.user_t = xdata; data.user_y = ydata; data.user_w = 1 / errors; data.user_func = new real(real x, real[] params) { - return function(params, x); + return function(params, x); }; lm_control_type ctrl; @@ -856,7 +856,7 @@ FitResult fit(real[] xdata, real[] ydata, real[] errors, real function(real[], r ctrl.maxcall = control.maxIterations; lm_minimize(m_dat, n_par, parameters, evaluate, printout, data, ctrl); - + return FitResult(ctrl.fnorm, ctrl.nfev.val, ctrl.info.val); } diff --git a/Build/source/utils/asymptote/base/map.asy b/Build/source/utils/asymptote/base/map.asy new file mode 100644 index 00000000000..2b2277b9568 --- /dev/null +++ b/Build/source/utils/asymptote/base/map.asy @@ -0,0 +1,40 @@ +// Create a struct <name> parameterized by types <key> and <value>, +// that maps keys to values, defaulting to the value in <default>. +void mapTemplate(string name, string key, string value, string default) +{ + type(key,"Key"); + type(value,"Value"); + eval("Value default="+default,true); + + eval(" + struct keyValue { + Key key; + Value T; + void operator init(Key key) { + this.key=key; + } + void operator init(Key key, Value T) { + this.key=key; + this.T=T; + } + } + + struct map { + keyValue[] M; + bool operator < (keyValue a, keyValue b) {return a.key < b.key;} + + void add(Key key, Value T) { + keyValue m=keyValue(key,T); + M.insert(search(M,m,operator <)+1,m); + } + Value lookup(Key key) { + int i=search(M,keyValue(key),operator <); + if(i >= 0 && M[i].key == key) return M[i].T; + return default; + } + } +",true); + + type("map",name); +} + diff --git a/Build/source/utils/asymptote/base/math.asy b/Build/source/utils/asymptote/base/math.asy index 9d10e2b7794..3dde1b9dd4c 100644 --- a/Build/source/utils/asymptote/base/math.asy +++ b/Build/source/utils/asymptote/base/math.asy @@ -30,7 +30,7 @@ picture grid(int Nx, int Ny, pen p=currentpen) picture pic; for(int i=0; i <= Nx; ++i) draw(pic,(i,0)--(i,Ny),p); for(int j=0; j <= Ny; ++j) draw(pic,(0,j)--(Nx,j),p); - return pic; + return pic; } bool polygon(path p) @@ -55,7 +55,7 @@ real intersect(triple P, triple Q, triple n, triple Z) real denom=n.x*(Q.x-P.x)+n.y*(Q.y-P.y)+n.z*(Q.z-P.z); return denom == 0 ? infinity : (d-n.x*P.x-n.y*P.y-n.z*P.z)/denom; } - + // Return any point on the intersection of the two planes with normals // n0 and n1 passing through points P0 and P1, respectively. // If the planes are parallel return (infinity,infinity,infinity). @@ -293,7 +293,7 @@ void drawline(picture pic=currentpicture, pair P, pair Q, pen p=currentpen) },true); } -real interpolate(real[] x, real[] y, real x0, int i) +real interpolate(real[] x, real[] y, real x0, int i) { int n=x.length; if(n == 0) abort("Zero data points in interpolate"); @@ -317,7 +317,7 @@ real interpolate(real[] x, real[] y, real x0, int i) // real[] x are listed in ascending order and return y0. Values outside the // available data range are linearly extrapolated using the first derivative // at the nearest endpoint. -real interpolate(real[] x, real[] y, real x0) +real interpolate(real[] x, real[] y, real x0) { return interpolate(x,y,x0,search(x,x0)); } @@ -378,7 +378,7 @@ pair[] quarticroots(real a, real b, real c, real d, real e) // Remove roots at numerical infinity. if(abs(a) <= Fuzz*(abs(b)+Fuzz*(abs(c)+Fuzz*(abs(d)+Fuzz*abs(e))))) return cubicroots(b,c,d,e); - + // Detect roots at numerical zero. if(abs(e) <= Fuzz*(abs(d)+Fuzz*(abs(c)+Fuzz*(abs(b)+Fuzz*abs(a))))) return cubicroots(a,b,c,d); @@ -388,7 +388,7 @@ pair[] quarticroots(real a, real b, real c, real d, real e) c *= ainv; d *= ainv; e *= ainv; - + pair[] roots; real[] T=cubicroots(1,-2c,c^2+b*d-4e,d^2+b^2*e-b*c*d); if(T.length == 0) return roots; @@ -434,13 +434,13 @@ real[] leastsquares(real[][] A, real[] b, bool warn=true) real[] solution=solve(AtA(A),b*A,warn=false); if (solution.length == 0 && warn) abort("Cannot compute least-squares approximation for " + - "a matrix with linearly dependent columns."); + "a matrix with linearly dependent columns."); return solution; } // Namespace struct rootfinder_settings { - static real roottolerance = 1e-4; + static real roottolerance=1e-4; } real findroot(real f(real), real a, real b, diff --git a/Build/source/utils/asymptote/base/metapost.asy b/Build/source/utils/asymptote/base/metapost.asy index 525ffe755e1..6908fd750d2 100644 --- a/Build/source/utils/asymptote/base/metapost.asy +++ b/Build/source/utils/asymptote/base/metapost.asy @@ -2,14 +2,14 @@ path cuttings; -path cutbefore(path p, path q) +path cutbefore(path p, path q) { slice s=firstcut(p,q); cuttings=s.before; return s.after; } -path cutafter(path p, path q) +path cutafter(path p, path q) { slice s=lastcut(p,q); cuttings=s.after; diff --git a/Build/source/utils/asymptote/base/obj.asy b/Build/source/utils/asymptote/base/obj.asy index 8dde9341c42..5b6f14e90df 100644 --- a/Build/source/utils/asymptote/base/obj.asy +++ b/Build/source/utils/asymptote/base/obj.asy @@ -1,7 +1,7 @@ // A module for reading simple obj files with groups. // Authors: Jens Schwaiger and John Bowman // -// Here simple means that : +// Here simple means that : // // 1) all vertex statements should come before the face statements; // diff --git a/Build/source/utils/asymptote/base/ode.asy b/Build/source/utils/asymptote/base/ode.asy index 7104a8d1532..99f8505cec2 100644 --- a/Build/source/utils/asymptote/base/ode.asy +++ b/Build/source/utils/asymptote/base/ode.asy @@ -14,7 +14,7 @@ struct RKTableau int order; coefficients a; void stepDependence(real h, real c, coefficients a) {} - + real pgrow; real pshrink; bool exponential; @@ -54,7 +54,7 @@ real phi2(real x) if(fabs(x) > 1) return (exp(x)-x-1)/x2; real x3=x2*x; real x5=x2*x3; - if(fabs(x) < 0.1) + if(fabs(x) < 0.1) return Coeff[1]+x*Coeff[2]+x2*Coeff[3]+x3*Coeff[4]+x2*x2*Coeff[5] +x5*Coeff[6]+x3*x3*Coeff[7]+x5*x2*Coeff[8]+x5*x3*Coeff[9]; else { @@ -73,7 +73,7 @@ real phi3(real x) real x3=x2*x; if(fabs(x) > 1.6) return (exp(x)-0.5*x2-x-1)/x3; real x5=x2*x3; - if(fabs(x) < 0.1) + if(fabs(x) < 0.1) return Coeff[2]+x*Coeff[3]+x2*Coeff[4]+x3*Coeff[5] +x2*x2*Coeff[6]+x5*Coeff[7]+x3*x3*Coeff[8]+x5*x2*Coeff[9] +x5*x3*Coeff[10]; @@ -90,13 +90,13 @@ real phi3(real x) } } -void expfactors(real x, coefficients a) +void expfactors(real x, coefficients a) { for(int i=0; i < a.steps.length; ++i) a.factors[i]=exp(x*a.steps[i]); a.factors[a.steps.length]=exp(x); } - + // First-Order Euler RKTableau Euler=RKTableau(1,new real[][], new real[] {1}); @@ -185,40 +185,40 @@ RKTableau RK4=RKTableau(4,new real[][] {{1/2},{0,1/2},{0,0,1}}, // Fifth-Order Cash-Karp Runge-Kutta RKTableau RK5=RKTableau(5,new real[][] {{1/5}, - {3/40,9/40}, - {3/10,-9/10,6/5}, - {-11/54,5/2,-70/27,35/27}, - {1631/55296,175/512,575/13824, - 44275/110592,253/4096}}, + {3/40,9/40}, + {3/10,-9/10,6/5}, + {-11/54,5/2,-70/27,35/27}, + {1631/55296,175/512,575/13824, + 44275/110592,253/4096}}, new real[] {37/378,0,250/621,125/594, - 0,512/1771}, // 5th order + 0,512/1771}, // 5th order new real[] {2825/27648,0,18575/48384,13525/55296, - 277/14336,1/4}); // 4th order + 277/14336,1/4}); // 4th order // Fifth-Order Fehlberg Runge-Kutta RKTableau RK5F=RKTableau(5,new real[][] {{1/4}, - {3/32,9/32}, - {1932/2197,-7200/2197,7296/2197}, - {439/216,-8,3680/513,-845/4104}, - {-8/27,2,-3544/2565,1859/4104, - -11/40}}, + {3/32,9/32}, + {1932/2197,-7200/2197,7296/2197}, + {439/216,-8,3680/513,-845/4104}, + {-8/27,2,-3544/2565,1859/4104, + -11/40}}, new real[] {16/135,0,6656/12825,28561/56430,-9/50,2/55}, // 5th order new real[] {25/216,0,1408/2565,2197/4104,-1/5,0}); // 4th order // Fifth-Order Dormand-Prince Runge-Kutta RKTableau RK5DP=RKTableau(5,new real[][] {{1/5}, - {3/40,9/40}, - {44/45,-56/15,32/9}, - {19372/6561,-25360/2187,64448/6561, - -212/729}, - {9017/3168,-355/33,46732/5247,49/176, - -5103/18656}}, + {3/40,9/40}, + {44/45,-56/15,32/9}, + {19372/6561,-25360/2187,64448/6561, + -212/729}, + {9017/3168,-355/33,46732/5247,49/176, + -5103/18656}}, new real[] {35/384,0,500/1113,125/192,-2187/6784, - 11/84}, // 5th order + 11/84}, // 5th order new real[] {5179/57600,0,7571/16695,393/640, - -92097/339200,187/2100,1/40}); // 4th order + -92097/339200,187/2100,1/40}); // 4th order -real error(real error, real initial, real lowOrder, real norm, real diff) +real error(real error, real initial, real lowOrder, real norm, real diff) { if(initial != 0 && lowOrder != initial) { static real epsilon=realMin/realEpsilon; @@ -249,7 +249,7 @@ struct solution real[] y; } -void write(solution S) +void write(solution S) { for(int i=0; i < S.t.length; ++i) write(S.t[i],S.y[i]); @@ -276,7 +276,7 @@ solution integrate(real y, real c=0, real f(real t, real y), real a, real b=a, new real(real t, real y) {return f(t,y)-c*y;}; tableau.stepDependence(h,c,tableau.a); - + real t=a; real f0; if(tableau.a.lowOrderWeights.length == 0) dynamic=false; @@ -293,7 +293,7 @@ solution integrate(real y, real c=0, real f(real t, real y), real a, real b=a, tableau.stepDependence(h,c,tableau.a); dt=h; } - + real[] predictions={fsal ? f0 : F(t,y)}; for(int i=0; i < tableau.a.steps.length; ++i) predictions.push(F(t+h*tableau.a.steps[i], @@ -336,7 +336,7 @@ struct Solution real[][] y; } -void write(Solution S) +void write(Solution S) { for(int i=0; i < S.t.length; ++i) { write(S.t[i],tab); @@ -356,7 +356,7 @@ Solution integrate(real[] y, real[] f(real t, real[] y), real a, real b=a, Solution S; S.t=new real[] {a}; S.y=new real[][] {copy(y)}; - + if(h == 0) { if(b == a) return S; if(n == 0) abort("Either n or h must be specified"); diff --git a/Build/source/utils/asymptote/base/palette.asy b/Build/source/utils/asymptote/base/palette.asy index e77fa946e6b..e3d62183120 100644 --- a/Build/source/utils/asymptote/base/palette.asy +++ b/Build/source/utils/asymptote/base/palette.asy @@ -5,7 +5,7 @@ private transform swap=(0,0,0,1,1,0); typedef bounds range(picture pic, real min, real max); range Range(bool automin=false, real min=-infinity, - bool automax=false, real max=infinity) + bool automax=false, real max=infinity) { return new bounds(picture pic, real dmin, real dmax) { // autoscale routine finds reasonable limits @@ -45,7 +45,7 @@ void image(frame f, pen[][] data, pair initial, pair final, // Reduce color palette to approximate range of data relative to "display" // range => errors of 1/palette.length in resulting color space. pen[] adjust(picture pic, real min, real max, real rmin, real rmax, - pen[] palette) + pen[] palette) { real dmin=pic.scale.z.T(min); real dmax=pic.scale.z.T(max); @@ -100,7 +100,7 @@ bounds image(picture pic=currentpicture, real[][] f, range range=Full, initial=T*initial; final=T*final; } - + pic.add(new void(frame F, transform t) { _image(F,f,initial,final,palette,t*T,copy=false,antialias=antialias); },true); @@ -146,7 +146,7 @@ void image(picture pic=currentpicture, pen[][] data, pair initial, pair final, initial=T*initial; final=T*final; } - + pic.add(new void(frame F, transform t) { _image(F,data,initial,final,t*T,copy=false,antialias=antialias); },true); @@ -171,7 +171,7 @@ void image(picture pic=currentpicture, pen f(int, int), int width, int height, initial=T*initial; final=T*final; } - + pic.add(new void(frame F, transform t) { _image(F,f,width,height,initial,final,t*T,antialias=antialias); },true); @@ -267,20 +267,20 @@ paletteticks PaletteTicks(Label format="", ticklabel ticklabel=null, return Ticks(sign,format,ticklabel,beginlabel,endlabel,N,n,Step,step, true,true,extend=true,pTick,ptick); }; -} +} paletteticks PaletteTicks=PaletteTicks(); paletteticks NoTicks=new ticks(int sign=-1) {return NoTicks;}; -void palette(picture pic=currentpicture, Label L="", bounds bounds, - pair initial, pair final, axis axis=Right, pen[] palette, +void palette(picture pic=currentpicture, Label L="", bounds bounds, + pair initial, pair final, axis axis=Right, pen[] palette, pen p=currentpen, paletteticks ticks=PaletteTicks, bool copy=true, bool antialias=false) { real initialz=pic.scale.z.T(bounds.min); real finalz=pic.scale.z.T(bounds.max); bounds mz=autoscale(initialz,finalz,pic.scale.z.scale); - + axisT axis; axis(pic,axis); real angle=degrees(axis.align.dir); @@ -311,11 +311,11 @@ void palette(picture pic=currentpicture, Label L="", bounds bounds, if(vertical && L.defaulttransform) { frame f; add(f,Label(L.s,(0,0),L.p)); - if(length(max(f)-min(f)) > ylabelwidth*fontsize(L.p)) + if(length(max(f)-min(f)) > ylabelwidth*fontsize(L.p)) L.transform(rotate(90)); } real[][] pdata={sequence(palette.length)}; - + transform T; pair Tinitial,Tfinal; if(vertical) { @@ -326,12 +326,12 @@ void palette(picture pic=currentpicture, Label L="", bounds bounds, Tinitial=initial; Tfinal=final; } - + pic.add(new void(frame f, transform t) { _image(f,pdata,Tinitial,Tfinal,palette,t*T,copy=false, antialias=antialias); },true); - + ticklocate locate=ticklocate(initialz,finalz,pic.scale.z,mz.min,mz.max); axis(pic,L,g,g2,p,ticks(sgn(axis.side.x*dot(lambda,par))),locate,mz.divisor, true); @@ -356,13 +356,13 @@ pen[] Grayscale(int NColors=256) pen[] Wheel(int NColors=32766) { if(settings.gray) return Grayscale(NColors); - + int nintervals=6; if(NColors <= nintervals) NColors=nintervals+1; int n=-quotient(NColors,-nintervals); - + pen[] Palette; - + Palette=new pen[n*nintervals]; real ninv=1.0/n; @@ -373,7 +373,7 @@ pen[] Wheel(int NColors=32766) Palette[n+i]=rgb(ininv1,0.0,1.0); Palette[2n+i]=rgb(0.0,ininv,1.0); Palette[3n+i]=rgb(0.0,1.0,ininv1); - Palette[4n+i]=rgb(ininv,1.0,0.0); + Palette[4n+i]=rgb(ininv,1.0,0.0); Palette[5n+i]=rgb(1.0,ininv1,0.0); } return Palette; @@ -383,14 +383,14 @@ pen[] Wheel(int NColors=32766) pen[] Rainbow(int NColors=32766) { if(settings.gray) return Grayscale(NColors); - + int offset=1; int nintervals=5; if(NColors <= nintervals) NColors=nintervals+1; int n=-quotient(NColors-1,-nintervals); - + pen[] Palette; - + Palette=new pen[n*nintervals+offset]; real ninv=1.0/n; @@ -400,37 +400,37 @@ pen[] Rainbow(int NColors=32766) Palette[i]=rgb(ininv1,0.0,1.0); Palette[n+i]=rgb(0.0,ininv,1.0); Palette[2n+i]=rgb(0.0,1.0,ininv1); - Palette[3n+i]=rgb(ininv,1.0,0.0); + Palette[3n+i]=rgb(ininv,1.0,0.0); Palette[4n+i]=rgb(1.0,ininv1,0.0); } Palette[4n+n]=rgb(1.0,0.0,0.0); - + return Palette; } private pen[] BWRainbow(int NColors, bool two) { if(settings.gray) return Grayscale(NColors); - + int offset=1; int nintervals=6; int divisor=3; - + if(two) nintervals += 6; - + int Nintervals=nintervals*divisor; if(NColors <= Nintervals) NColors=Nintervals+1; int num=NColors-offset; int n=-quotient(num,-Nintervals)*divisor; NColors=n*nintervals+offset; - + pen[] Palette; - + Palette=new pen[NColors]; real ninv=1.0/n; int k=0; - + if(two) { for(int i=0; i < n; ++i) { real ininv=i*ninv; @@ -444,9 +444,9 @@ private pen[] BWRainbow(int NColors, bool two) } k += 6n; } - + if(two) - for(int i=0; i < n; ++i) + for(int i=0; i < n; ++i) Palette[k+i]=rgb(1.0-i*ninv,0.0,1.0); else { int n3=-quotient(n,-3); @@ -467,12 +467,12 @@ private pen[] BWRainbow(int NColors, bool two) real ininv1=1.0-ininv; Palette[k+i]=rgb(0.0,ininv,1.0); Palette[k+n+i]=rgb(0.0,1.0,ininv1); - Palette[k+2n+i]=rgb(ininv,1.0,0.0); + Palette[k+2n+i]=rgb(ininv,1.0,0.0); Palette[k+3n+i]=rgb(1.0,ininv1,0.0); Palette[k+4n+i]=rgb(1.0,ininv,ininv); } Palette[k+5n]=rgb(1.0,1.0,1.0); - + return Palette; } @@ -484,7 +484,7 @@ pen[] quantize(pen[] Palette, int n) real step=(Palette.length-1)/(n-1); return sequence(new pen(int i) { return Palette[round(i*step)]; - },n); + },n); } // A rainbow palette tapering off to black/white at the spectrum ends, @@ -507,7 +507,7 @@ pen[] BWRainbow2(int NColors=32761) //A palette varying linearly over the specified array of pens, using // NColors in each interpolation interval. -pen[] Gradient(int NColors=256 ... pen[] p) +pen[] Gradient(int NColors=256 ... pen[] p) { pen[] P; if(p.length < 2) abort("at least 2 colors must be specified"); @@ -522,7 +522,7 @@ pen[] Gradient(int NColors=256 ... pen[] p) return P; } -pen[] cmyk(pen[] Palette) +pen[] cmyk(pen[] Palette) { int n=Palette.length; for(int i=0; i < n; ++i) diff --git a/Build/source/utils/asymptote/base/patterns.asy b/Build/source/utils/asymptote/base/patterns.asy index 56fa3bf4a24..559e36cec11 100644 --- a/Build/source/utils/asymptote/base/patterns.asy +++ b/Build/source/utils/asymptote/base/patterns.asy @@ -7,7 +7,7 @@ frame tiling(string name, picture pic, pair lb=0, pair rt=0) pair pmin=min(f)-lb; pair pmax=max(f)+rt; string s="%.6f"; - postscript(tiling,"<< /PaintType 1 /PatternType 1 /TilingType 1 + postscript(tiling,"<< /PaintType 1 /PatternType 1 /TilingType 1 /BBox ["+format(s,pmin.x,"C")+" "+format(s,pmin.y,"C")+" "+ format(s,pmax.x,"C")+" "+format(s,pmax.y,"C")+"] /XStep "+format(s,pmax.x-pmin.x,"C")+" @@ -64,7 +64,7 @@ picture brick(real Hx=5mm, real Hy=0, pen p=currentpen) } real hatchepsilon=1e-4; -picture hatch(real H=5mm, pair dir=NE, pen p=currentpen) +picture hatch(real H=5mm, pair dir=NE, pen p=currentpen) { picture tiling; real theta=angle(dir); diff --git a/Build/source/utils/asymptote/base/plain.asy b/Build/source/utils/asymptote/base/plain.asy index 480780c458a..365aad02c74 100644 --- a/Build/source/utils/asymptote/base/plain.asy +++ b/Build/source/utils/asymptote/base/plain.asy @@ -18,13 +18,13 @@ if(settings.command != "") { include plain_constants; -access version; +access version; if(version.VERSION != VERSION) { warning("version","using possibly incompatible version "+ version.VERSION+" of plain.asy"+'\n'); nowarn("version"); } - + include plain_strings; include plain_pens; include plain_paths; @@ -32,13 +32,15 @@ include plain_filldraw; include plain_margins; include plain_picture; include plain_Label; -include plain_shipout; include plain_arcs; include plain_boxes; +include plain_shipout; include plain_markers; include plain_arrows; include plain_debugger; +real RELEASE=(real) split(VERSION,"-")[0]; + typedef void exitfcn(); void updatefunction() @@ -106,7 +108,7 @@ addSaveFunction(new restoreThunk () { }); // Save the current state, so that restore will put things back in that state. -restoreThunk save() +restoreThunk save() { return restore=buildRestoreThunk(); } @@ -132,7 +134,7 @@ restoreThunk buildRestoreDefaults() } // Save the current state, so that restore will put things back in that state. -restoreThunk savedefaults() +restoreThunk savedefaults() { return restoredefaults=buildRestoreDefaults(); } @@ -145,7 +147,7 @@ void initdefaults() atexit(null); } -// Return the sequence n,...m +// Return the sequence n,...,m int[] sequence(int n, int m) { return sequence(new int(int x){return x;},m-n+1)+n; @@ -180,13 +182,26 @@ void eval(code s, bool embedded=false) if(!embedded) restoredefaults(); } +// Associate a parametrized type with a name. +void type(string type, string name) +{ + eval("typedef "+type+" "+name,true); +} + +void mapArray(string From, string To) +{ + type(From,"From"); + type(To,"To"); + eval("To[] map(To f(From), From[] a) {return sequence(new To(int i) {return f(a[i]);},a.length);}",true); +} + // Evaluate user command line option. void usersetting() { eval(settings.user,true); } -string stripsuffix(string f, string suffix=".asy") +string stripsuffix(string f, string suffix=".asy") { int n=rfind(f,suffix); if(n != -1) f=erase(f,n,-1); @@ -231,6 +246,7 @@ void beep() struct processtime { real user; real system; + real clock; } struct cputime { @@ -239,21 +255,26 @@ struct cputime { processtime change; } -cputime cputime() +cputime cputime() { static processtime last; real [] a=_cputime(); cputime cputime; + real clock=a[4]; cputime.parent.user=a[0]; cputime.parent.system=a[1]; + cputime.parent.clock=clock; cputime.child.user=a[2]; cputime.child.system=a[3]; - real user=a[0]+a[2]; - real system=a[1]+a[3]; + cputime.child.clock=0; + real user=cputime.parent.user+cputime.child.user; + real system=cputime.parent.system+cputime.child.system; cputime.change.user=user-last.user; cputime.change.system=system-last.system; + cputime.change.clock=clock-last.clock; last.user=user; last.system=system; + last.clock=clock; return cputime; } @@ -285,23 +306,3 @@ if(settings.autoimport != "") { } cputime(); - -void nosetpagesize() -{ - static bool initialized=false; - if(!initialized && latex()) { - // Portably pass nosetpagesize option to graphicx package. - texpreamble("\usepackage{ifluatex}\ifluatex -\ifx\pdfpagewidth\undefined\let\pdfpagewidth\paperwidth\fi -\ifx\pdfpageheight\undefined\let\pdfpageheight\paperheight\fi\else -\let\paperwidthsave\paperwidth\let\paperwidth\undefined -\usepackage{graphicx} -\let\paperwidth\paperwidthsave\fi"); - initialized=true; - } -} - -nosetpagesize(); - -if(settings.tex == "luatex") - texpreamble("\input luatex85.sty"); diff --git a/Build/source/utils/asymptote/base/plain_Label.asy b/Build/source/utils/asymptote/base/plain_Label.asy index c50ce003be0..0a2c270d689 100644 --- a/Build/source/utils/asymptote/base/plain_Label.asy +++ b/Build/source/utils/asymptote/base/plain_Label.asy @@ -15,10 +15,10 @@ transform scaleless(transform t) real a=t.xx, b=t.xy, c=t.yx, d=t.yy; real arg=(a-d)^2+4b*c; pair delta=arg >= 0 ? sqrt(arg) : I*sqrt(-arg); - real trace=a+d; + real trace=a+d; pair l1=0.5(trace+delta); pair l2=0.5(trace-delta); - + if(abs(delta) < sqrtEpsilon*max(abs(l1),abs(l2))) { real s=abs(0.5trace); return (s != 0) ? scale(1/s)*t : t; @@ -51,7 +51,7 @@ transform scaleless(transform t) } } return c; - } + } pair[][] conj(pair[][] a) { pair[][] c=new pair[2][2]; @@ -61,7 +61,7 @@ transform scaleless(transform t) } } return c; - } + } A=conj(U)*A*U; @@ -70,7 +70,7 @@ transform scaleless(transform t) A[0][0] /= D; A[0][1] /= D; } - + D=abs(A[1][1]); if(D != 0) { A[1][0] /= D; @@ -155,13 +155,13 @@ side Relative(explicit pair align) s.align=align; return s; } - + restricted side NoSide; restricted side LeftSide=Relative(W); restricted side Center=Relative((0,0)); restricted side RightSide=Relative(E); -side operator * (real x, side s) +side operator * (real x, side s) { side S; S.align=x*s.align; @@ -190,7 +190,7 @@ position Relative(real position) p.relative=true; return p; } - + restricted position BeginPoint=Relative(0); restricted position MidPoint=Relative(0.5); restricted position EndPoint=Relative(1); @@ -227,8 +227,8 @@ struct Label { bool defaulttransform3=true; embed embed=Rotate; // Shift, Rotate, Slant, or Scale with embedded picture filltype filltype=NoFill; - - void init(string s="", string size="", position position=0, + + void init(string s="", string size="", position position=0, bool defaultposition=true, align align=NoAlign, pen p=nullpen, transform T=identity(), transform3 T3=identity4, bool defaulttransform=true, bool defaulttransform3=true, @@ -246,17 +246,17 @@ struct Label { this.embed=embed; this.filltype=filltype; } - + void initalign(string s="", string size="", align align, pen p=nullpen, embed embed=Rotate, filltype filltype=NoFill) { init(s,size,align,p,embed,filltype); } - + void transform(transform T) { this.T=T; defaulttransform=false; } - + void transform3(transform3 T) { this.T3=copy(T); defaulttransform3=false; @@ -268,27 +268,27 @@ struct Label { defaulttransform3,embed,filltype); return L; } - + void position(position pos) { this.position=pos; defaultposition=false; } - + void align(align a) { align.align(a); } void align(align a, align default) { align.align(a,default); } - + void p(pen p0) { if(this.p == nullpen) this.p=p0; } - + void filltype(filltype filltype0) { if(this.filltype == NoFill) this.filltype=filltype0; } - + void label(frame f, transform t=identity(), pair position, pair align) { pen p0=p == nullpen ? currentpen : p; align=length(align)*unit(rotation(t)*align); @@ -309,7 +309,7 @@ struct Label { add(f,d,filltype); } } - + void label(picture pic=currentpicture, pair position, pair align) { if(s == "") return; pic.add(new void (frame f, transform t) { @@ -324,7 +324,7 @@ struct Label { void out(picture pic=currentpicture) { label(pic,position.position,align.dir); } - + void out(picture pic=currentpicture, path g) { bool relative=position.relative; real position=position.position.x; @@ -349,7 +349,7 @@ struct Label { pair position=point(g,position); pic.addBox(position,position,min(f),max(f)); } - + void write(file file=stdout, suffix suffix=endl) { write(file,"\""+s+"\""); if(!defaultposition) write(file,", position=",position.position); @@ -364,11 +364,11 @@ struct Label { } write(file,"",suffix); } - + real relative() { return defaultposition ? 0.5 : position.position.x; }; - + real relative(path g) { return position.relative ? reltime(g,relative()) : relative(); }; @@ -380,12 +380,12 @@ void add(frame f, transform t=identity(), Label L) { L.out(f,t); } - + void add(picture pic=currentpicture, Label L) { L.out(pic); } - + Label operator * (transform t, Label L) { Label tL=L.copy(); @@ -466,20 +466,20 @@ void label(frame f, Label L, pair position, align align=NoAlign, { add(f,Label(L,position,align,p,filltype)); } - + void label(frame f, Label L, align align=NoAlign, pen p=currentpen, filltype filltype=NoFill) { add(f,Label(L,L.position,align,p,filltype)); } - + void label(picture pic=currentpicture, Label L, pair position, align align=NoAlign, pen p=currentpen, filltype filltype=NoFill) { Label L=Label(L,position,align,p,filltype); add(pic,L); } - + void label(picture pic=currentpicture, Label L, align align=NoAlign, pen p=currentpen, filltype filltype=NoFill) { @@ -494,7 +494,7 @@ void label(pair origin, picture pic=currentpicture, Label L, align align=NoAlign label(opic,L,L.position,align,p,filltype); add(pic,opic,origin); } - + void label(picture pic=currentpicture, Label L, explicit path g, align align=NoAlign, pen p=currentpen, filltype filltype=NoFill) { @@ -532,12 +532,12 @@ object operator cast(frame f) { return object(f); } -object operator cast(Label L) +object operator cast(Label L) { return object(L); } -object operator cast(string s) +object operator cast(string s) { return object(s); } @@ -562,7 +562,7 @@ object operator * (transform t, explicit object F) } // Returns a copy of object F aligned in the direction align -object align(object F, pair align) +object align(object F, pair align) { return shift(F.f,align)*F; } @@ -594,7 +594,7 @@ path[] texpath(Label L, bool tex=settings.tex != "none", bool bbox=false) real fontsize; string font; - void operator init(Label L) + void operator init(Label L) { s=replace(L.s,'\n',' '); fontsize=fontsize(L.p); @@ -603,7 +603,7 @@ path[] texpath(Label L, bool tex=settings.tex != "none", bool bbox=false) pen pen() {return fontsize(fontsize)+fontcommand(font);} } - + bool lexorder(stringfont a, stringfont b) { return a.s < b.s || (a.s == b.s && (a.fontsize < b.fontsize || (a.fontsize == b.fontsize && @@ -615,7 +615,7 @@ path[] texpath(Label L, bool tex=settings.tex != "none", bool bbox=false) static stringfont[] stringlist; static bool adjust[]; - + path[] G; stringfont s=stringfont(L); @@ -649,7 +649,7 @@ path[] texpath(Label L, bool tex=settings.tex != "none", bool bbox=false) label(f,L); return transform(box(min(f),max(f)),L); } - + if(stringlist.length > 0) { path[][] g; int n=stringlist.length; @@ -660,9 +660,9 @@ path[] texpath(Label L, bool tex=settings.tex != "none", bool bbox=false) s[i]=adjust[i] ? "."+S.s : S.s; p[i]=adjust[i] ? S.pen()+basealign : S.pen(); } - + g=tex ? _texpath(s,p) : textpath(s,p); - + if(tex) for(int i=0; i < n; ++i) if(adjust[i]) { @@ -670,8 +670,8 @@ path[] texpath(Label L, bool tex=settings.tex != "none", bool bbox=false) g[i].delete(0); g[i]=shift(0,-y)*g[i]; } - - + + for(int i=0; i < stringlist.length; ++i) { stringfont s=stringlist[i]; int j=search(stringcache,s,lexorder)+1; @@ -686,6 +686,6 @@ path[] texpath(Label L, bool tex=settings.tex != "none", bool bbox=false) } texpath=new path[](string s, pen p, bool tex=settings.tex != "none", bool bbox=false) -{ - return texpath(Label(s,p)); -}; + { + return texpath(Label(s,p)); + }; diff --git a/Build/source/utils/asymptote/base/plain_arcs.asy b/Build/source/utils/asymptote/base/plain_arcs.asy index 140bc3cff19..11c603b6152 100644 --- a/Build/source/utils/asymptote/base/plain_arcs.asy +++ b/Build/source/utils/asymptote/base/plain_arcs.asy @@ -1,5 +1,5 @@ bool CCW=true; -bool CW=false; +bool CW=false; path circle(pair c, real r) { @@ -35,7 +35,7 @@ path arc(pair c, real r, real angle1, real angle2, bool direction) { return arc(c,c+r*dir(angle1),c+r*dir(angle2),direction); } - + // return an arc centered at c with radius r > 0 from angle1 to angle2 in // degrees, drawing counterclockwise if angle2 >= angle1 (otherwise clockwise). path arc(pair c, real r, real angle1, real angle2) diff --git a/Build/source/utils/asymptote/base/plain_arrows.asy b/Build/source/utils/asymptote/base/plain_arrows.asy index 96a33dd5a44..79ee403af3d 100644 --- a/Build/source/utils/asymptote/base/plain_arrows.asy +++ b/Build/source/utils/asymptote/base/plain_arrows.asy @@ -12,7 +12,7 @@ real arrowtexfactor=1; real barfactor=arrowfactor; -real arrowsize(pen p=currentpen) +real arrowsize(pen p=currentpen) { return arrowfactor*linewidth(p); } @@ -53,39 +53,39 @@ path arrowbase(path r, pair y, real t, real size) arrowhead DefaultHead; DefaultHead.head=new path(path g, position position=EndPoint, pen p=currentpen, real size=0, real angle=arrowangle) { - if(size == 0) size=DefaultHead.size(p); - bool relative=position.relative; - real position=position.position.x; - if(relative) position=reltime(g,position); - path r=subpath(g,position,0); - pair x=point(r,0); - real t=arctime(r,size); - pair y=point(r,t); - path base=arrowbase(r,y,t,size); - path left=rotate(-angle,x)*r; - path right=rotate(angle,x)*r; - real[] T=arrowbasepoints(base,left,right); - pair denom=point(right,T[1])-y; - real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1; - path left=rotate(-angle*factor,x)*r; - path right=rotate(angle*factor,x)*r; - real[] T=arrowbasepoints(base,left,right); - return subpath(left,0,T[0])--subpath(right,T[1],0)&cycle; + if(size == 0) size=DefaultHead.size(p); + bool relative=position.relative; + real position=position.position.x; + if(relative) position=reltime(g,position); + path r=subpath(g,position,0); + pair x=point(r,0); + real t=arctime(r,size); + pair y=point(r,t); + path base=arrowbase(r,y,t,size); + path left=rotate(-angle,x)*r; + path right=rotate(angle,x)*r; + real[] T=arrowbasepoints(base,left,right); + pair denom=point(right,T[1])-y; + real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1; + path left=rotate(-angle*factor,x)*r; + path right=rotate(angle*factor,x)*r; + real[] T=arrowbasepoints(base,left,right); + return subpath(left,0,T[0])--subpath(right,T[1],0)&cycle; }; arrowhead SimpleHead; SimpleHead.head=new path(path g, position position=EndPoint, pen p=currentpen, real size=0, real angle=arrowangle) { - if(size == 0) size=SimpleHead.size(p); - bool relative=position.relative; - real position=position.position.x; - if(relative) position=reltime(g,position); - path r=subpath(g,position,0); - pair x=point(r,0); - real t=arctime(r,size); - path left=rotate(-angle,x)*r; - path right=rotate(angle,x)*r; - return subpath(left,t,0)--subpath(right,0,t); + if(size == 0) size=SimpleHead.size(p); + bool relative=position.relative; + real position=position.position.x; + if(relative) position=reltime(g,position); + path r=subpath(g,position,0); + pair x=point(r,0); + real t=arctime(r,size); + path left=rotate(-angle,x)*r; + path right=rotate(angle,x)*r; + return subpath(left,t,0)--subpath(right,0,t); }; arrowhead HookHead(real dir=arrowdir, real barb=arrowbarb) @@ -94,34 +94,34 @@ arrowhead HookHead(real dir=arrowdir, real barb=arrowbarb) a.head=new path(path g, position position=EndPoint, pen p=currentpen, real size=0, real angle=arrowangle) { - if(size == 0) size=a.size(p); - angle=min(angle*arrowhookfactor,45); - bool relative=position.relative; - real position=position.position.x; - if(relative) position=reltime(g,position); - path r=subpath(g,position,0); - pair x=point(r,0); - real t=arctime(r,size); - pair y=point(r,t); - path base=arrowbase(r,y,t,size); - path left=rotate(-angle,x)*r; - path right=rotate(angle,x)*r; - real[] T=arrowbasepoints(base,left,right,1); - pair denom=point(right,T[1])-y; - real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1; - path left=rotate(-angle*factor,x)*r; - path right=rotate(angle*factor,x)*r; - real[] T=arrowbasepoints(base,left,right,1); - left=subpath(left,0,T[0]); - right=subpath(right,T[1],0); - pair pl0=point(left,0), pl1=relpoint(left,1); - pair pr0=relpoint(right,0), pr1=relpoint(right,1); - pair M=(pl1+pr0)/2; - pair v=barb*unit(M-pl0); - pl1=pl1+v; pr0=pr0+v; - left=pl0{dir(-dir+degrees(M-pl0,false))}..pl1--M; - right=M--pr0..pr1{dir(dir+degrees(pr1-M,false))}; - return left--right&cycle; + if(size == 0) size=a.size(p); + angle=min(angle*arrowhookfactor,45); + bool relative=position.relative; + real position=position.position.x; + if(relative) position=reltime(g,position); + path r=subpath(g,position,0); + pair x=point(r,0); + real t=arctime(r,size); + pair y=point(r,t); + path base=arrowbase(r,y,t,size); + path left=rotate(-angle,x)*r; + path right=rotate(angle,x)*r; + real[] T=arrowbasepoints(base,left,right,1); + pair denom=point(right,T[1])-y; + real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1; + path left=rotate(-angle*factor,x)*r; + path right=rotate(angle*factor,x)*r; + real[] T=arrowbasepoints(base,left,right,1); + left=subpath(left,0,T[0]); + right=subpath(right,T[1],0); + pair pl0=point(left,0), pl1=relpoint(left,1); + pair pr0=relpoint(right,0), pr1=relpoint(right,1); + pair M=(pl1+pr0)/2; + pair v=barb*unit(M-pl0); + pl1=pl1+v; pr0=pr0+v; + left=pl0{dir(-dir+degrees(M-pl0,false))}..pl1--M; + right=M--pr0..pr1{dir(dir+degrees(pr1-M,false))}; + return left--right&cycle; }; return a; } @@ -129,35 +129,35 @@ arrowhead HookHead=HookHead(); arrowhead TeXHead; TeXHead.size=new real(pen p) -{ - static real hcoef=2.1; // 84/40=abs(base-hint)/base_height - return hcoef*arrowtexfactor*linewidth(p); -}; + { + static real hcoef=2.1; // 84/40=abs(base-hint)/base_height + return hcoef*arrowtexfactor*linewidth(p); + }; TeXHead.arcsize=TeXHead.size; TeXHead.head=new path(path g, position position=EndPoint, pen p=currentpen, real size=0, real angle=arrowangle) { - static real wcoef=1/84; // 1/abs(base-hint) - static path texhead=scale(wcoef)* - ((0,20) .. controls (-75,75) and (-108,158) .. - (-108,166) .. controls (-108,175) and (-100,178) .. - (-93,178) .. controls (-82,178) and (-80,173) .. - (-77,168) .. controls (-62,134) and (-30,61) .. - (70,14) .. controls (82,8) and (84,7) .. - (84,0) .. controls (84,-7) and (82,-8) .. - (70,-14) .. controls (-30,-61) and (-62,-134) .. - (-77,-168) .. controls (-80,-173) and (-82,-178) .. - (-93,-178) .. controls (-100,-178) and (-108,-175).. - (-108,-166).. controls (-108,-158) and (-75,-75) .. - (0,-20)--cycle); - if(size == 0) size=TeXHead.size(p); - path gp=scale(size)*texhead; - bool relative=position.relative; - real position=position.position.x; - if(relative) position=reltime(g,position); - path r=subpath(g,position,0); - pair y=point(r,arctime(r,size)); - return shift(y)*rotate(degrees(-dir(r,arctime(r,0.5*size))))*gp; + static real wcoef=1/84; // 1/abs(base-hint) + static path texhead=scale(wcoef)* + ((0,20) .. controls (-75,75) and (-108,158) .. + (-108,166) .. controls (-108,175) and (-100,178) .. + (-93,178) .. controls (-82,178) and (-80,173) .. + (-77,168) .. controls (-62,134) and (-30,61) .. + (70,14) .. controls (82,8) and (84,7) .. + (84,0) .. controls (84,-7) and (82,-8) .. + (70,-14) .. controls (-30,-61) and (-62,-134) .. + (-77,-168) .. controls (-80,-173) and (-82,-178) .. + (-93,-178) .. controls (-100,-178) and (-108,-175).. + (-108,-166).. controls (-108,-158) and (-75,-75) .. + (0,-20)--cycle); + if(size == 0) size=TeXHead.size(p); + path gp=scale(size)*texhead; + bool relative=position.relative; + real position=position.position.x; + if(relative) position=reltime(g,position); + path r=subpath(g,position,0); + pair y=point(r,arctime(r,size)); + return shift(y)*rotate(degrees(-dir(r,arctime(r,0.5*size))))*gp; }; TeXHead.defaultfilltype=new filltype(pen p) {return Fill(p);}; @@ -169,7 +169,7 @@ private real position(position position, real size, path g, bool center) position *= arclength(g); if(center) position += 0.5*size; position=arctime(g,position); - } else if(center) + } else if(center) position=arctime(g,arclength(subpath(g,0,position))+0.5*size); return position; } @@ -251,7 +251,7 @@ picture arrow(arrowhead arrowhead=DefaultHead, drawarrow(f,arrowhead,t*g,p,size,angle,filltype,position,forwards,margin, center); }); - + pic.addPath(g,p); real position=position(position,size,g,center); @@ -275,7 +275,7 @@ picture arrow2(arrowhead arrowhead=DefaultHead, pic.add(new void(frame f, transform t) { drawarrow2(f,arrowhead,t*g,p,size,angle,filltype,margin); }); - + pic.addPath(g,p); int L=length(g); @@ -291,7 +291,7 @@ void bar(picture pic, pair a, pair d, pen p=currentpen) Draw(opic,-0.5d--0.5d,p+solid); add(pic,opic,a); } - + picture bar(pair a, pair d, pen p=currentpen) { picture pic; @@ -345,7 +345,7 @@ arrowbar MidArrow(arrowhead arrowhead=DefaultHead, return false; }; } - + arrowbar Arrows(arrowhead arrowhead=DefaultHead, real size=0, real angle=arrowangle, filltype filltype=null) @@ -383,7 +383,7 @@ arrowbar EndArcArrow(arrowhead arrowhead=DefaultHead, real size=0, real angle=arcarrowangle, filltype filltype=null, position position=EndPoint)=ArcArrow; - + arrowbar MidArcArrow(arrowhead arrowhead=DefaultHead, real size=0, real angle=arcarrowangle, filltype filltype=null) @@ -395,7 +395,7 @@ arrowbar MidArcArrow(arrowhead arrowhead=DefaultHead, return false; }; } - + arrowbar ArcArrows(arrowhead arrowhead=DefaultHead, real size=0, real angle=arcarrowangle, filltype filltype=null) @@ -406,8 +406,8 @@ arrowbar ArcArrows(arrowhead arrowhead=DefaultHead, return false; }; } - -arrowbar BeginBar(real size=0) + +arrowbar BeginBar(real size=0) { return new bool(picture pic, path g, pen p, margin margin) { real size=size == 0 ? barsize(p) : size; @@ -416,7 +416,7 @@ arrowbar BeginBar(real size=0) }; } -arrowbar Bar(real size=0) +arrowbar Bar(real size=0) { return new bool(picture pic, path g, pen p, margin margin) { int L=length(g); @@ -426,9 +426,9 @@ arrowbar Bar(real size=0) }; } -arrowbar EndBar(real size=0)=Bar; +arrowbar EndBar(real size=0)=Bar; -arrowbar Bars(real size=0) +arrowbar Bars(real size=0) { return new bool(picture pic, path g, pen p, margin margin) { real size=size == 0 ? barsize(p) : size; @@ -469,73 +469,73 @@ void draw(picture pic=currentpicture, Label L=null, path g, // These if statements are ordered in such a way that the most common case // (with just a path and a pen) executes the least bytecode. if (marker == nomarker) - { - if (arrow == None && bar == None) { - if (margin == NoMargin && size(nib(p)) == 0) - { - pic.addExactAbove( - new void(frame f, transform t, transform T, pair, pair) { - _draw(f,t*T*g,p); - }); - pic.addPath(g,p); - - // Jumping over else clauses takes time, so test if we can return - // here. - if (L == null && legend == null) - return; + if (arrow == None && bar == None) + { + if (margin == NoMargin && size(nib(p)) == 0) + { + pic.addExactAbove( + new void(frame f, transform t, transform T, pair, pair) { + _draw(f,t*T*g,p); + }); + pic.addPath(g,p); + + // Jumping over else clauses takes time, so test if we can return + // here. + if (L == null && legend == null) + return; + } + else // With margin or polygonal pen. + { + _draw(pic, g, p, margin); + } + } + else /* arrow or bar */ + { + // Note we are using & instead of && as both arrow and bar need to be + // called. + if (arrow(pic, g, p, margin) & bar(pic, g, p, margin)) + _draw(pic, g, p, margin); + } + + if(L != null && L.s != "") { + L=L.copy(); + L.align(align); + L.p(p); + L.out(pic,g); } - else // With margin or polygonal pen. - { - _draw(pic, g, p, margin); + + if(legend != null && legend.s != "") { + legend.p(p); + pic.legend.push(Legend(legend.s,legend.p,p,marker.f,marker.above)); } } - else /* arrow or bar */ + else /* marker != nomarker */ { + if(marker != nomarker && !marker.above) marker.mark(pic,g); + // Note we are using & instead of && as both arrow and bar need to be // called. - if (arrow(pic, g, p, margin) & bar(pic, g, p, margin)) - _draw(pic, g, p, margin); - } - - if(L != null && L.s != "") { - L=L.copy(); - L.align(align); - L.p(p); - L.out(pic,g); - } - - if(legend != null && legend.s != "") { - legend.p(p); - pic.legend.push(Legend(legend.s,legend.p,p,marker.f,marker.above)); - } - } - else /* marker != nomarker */ - { - if(marker != nomarker && !marker.above) marker.mark(pic,g); - - // Note we are using & instead of && as both arrow and bar need to be - // called. - if ((arrow == None || arrow(pic, g, p, margin)) & - (bar == None || bar(pic, g, p, margin))) - { - _draw(pic, g, p, margin); + if ((arrow == None || arrow(pic, g, p, margin)) & + (bar == None || bar(pic, g, p, margin))) + { + _draw(pic, g, p, margin); + } + + if(L != null && L.s != "") { + L=L.copy(); + L.align(align); + L.p(p); + L.out(pic,g); } - if(L != null && L.s != "") { - L=L.copy(); - L.align(align); - L.p(p); - L.out(pic,g); - } + if(legend != null && legend.s != "") { + legend.p(p); + pic.legend.push(Legend(legend.s,legend.p,p,marker.f,marker.above)); + } - if(legend != null && legend.s != "") { - legend.p(p); - pic.legend.push(Legend(legend.s,legend.p,p,marker.f,marker.above)); + if(marker != nomarker && marker.above) marker.mark(pic,g); } - - if(marker != nomarker && marker.above) marker.mark(pic,g); - } } // Draw a fixed-size line about the user-coordinate 'origin'. @@ -551,12 +551,12 @@ void draw(pair origin, picture pic=currentpicture, Label L=null, path g, void draw(picture pic=currentpicture, explicit path[] g, pen p=currentpen, Label legend=null, marker marker=nomarker) -{ +{ // This could be optimized to size and draw the entire array as a batch. - for(int i=0; i < g.length-1; ++i) + for(int i=0; i < g.length-1; ++i) draw(pic,g[i],p,marker); if(g.length > 0) draw(pic,g[g.length-1],p,legend,marker); -} +} void draw(picture pic=currentpicture, guide[] g, pen p=currentpen, Label legend=null, marker marker=nomarker) @@ -621,7 +621,7 @@ frame[] fit(string prefix="", picture[] pictures, string format="", { if(pictures.length == 0) return new frame[]; - + picture all; size(all,pictures[0]); for(picture pic : pictures) diff --git a/Build/source/utils/asymptote/base/plain_bounds.asy b/Build/source/utils/asymptote/base/plain_bounds.asy index b74a6ceee6a..c4e24721773 100644 --- a/Build/source/utils/asymptote/base/plain_bounds.asy +++ b/Build/source/utils/asymptote/base/plain_bounds.asy @@ -4,7 +4,7 @@ include plain_scaling; // have been added, this is only an approximation since it takes the bounds of // their transformed bounding box. private void addTransformedCoords(coords2 dest, transform t, - coords2 point, coords2 min, coords2 max) + coords2 point, coords2 min, coords2 max) { dest.push(t, point, point); @@ -47,7 +47,7 @@ private void addIfMaximal(coord[] dest, coord[] src) for (coord c : src) addIfMaximal(dest, c.user, c.truesize); } - + // Same as addIfMaximal, but testing for minimal coords. private void addIfMinimal(coord[] coords, real user, real truesize) { for (coord c : coords) @@ -130,7 +130,7 @@ private struct freezableBounds { void operator init(coord[] left, coord[] bottom, coord[] right, coord[] top) { this.left = left; - this.bottom = bottom; + this.bottom = bottom; this.right = right; this.top = top; } @@ -197,7 +197,7 @@ private struct freezableBounds { void addBox(pair userMin, pair userMax, pair trueMin, pair trueMax) { assert(!frozen); - this.min.push(userMin, trueMin); + this.min.push(userMin, trueMin); this.max.push(userMax, trueMax); } @@ -334,7 +334,7 @@ private struct freezableBounds { addLocalsToExtremes(t, e); } - + private void addLocalsToExtremes(extremes e) { addMinToExtremes(e, point); addMaxToExtremes(e, point); @@ -466,7 +466,7 @@ private struct freezableBounds { acc.pushUserCoords(min, max); if (pathBounds.length > 0) acc.push(min(pathBounds), max(pathBounds)); - for (var pp : pathpenBounds) + for (var pp : pathpenBounds) if(size(pp.g) > 0) acc.push(min(pp.g), max(pp.g)); for (var link : links) @@ -623,13 +623,13 @@ private struct freezableBounds { // Get the extremal coordinates. extremes e = extremes(); - + real sx; if(xunitsize == 0) { if(xsize != 0) sx=calculateScaling("x",e.left,e.right,xsize,warn); } else sx=xunitsize; - /* Possible alternative code : + /* Possible alternative code : real sx = xunitsize != 0 ? xunitsize : xsize != 0 ? calculateScaling("x", Coords.x, xsize, warn) : 0; */ @@ -697,7 +697,7 @@ struct bounds { makeMutable(); base.append(b.base); } - + void append(transform t, bounds b) { // makeMutable will be called by append. if (t == identity()) @@ -760,7 +760,7 @@ struct bounds { makeMutable(); base.yclip(Min,Max); } - + void clip(pair Min, pair Max) { // TODO: If the user bounds have been manually altered, they may be // incorrect after the clip. diff --git a/Build/source/utils/asymptote/base/plain_margins.asy b/Build/source/utils/asymptote/base/plain_margins.asy index c4522754481..fbd0163050c 100644 --- a/Build/source/utils/asymptote/base/plain_margins.asy +++ b/Build/source/utils/asymptote/base/plain_margins.asy @@ -5,7 +5,7 @@ struct marginT { typedef marginT margin(path, pen); -path trim(path g, real begin, real end) { +path trim(path g, real begin, real end=begin) { real a=arctime(g,begin); real b=arctime(g,arclength(g)-end); return a <= b ? subpath(g,a,b) : point(g,a); @@ -36,7 +36,7 @@ margin NoMargin() }; } -margin Margin(real begin, real end) +margin Margin(real begin, real end=begin) { return new marginT(path g, pen p) { marginT margin; @@ -48,7 +48,7 @@ margin Margin(real begin, real end) }; } -margin PenMargin(real begin, real end) +margin PenMargin(real begin, real end=begin) { return new marginT(path g, pen p) { marginT margin; @@ -60,7 +60,7 @@ margin PenMargin(real begin, real end) }; } -margin DotMargin(real begin, real end) +margin DotMargin(real begin, real end=begin) { return new marginT(path g, pen p) { marginT margin; @@ -73,7 +73,7 @@ margin DotMargin(real begin, real end) }; } -margin TrueMargin(real begin, real end) +margin TrueMargin(real begin, real end=begin) { return new marginT(path g, pen p) { marginT margin; diff --git a/Build/source/utils/asymptote/base/plain_picture.asy b/Build/source/utils/asymptote/base/plain_picture.asy index 025e6741cfd..c0c189ee691 100644 --- a/Build/source/utils/asymptote/base/plain_picture.asy +++ b/Build/source/utils/asymptote/base/plain_picture.asy @@ -1355,50 +1355,43 @@ void gouraudshade(picture pic=currentpicture, path[] g, bool stroke=false, } void tensorshade(picture pic=currentpicture, path[] g, bool stroke=false, - pen fillrule=currentpen, pen[][] p, path[] b=g, + pen fillrule=currentpen, pen[][] p, path[] b=new path[], pair[][] z=new pair[][], bool copy=true) { + bool compact=b.length == 0 || b[0] == nullpath; if(copy) { g=copy(g); p=copy(p); - b=copy(b); + if(!compact) b=copy(b); z=copy(z); } pic.add(new void(frame f, transform t) { pair[][] Z=new pair[z.length][]; for(int i=0; i < z.length; ++i) Z[i]=t*z[i]; - tensorshade(f,t*g,stroke,fillrule,p,t*b,Z,false); + path[] G=t*g; + if(compact) + tensorshade(f,G,stroke,fillrule,p,Z,false); + else + tensorshade(f,G,stroke,fillrule,p,t*b,Z,false); },true); pic.addPath(g); } void tensorshade(frame f, path[] g, bool stroke=false, pen fillrule=currentpen, pen[] p, - path b=g.length > 0 ? g[0] : nullpath) + path b=g.length > 0 ? g[0] : nullpath, pair[] z=new pair[]) { - tensorshade(f,g,stroke,fillrule,new pen[][] {p},b); -} - -void tensorshade(frame f, path[] g, bool stroke=false, - pen fillrule=currentpen, pen[] p, - path b=g.length > 0 ? g[0] : nullpath, pair[] z) -{ - tensorshade(f,g,stroke,fillrule,new pen[][] {p},b,new pair[][] {z}); -} - -void tensorshade(picture pic=currentpicture, path[] g, bool stroke=false, - pen fillrule=currentpen, pen[] p, - path b=g.length > 0 ? g[0] : nullpath) -{ - tensorshade(pic,g,stroke,fillrule,new pen[][] {p},b); + tensorshade(f,g,stroke,fillrule,new pen[][] {p},b, + z.length > 0 ? new pair[][] {z} : new pair[][]); } void tensorshade(picture pic=currentpicture, path[] g, bool stroke=false, pen fillrule=currentpen, pen[] p, - path b=g.length > 0 ? g[0] : nullpath, pair[] z) + path b=nullpath, pair[] z=new pair[]) { - tensorshade(pic,g,stroke,fillrule,new pen[][] {p},b,new pair[][] {z}); + tensorshade(pic,g,stroke,fillrule,new pen[][] {p},b, + z.length > 0 ? new pair[][] {z} : new pair[][]); } // Smoothly shade the regions between consecutive paths of a sequence using a diff --git a/Build/source/utils/asymptote/base/plain_shipout.asy b/Build/source/utils/asymptote/base/plain_shipout.asy index e062a775465..388a03a557b 100644 --- a/Build/source/utils/asymptote/base/plain_shipout.asy +++ b/Build/source/utils/asymptote/base/plain_shipout.asy @@ -86,14 +86,10 @@ void shipout(string prefix=defaultfilename, frame f, } } - if(outformat(format) == "html") { - warning("htmltosvg", - "html output requested for 2D picture; generating svg image instead..."); - format="svg"; - } - - if(settings.xasy || (!implicitshipout && prefix == defaultfilename)) { - if(prefix == defaultfilename) { + bool defaultprefix=prefix==defaultfilename; + + if(settings.xasy || (!implicitshipout && defaultprefix)) { + if(defaultprefix) { currentpicture.clear(); add(f,group=false); } @@ -132,8 +128,15 @@ void shipout(string prefix=defaultfilename, picture pic=currentpicture, } frame f; transform t=pic.calculateTransform(); - if(currentpicture.fitter == null) - f=pic.fit(t); + if(currentpicture.fitter == null) { + pen background=currentlight.background; + if(settings.outformat == "html" && background == nullpen) + background=white; + if(background != nullpen) + f=bbox(pic,nullpen,Fill(background)); + else + f=pic.fit(t); + } else f=pic.fit(prefix,format,view=view,options,script,light,P); diff --git a/Build/source/utils/asymptote/base/rationalSimplex.asy b/Build/source/utils/asymptote/base/rationalSimplex.asy index 823d91c2d0b..6070c7cbdb9 100644 --- a/Build/source/utils/asymptote/base/rationalSimplex.asy +++ b/Build/source/utils/asymptote/base/rationalSimplex.asy @@ -1,8 +1,8 @@ // Rational simplex solver written by John C. Bowman and Pouria Ramazi, 2018. import rational; -void simplexStandard(rational[] c, rational[][] A, int[] s=new int[], - rational[] b) {} +void simplexInit(rational[] c, rational[][] A, int[] s=new int[], + rational[] b, int count) {} void simplexTableau(rational[][] E, int[] Bindices, int I=-1, int J=-1) {} void simplexPhase1(rational[] c, rational[][] A, rational[] b, int[] Bindices) {} @@ -35,7 +35,9 @@ struct simplex { int case; rational[] x; + rational[] xStandard; rational cost; + rational[] d; int m,n; int J; @@ -319,15 +321,26 @@ struct simplex { case=(dual ? iterateDual : iterate)(D,n,Bindices); simplexTableau(D,Bindices); - if(case != OPTIMAL) - return; + x=new rational[n]; for(int j=0; j < n; ++j) x[j]=0; for(int k=0; k < m; ++k) x[Bindices[k]-1]=D[k][0]; + if(case == UNBOUNDED) { + d=new rational[n]; + for(int j=0; j < n; ++j) + d[j]=0; + d[J-1]=1; + for(int k=0; k < m; ++k) + d[Bindices[k]-1]=-D[k][J]; + } + + if(case != OPTIMAL) + return; + cost=-Dm[0]; } @@ -391,10 +404,13 @@ struct simplex { } rational[] C=concat(c,array(count,rational(0))); - if(count > 0) simplexStandard(C,a,b); + simplexInit(C,a,b,count); operator init(C,a,b,phase1,dual); - if(case == OPTIMAL && count > 0) - x.delete(n,n+count-1); + if(case != INFEASIBLE) { + xStandard=copy(x); + if(count > 0) + x.delete(n,n+count-1); + } } } diff --git a/Build/source/utils/asymptote/base/slide.asy b/Build/source/utils/asymptote/base/slide.asy index 8a787c37a5b..9d26c680652 100644 --- a/Build/source/utils/asymptote/base/slide.asy +++ b/Build/source/utils/asymptote/base/slide.asy @@ -309,7 +309,7 @@ void remark(bool center=false, string s, pair align=0, pen p=itempen, void center(string s, pen p=itempen) { - remark("\center "+s,p); + remark(center=true,"\center "+s,p); } void vbox(string s, pen p=itempen) diff --git a/Build/source/utils/asymptote/base/slopefield.asy b/Build/source/utils/asymptote/base/slopefield.asy index bdbb0252670..e87e2cd36f9 100644 --- a/Build/source/utils/asymptote/base/slopefield.asy +++ b/Build/source/utils/asymptote/base/slopefield.asy @@ -19,7 +19,6 @@ picture slopefield(real f(real,real), pair a, pair b, draw(pic,(cp.x-mp,cp.y-mp*slope)--(cp.x+mp,cp.y+mp*slope),p,arrow); } } - clip(pic,box(a,b)); return pic; } diff --git a/Build/source/utils/asymptote/base/three.asy b/Build/source/utils/asymptote/base/three.asy index 75f758dd353..d7a20b516c4 100644 --- a/Build/source/utils/asymptote/base/three.asy +++ b/Build/source/utils/asymptote/base/three.asy @@ -1065,7 +1065,7 @@ triple dir(path3 p) triple dir(path3 p, path3 h) { - return 0.5*(dir(p)+dir(h)); + return unit(dir(p)+dir(h)); } // return the point on path3 p at arclength L @@ -1880,6 +1880,14 @@ transform3 align(triple u) return c >= 0 ? identity(4) : diagonal(1,-1,-1,1); } +// Align Label with normal in direction dir. +Label align(Label L, triple dir) +{ + Label L=L.copy(); + L.transform3(align(unit(dir))); + return L; +} + // return a rotation that maps X,Y to the projection plane. transform3 transform3(projection P=currentprojection) { @@ -2554,25 +2562,6 @@ private string Format(transform3 t, string sep=" ") Format(t[0][3])+sep+Format(t[1][3])+sep+Format(t[2][3]); } -void writeJavaScript(string name, string preamble, string script) -{ - file out=output(name); - write(out,preamble); - if(script != "") { - write(out,endl); - file in=input(script); - while(true) { - string line=in; - if(eof(in)) break; - write(out,line,endl); - } - } - close(out); - if(settings.verbose > 1) write("Wrote "+name); - if(!settings.inlinetex) - file3.push(name); -} - pair viewportmargin(pair lambda) { return maxbound(0.5*(viewportsize-lambda),viewportmargin); @@ -2678,13 +2667,13 @@ struct scene if(!P.absolute) { this.P=t*P; + if(this.P.autoadjust || this.P.infinity) + adjusted=adjusted | this.P.adjust(m,M); if(this.P.center && settings.render != 0) { triple target=0.5*(m+M); this.P.target=target; this.P.calculate(); } - if(this.P.autoadjust || this.P.infinity) - adjusted=adjusted | this.P.adjust(m,M); } bool scale=xsize != 0 || ysize != 0; diff --git a/Build/source/utils/asymptote/base/three_light.asy b/Build/source/utils/asymptote/base/three_light.asy index 25db6ad6d27..46b0fef7d0e 100644 --- a/Build/source/utils/asymptote/base/three_light.asy +++ b/Build/source/utils/asymptote/base/three_light.asy @@ -125,7 +125,7 @@ light White=light(new pen[] {rgb(0.38,0.38,0.45),rgb(0.6,0.6,0.67), rgb(0.5,0.5,0.57)},specularfactor=3, new triple[] {(-2,-1.5,-0.5),(2,1.1,-2.5),(-0.5,0,2)}); -light Headlamp=light(gray(0.8),specular=gray(0.7), +light Headlamp=light(white,specular=gray(0.7), specularfactor=3,dir(42,48)); currentlight=Headlamp; diff --git a/Build/source/utils/asymptote/base/three_surface.asy b/Build/source/utils/asymptote/base/three_surface.asy index 8348d7ac3af..7d64ad22d72 100644 --- a/Build/source/utils/asymptote/base/three_surface.asy +++ b/Build/source/utils/asymptote/base/three_surface.asy @@ -1374,6 +1374,10 @@ void draw3D(frame f, patch s, triple center=O, material m, bool primitive=false) { bool straight=s.straight && s.planar; + + // Planar Bezier surfaces require extra precision in WebGL + int digits=s.planar && !straight ? 12 : settings.digits; + if(s.colors.length > 0) { if(prc() && light.on()) straight=false; // PRC vertex colors (for quads only) ignore lighting @@ -1383,7 +1387,7 @@ void draw3D(frame f, patch s, triple center=O, material m, (s.triangular ? drawbeziertriangle : draw) (f,s.P,center,straight,m.p,m.opacity,m.shininess, - m.metallic,m.fresnel0,s.colors,interaction.type,primitive); + m.metallic,m.fresnel0,s.colors,interaction.type,digits,primitive); } void _draw(frame f, path3 g, triple center=O, material m, @@ -1500,8 +1504,18 @@ void tensorshade(transform t=identity(), frame f, patch s, p.push(p[0]); s=tensor(s); } else p=s.colors(m,light); - tensorshade(f,box(t*s.min(P),t*s.max(P)),m.diffuse(), - p,t*project(s.external(),P,1),t*project(s.internal(),P)); + path g=t*project(s.external(),P,1); + pair[] internal=t*project(s.internal(),P); + pen fillrule=m.diffuse(); + if(inside(g,internal[0],fillrule) && inside(g,internal[1],fillrule) && + inside(g,internal[2],fillrule) && inside(g,internal[3],fillrule)) { + if(p[0] == p[1] && p[1] == p[2] && p[2] == p[3]) + fill(f,g,fillrule+p[0]); + else + tensorshade(f,g,fillrule,p,internal); + } else { + tensorshade(f,box(t*s.min(P),t*s.max(P)),fillrule,p,g,internal); + } } restricted pen[] nullpens={nullpen}; diff --git a/Build/source/utils/asymptote/base/three_tube.asy b/Build/source/utils/asymptote/base/three_tube.asy index 3a7902587e9..60085a7d512 100644 --- a/Build/source/utils/asymptote/base/three_tube.asy +++ b/Build/source/utils/asymptote/base/three_tube.asy @@ -159,10 +159,10 @@ struct tube triple c0=postcontrol(g,0); triple c1=precontrol(g,1); triple z1=point(g,1); - real norm=sqrtEpsilon*max(abs(z0),abs(c0),abs(c1),abs(z1)); + real norm=sqrtEpsilon*max(abs(z0),abs(c0),abs(c1),abs(z1),r); surface[] s; void Split(triple z0, triple c0, triple c1, triple z1, - real depth=mantissaBits) { + int depth=mantissaBits) { if(depth > 0) { pair threshold(triple z0, triple c0, triple c1) { triple u=c1-z0; diff --git a/Build/source/utils/asymptote/base/tube.asy b/Build/source/utils/asymptote/base/tube.asy index cfaf458db42..756eeabdda8 100644 --- a/Build/source/utils/asymptote/base/tube.asy +++ b/Build/source/utils/asymptote/base/tube.asy @@ -14,10 +14,10 @@ real tubegranularity=1e-7; void render(path3 s, real r, void f(path3, real)) { void Split(triple z0, triple c0, triple c1, triple z1, real t0=0, real t1=1, - real depth=mantissaBits) { + int depth=mantissaBits) { if(depth > 0) { real S=straightness(z0,c0,c1,z1); - if(S > max(tubegranularity*max(abs(z0),abs(c0),abs(c1),abs(z1)))) { + if(S > max(tubegranularity*max(abs(z0),abs(c0),abs(c1),abs(z1),r))) { --depth; triple m0=0.5*(z0+c0); triple m1=0.5*(c0+c1); diff --git a/Build/source/utils/asymptote/base/unicode.asy b/Build/source/utils/asymptote/base/unicode.asy deleted file mode 100644 index 33571e8341a..00000000000 --- a/Build/source/utils/asymptote/base/unicode.asy +++ /dev/null @@ -1,2 +0,0 @@ -usepackage("ucs"); -usepackage("inputenc","utf8x"); diff --git a/Build/source/utils/asymptote/base/webgl/asygl.js b/Build/source/utils/asymptote/base/webgl/asygl.js index 619986d015f..db8810f260f 100644 --- a/Build/source/utils/asymptote/base/webgl/asygl.js +++ b/Build/source/utils/asymptote/base/webgl/asygl.js @@ -1,6 +1,6 @@ /*@license AsyGL: Render Bezier patches and triangles via subdivision with WebGL. - Copyright 2019: John C. Bowman and Supakorn "Jamie" Rassameemasmuang + Copyright 2019-2020: John C. Bowman and Supakorn "Jamie" Rassameemasmuang University of Alberta This program is free software; you can redistribute it and/or modify @@ -36,4 +36,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/ -let vertex="\nattribute vec3 position;\n#ifdef WIDTH\nattribute float width;\n#endif\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\nattribute float materialIndex;\n#ifdef COLOR\nattribute vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\n#endif\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\nvarying vec4 emissive;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvoid main(void)\n{\n vec4 v=vec4(position,1.0);\n gl_Position=projViewMat*v;\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n ViewPosition=(viewMat*v).xyz;\n#endif \n Normal=normalize(normal*normMat);\n \n Material m;\n#ifdef TRANSPARENT\n m=Materials[int(abs(materialIndex))-1];\n emissive=m.emissive;\n if(materialIndex >= 0.0) {\n diffuse=m.diffuse;\n } else {\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n }\n#else\n m=Materials[int(materialIndex)];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif\n#endif\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[int(materialIndex)].emissive;\n#endif\n#ifdef WIDTH\n gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\n\nfloat Roughness2;\nvec3 normal;\n\nstruct Light {\n vec3 direction;\n vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\nfloat NDF_TRG(vec3 h)\n{\n float ndoth=max(dot(normal,h),0.0);\n float alpha2=Roughness2*Roughness2;\n float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n \nfloat GGX_Geom(vec3 v)\n{\n float ndotv=max(dot(v,normal),0.0);\n float ap=1.0+Roughness2;\n float k=0.125*ap*ap;\n return ndotv/((ndotv*(1.0-k))+k);\n}\n \nfloat Geom(vec3 v, vec3 l)\n{\n return GGX_Geom(v)*GGX_Geom(l);\n}\n \nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n float a=1.0-max(dot(h,v),0.0);\n float b=a*a;\n return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n \n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n vec3 lambertian=diffuse.rgb;\n vec3 h=normalize(lightDirection+viewDirection);\n \n float omegain=max(dot(viewDirection,normal),0.0);\n float omegali=max(dot(lightDirection,normal),0.0);\n \n float D=NDF_TRG(h);\n float G=Geom(viewDirection,lightDirection);\n float F=Fresnel(h,viewDirection,fresnel0);\n \n float denom=4.0*omegain*omegali;\n float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n \n vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n vec3 metal=rawReflectance*diffuse.rgb;\n \n return mix(dielectric,metal,metallic);\n}\n#endif\nvarying vec4 emissive;\n \nvoid main(void)\n{\n#if defined(NORMAL) && nlights > 0\n normal=normalize(Normal);\n normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n vec3 viewDir=-normalize(ViewPosition);\n#endif\n Roughness2=roughness*roughness;\n vec3 color=emissive.rgb;\n for(int i=0; i < nlights; ++i) {\n Light Li=Lights[i];\n vec3 L=Li.direction;\n float cosTheta=max(dot(normal,L),0.0);\n vec3 radiance=cosTheta*Li.color;\n color += BRDF(viewDir,L)*radiance;\n }\n gl_FragColor=vec4(color,diffuse.a);\n#else\n gl_FragColor=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var a in i)("object"==typeof exports?exports:t)[a]=i[a]}}("undefined"!=typeof self?self:this,function(){return function(t){var e={};function i(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,a){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:a})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=a*Math.max(1,Math.abs(t),Math.abs(e))};var a=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var a=n(i(2)),r=n(i(3));function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=a,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],d=e[8],c=d*s-o*l,m=-d*n+o*h,f=l*n-s*h,u=i*c+a*m+r*f;if(!u)return null;return u=1/u,t[0]=c*u,t[1]=(-d*a+r*l)*u,t[2]=(o*a-r*s)*u,t[3]=m*u,t[4]=(d*i-r*h)*u,t[5]=(-o*i+r*n)*u,t[6]=f*u,t[7]=(-l*i+a*h)*u,t[8]=(s*i-a*n)*u,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],d=e[8],c=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],g=e[15],w=i*o-a*s,x=i*h-r*s,M=i*l-n*s,b=a*h-r*o,A=a*l-n*o,S=r*l-n*h,P=d*p-c*u,R=d*v-m*u,T=d*g-f*u,y=c*v-m*p,D=c*g-f*p,I=m*g-f*v,z=w*I-x*D+M*y+b*T-A*R+S*P;if(!z)return null;return z=1/z,t[0]=(o*I-h*D+l*y)*z,t[1]=(r*D-a*I-n*y)*z,t[2]=(p*S-v*A+g*b)*z,t[3]=(m*A-c*S-f*b)*z,t[4]=(h*T-s*I-l*R)*z,t[5]=(i*I-r*T+n*R)*z,t[6]=(v*M-u*S-g*x)*z,t[7]=(d*S-m*M+f*x)*z,t[8]=(s*D-o*T+l*P)*z,t[9]=(a*T-i*D-n*P)*z,t[10]=(u*A-p*M+g*w)*z,t[11]=(c*M-d*A-f*w)*z,t[12]=(o*R-s*y-h*P)*z,t[13]=(i*y-a*R+r*P)*z,t[14]=(p*x-u*b-v*w)*z,t[15]=(d*b-c*x+m*w)*z,t},e.multiply=r,e.translate=function(t,e,i){var a=i[0],r=i[1],n=i[2],s=void 0,o=void 0,h=void 0,l=void 0,d=void 0,c=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,g=void 0;e===t?(t[12]=e[0]*a+e[4]*r+e[8]*n+e[12],t[13]=e[1]*a+e[5]*r+e[9]*n+e[13],t[14]=e[2]*a+e[6]*r+e[10]*n+e[14],t[15]=e[3]*a+e[7]*r+e[11]*n+e[15]):(s=e[0],o=e[1],h=e[2],l=e[3],d=e[4],c=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],g=e[11],t[0]=s,t[1]=o,t[2]=h,t[3]=l,t[4]=d,t[5]=c,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=g,t[12]=s*a+d*r+u*n+e[12],t[13]=o*a+c*r+p*n+e[13],t[14]=h*a+m*r+v*n+e[14],t[15]=l*a+f*r+g*n+e[15]);return t},e.rotate=function(t,e,i,r){var n=r[0],s=r[1],o=r[2],h=Math.sqrt(n*n+s*s+o*o),l=void 0,d=void 0,c=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,g=void 0,w=void 0,x=void 0,M=void 0,b=void 0,A=void 0,S=void 0,P=void 0,R=void 0,T=void 0,y=void 0,D=void 0,I=void 0,z=void 0,E=void 0,O=void 0;if(Math.abs(h)<a.EPSILON)return null;n*=h=1/h,s*=h,o*=h,l=Math.sin(i),d=Math.cos(i),c=1-d,m=e[0],f=e[1],u=e[2],p=e[3],v=e[4],g=e[5],w=e[6],x=e[7],M=e[8],b=e[9],A=e[10],S=e[11],P=n*n*c+d,R=s*n*c+o*l,T=o*n*c-s*l,y=n*s*c-o*l,D=s*s*c+d,I=o*s*c+n*l,z=n*o*c+s*l,E=s*o*c-n*l,O=o*o*c+d,t[0]=m*P+v*R+M*T,t[1]=f*P+g*R+b*T,t[2]=u*P+w*R+A*T,t[3]=p*P+x*R+S*T,t[4]=m*y+v*D+M*I,t[5]=f*y+g*D+b*I,t[6]=u*y+w*D+A*I,t[7]=p*y+x*D+S*I,t[8]=m*z+v*E+M*O,t[9]=f*z+g*E+b*O,t[10]=u*z+w*E+A*O,t[11]=p*z+x*E+S*O,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r=i[0],n=i[1],s=i[2],o=Math.sqrt(r*r+n*n+s*s),h=void 0,l=void 0,d=void 0;if(Math.abs(o)<a.EPSILON)return null;return r*=o=1/o,n*=o,s*=o,h=Math.sin(e),l=Math.cos(e),d=1-l,t[0]=r*r*d+l,t[1]=n*r*d+s*h,t[2]=s*r*d-n*h,t[3]=0,t[4]=r*n*d-s*h,t[5]=n*n*d+l,t[6]=s*n*d+r*h,t[7]=0,t[8]=r*s*d+n*h,t[9]=n*s*d-r*h,t[10]=s*s*d+l,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,a,r,n,s){var o=1/(i-e),h=1/(r-a),l=1/(n-s);return t[0]=2*n*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*n*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+a)*h,t[10]=(s+n)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*n*2*l,t[15]=0,t},e.ortho=function(t,e,i,a,r,n,s){var o=1/(e-i),h=1/(a-r),l=1/(n-s);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+a)*h,t[14]=(s+n)*l,t[15]=1,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var a=e[0],r=e[1],n=e[2],s=e[3],o=e[4],h=e[5],l=e[6],d=e[7],c=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],g=e[14],w=e[15],x=i[0],M=i[1],b=i[2],A=i[3];return t[0]=x*a+M*o+b*c+A*p,t[1]=x*r+M*h+b*m+A*v,t[2]=x*n+M*l+b*f+A*g,t[3]=x*s+M*d+b*u+A*w,x=i[4],M=i[5],b=i[6],A=i[7],t[4]=x*a+M*o+b*c+A*p,t[5]=x*r+M*h+b*m+A*v,t[6]=x*n+M*l+b*f+A*g,t[7]=x*s+M*d+b*u+A*w,x=i[8],M=i[9],b=i[10],A=i[11],t[8]=x*a+M*o+b*c+A*p,t[9]=x*r+M*h+b*m+A*v,t[10]=x*n+M*l+b*f+A*g,t[11]=x*s+M*d+b*u+A*w,x=i[12],M=i[13],b=i[14],A=i[15],t[12]=x*a+M*o+b*c+A*p,t[13]=x*r+M*h+b*m+A*v,t[14]=x*n+M*l+b*f+A*g,t[15]=x*s+M*d+b*u+A*w,t}}])});let canvasWidth,canvasHeight,b,B,angle,Zoom0,viewportmargin,zoomFactor,zoomPinchFactor,zoomPinchCap,zoomStep,shiftHoldDistance,shiftWaitTime,vibrateTime,embedded,canvas,gl,alpha,offscreen,context,maxMaterials,halfCanvasWidth,halfCanvasHeight,Zoom,P=[],Materials=[],Lights=[],Centers=[],Background=[1,1,1,1],absolute=!1,viewportshift=[0,0],nlights=0,Nmaterials=2,materials=[],pixel=.75,FillFactor=.1,maxViewportWidth=window.innerWidth,maxViewportHeight=window.innerHeight;const windowTrim=10;let lastzoom,H,zmin,zmax,size2,ArcballFactor,positionBuffer,materialBuffer,colorBuffer,indexBuffer,resizeStep=1.2,third=1/3,rotMat=mat4.create(),projMat=mat4.create(),viewMat=mat4.create(),projViewMat=mat4.create(),normMat=mat3.create(),viewMat3=mat3.create(),cjMatInv=mat4.create(),T=mat4.create(),center={x:0,y:0,z:0},shift={x:0,y:0},viewParam={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},remesh=!0,wireframe=0,mouseDownOrTouchActive=!1,lastMouseX=null,lastMouseY=null,touchID=null,Positions=[],Normals=[],Colors=[],Indices=[];class Material{constructor(t,e,i,a,r,n){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=a,this.metallic=r,this.fresnel0=n}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Materials["+e+"]."+i);gl.uniform4fv(i("diffuse"),new Float32Array(this.diffuse)),gl.uniform4fv(i("emissive"),new Float32Array(this.emissive)),gl.uniform4fv(i("specular"),new Float32Array(this.specular)),gl.uniform4f(i("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let indexExt,TRIANGLES,material0Data,material1Data,materialData,colorData,transparentData,triangleData,materialIndex,enumPointLight=1,enumDirectionalLight=2;class Light{constructor(t,e){this.direction=t,this.color=e}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Lights["+e+"]."+i);gl.uniform3fv(i("direction"),new Float32Array(this.direction)),gl.uniform3fv(i("color"),new Float32Array(this.color))}}function initShaders(){let t=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);maxMaterials=Math.floor((t-14)/4),Nmaterials=Math.min(Math.max(Nmaterials,Materials.length),maxMaterials),pixelShader=initShader(["WIDTH"]),materialShader=initShader(["NORMAL"]),colorShader=initShader(["NORMAL","COLOR"]),transparentShader=initShader(["NORMAL","COLOR","TRANSPARENT"])}function deleteShaders(){gl.deleteProgram(transparentShader),gl.deleteProgram(colorShader),gl.deleteProgram(materialShader),gl.deleteProgram(pixelShader)}function setBuffers(){positionBuffer=gl.createBuffer(),materialBuffer=gl.createBuffer(),colorBuffer=gl.createBuffer(),indexBuffer=gl.createBuffer()}function noGL(){gl||alert("Could not initialize WebGL")}function saveAttributes(){let t=window.top.document.asygl[alpha];t.gl=gl,t.nlights=Lights.length,t.Nmaterials=Nmaterials,t.maxMaterials=maxMaterials,t.pixelShader=pixelShader,t.materialShader=materialShader,t.colorShader=colorShader,t.transparentShader=transparentShader}function restoreAttributes(){let t=window.top.document.asygl[alpha];gl=t.gl,nlights=t.nlights,Nmaterials=t.Nmaterials,maxMaterials=t.maxMaterials,pixelShader=t.pixelShader,materialShader=t.materialShader,colorShader=t.colorShader,transparentShader=t.transparentShader}function initGL(){if(alpha=Background[3]<1,embedded){let t=window.top.document;null==t.asygl&&(t.asygl=Array(2)),context=canvas.getContext("2d"),(offscreen=t.offscreen)||(offscreen=t.createElement("canvas"),t.offscreen=offscreen),t.asygl[alpha]&&t.asygl[alpha].gl?(restoreAttributes(),(Lights.length!=nlights||Math.min(Materials.length,maxMaterials)>Nmaterials)&&(initShaders(),saveAttributes())):((gl=offscreen.getContext("webgl",{alpha:alpha}))||noGL(),initShaders(),t.asygl[alpha]={},saveAttributes())}else(gl=canvas.getContext("webgl",{alpha:alpha}))||noGL(),initShaders();setBuffers(),indexExt=gl.getExtension("OES_element_index_uint"),TRIANGLES=gl.TRIANGLES,material0Data=new vertexBuffer(gl.POINTS),material1Data=new vertexBuffer(gl.LINES),materialData=new vertexBuffer,colorData=new vertexBuffer,transparentData=new vertexBuffer,triangleData=new vertexBuffer}function getShader(t,e,i,a=[]){let r=`#version 100\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n#else\n precision mediump float;\n#endif\n #define nlights ${0==wireframe?Lights.length:0}\n\n const int Nlights=${Math.max(Lights.length,1)};\n\n #define Nmaterials ${Nmaterials}\n`;orthographic&&(r+="#define ORTHOGRAPHIC\n"),a.forEach(t=>r+="#define "+t+"\n");let n=t.createShader(i);return t.shaderSource(n,r+e),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS)?n:(alert(t.getShaderInfoLog(n)),null)}function drawBuffer(t,e,i=t.indices){if(0==t.indices.length)return;let a=e!=pixelShader;setUniforms(t,e),gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(t.vertices),gl.STATIC_DRAW),gl.vertexAttribPointer(positionAttribute,3,gl.FLOAT,!1,a?24:16,0),a&&Lights.length>0?gl.vertexAttribPointer(normalAttribute,3,gl.FLOAT,!1,24,12):pixel&&gl.vertexAttribPointer(widthAttribute,1,gl.FLOAT,!1,16,12),gl.bindBuffer(gl.ARRAY_BUFFER,materialBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Int16Array(t.materialIndices),gl.STATIC_DRAW),gl.vertexAttribPointer(materialAttribute,1,gl.SHORT,!1,2,0),e!=colorShader&&e!=transparentShader||(gl.bindBuffer(gl.ARRAY_BUFFER,colorBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Uint8Array(t.colors),gl.STATIC_DRAW),gl.vertexAttribPointer(colorAttribute,4,gl.UNSIGNED_BYTE,!0,0,0)),gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indexBuffer),gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indexExt?new Uint32Array(i):new Uint16Array(i),gl.STATIC_DRAW),gl.drawElements(a?wireframe?gl.LINES:t.type:gl.POINTS,i.length,indexExt?gl.UNSIGNED_INT:gl.UNSIGNED_SHORT,0)}class vertexBuffer{constructor(t){this.type=t||TRIANGLES,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(materialIndex),this.nvertices++}iVertex(t,e,i,a=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=materialIndex;let n=4*t;this.colors[n]=a[0],this.colors[n+1]=a[1],this.colors[n+2]=a[2],this.colors[n+3]=a[3],this.indices.push(t)}append(t){append(this.vertices,t.vertices),append(this.materialIndices,t.materialIndices),append(this.colors,t.colors),appendOffset(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function append(t,e){let i=t.length,a=e.length;t.length+=a;for(let r=0;r<a;++r)t[i+r]=e[r]}function appendOffset(t,e,i){let a=t.length,r=e.length;t.length+=e.length;for(let n=0;n<r;++n)t[a+n]=e[n]+i}class Geometry{constructor(){this.data=new vertexBuffer,this.Onscreen=!1,this.m=[]}offscreen(t){let e=projViewMat,i=t[0],a=i[0],r=i[1],n=i[2],s=1/(e[3]*a+e[7]*r+e[11]*n+e[15]);this.x=this.X=(e[0]*a+e[4]*r+e[8]*n+e[12])*s,this.y=this.Y=(e[1]*a+e[5]*r+e[9]*n+e[13])*s;for(let i=1,a=t.length;i<a;++i){let a=t[i],r=a[0],n=a[1],s=a[2],o=1/(e[3]*r+e[7]*n+e[11]*s+e[15]),h=(e[0]*r+e[4]*n+e[8]*s+e[12])*o,l=(e[1]*r+e[5]*n+e[9]*s+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],a=this.c[2],r=t[0]-e,n=t[1]-i,s=t[2]-a;return[r*normMat[0]+n*normMat[3]+s*normMat[6]+e,r*normMat[1]+n*normMat[4]+s*normMat[7]+i,r*normMat[2]+n*normMat[5]+s*normMat[8]+a]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=Nmaterials&&e(),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(Materials[this.MaterialIndex])),materialIndex=t.materialTable[this.MaterialIndex]}render(){let t;if(this.setMaterialIndex(),0==this.CenterIndex?t=corners(this.Min,this.Max):(this.c=Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return void this.data.clear();let e,i=this.controlpoints;if(0==this.CenterIndex){if(!remesh&&this.Onscreen)return void this.append();e=i}else{let t=i.length;e=Array(t);for(let a=0;a<t;++a)e[a]=this.T(i[a])}let a=orthographic?1:this.Min[2]/B[2],r=pixel*Math.hypot(a*(viewParam.xmax-viewParam.xmin),a*(viewParam.ymax-viewParam.ymin))/size2;this.res2=r*r,this.Epsilon=FillFactor*r,this.data.clear(),this.Onscreen=!0,this.process(e)}}class BezierPatch extends Geometry{constructor(t,e,i,a,r,n){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.color=n,this.CenterIndex=e;let s=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==s||4==s?t+n[3][3]<1020:t<765}else this.transparent=Materials[i].diffuse[3]<1;this.MaterialIndex=i,this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data),this.L2norm(this.controlpoints)}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.color?this.setMaterial(colorData,drawColor):this.setMaterial(materialData,drawMaterial)}L2norm(t){let e=t[0];this.epsilon=0;let i=t.length;for(let a=1;a<i;++a)this.epsilon=Math.max(this.epsilon,abs2([t[a][0]-e[0],t[a][1]-e[1],t[a][2]-e[2]]));this.epsilon*=Number.EPSILON}processTriangle(t){let e=t[0],i=t[1],a=t[2],r=unit(cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-e[0],a[1]-e[1],a[2]-e[2]]));if(!this.offscreen([e,i,a])){let t,n,s;this.color?(t=this.data.Vertex(e,r,this.color[0]),n=this.data.Vertex(i,r,this.color[1]),s=this.data.Vertex(a,r,this.color[2])):(t=this.vertex(e,r),n=this.vertex(i,r),s=this.vertex(a,r)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],a=t[2],r=t[3],n=cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-i[0],a[1]-i[1],a[2]-i[2]]),s=cross([a[0]-r[0],a[1]-r[1],a[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=unit([n[0]+s[0],n[1]+s[1],n[2]+s[2]]);if(!this.offscreen([e,i,a,r])){let t,n,s,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),n=this.data.Vertex(i,o,this.color[1]),s=this.data.Vertex(a,o,this.color[2]),h=this.data.Vertex(r,o,this.color[3])):(t=this.vertex(e,o),n=this.vertex(i,o),s=this.vertex(a,o),h=this.vertex(r,o)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,a,r){new BezierCurve([t[e],t[i],t[a],t[r]],0,materialIndex,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=wireframe&&(materialIndex=this.color?-1-materialIndex:1+materialIndex),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==wireframe)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],a=t[12],r=t[15],n=this.normal(i,t[2],t[1],e,t[4],t[8],a);abs2(n)<this.epsilon&&abs2(n=this.normal(i,t[2],t[1],e,t[13],t[14],r))<this.epsilon&&(n=this.normal(r,t[11],t[7],i,t[4],t[8],a));let s=this.normal(e,t[4],t[8],a,t[13],t[14],r);abs2(s)<this.epsilon&&abs2(s=this.normal(e,t[4],t[8],a,t[11],t[7],i))<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r));let o=this.normal(a,t[13],t[14],r,t[11],t[7],i);abs2(o)<this.epsilon&&abs2(o=this.normal(a,t[13],t[14],r,t[2],t[1],e))<this.epsilon&&(o=this.normal(e,t[4],t[8],a,t[11],t[7],i));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(abs2(h)<this.epsilon&&abs2(h=this.normal(r,t[11],t[7],i,t[4],t[8],a))<this.epsilon&&(h=this.normal(a,t[13],t[14],r,t[2],t[1],e)),this.color){let l=this.color[0],d=this.color[1],c=this.color[2],m=this.color[3],f=this.data.Vertex(e,n,l),u=this.data.Vertex(a,s,d),p=this.data.Vertex(r,o,c),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,a,r,i,!1,!1,!1,!1,l,d,c,m)}else{let l=this.vertex(e,n),d=this.vertex(a,s),c=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,d,c,m,e,a,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):this.color?colorData.append(this.data):materialData.append(this.data)}Render(t,e,i,a,r,n,s,o,h,l,d,c,m,f,u,p,v){let g=this.Distance(t);if(g[0]<this.res2&&g[1]<this.res2)this.offscreen([n,s,o])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a))),this.offscreen([n,o,h])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(a),this.data.indices.push(r)):(this.data.indices.push(a),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let w=t[0],x=t[3],M=t[12],b=t[15];if(g[0]<this.res2){let g=new Split3(w,t[1],t[2],x),A=new Split3(t[4],t[5],t[6],t[7]),S=new Split3(t[8],t[9],t[10],t[11]),P=new Split3(M,t[13],t[14],b),R=[w,g.m0,g.m3,g.m5,t[4],A.m0,A.m3,A.m5,t[8],S.m0,S.m3,S.m5,M,P.m0,P.m3,P.m5],T=[g.m5,g.m4,g.m2,x,A.m5,A.m4,A.m2,t[7],S.m5,S.m4,S.m2,t[11],P.m5,P.m4,P.m2,b],y=this.normal(R[12],R[13],R[14],R[15],R[11],R[7],R[3]);abs2(y)<=this.epsilon&&abs2(y=this.normal(R[12],R[13],R[14],R[15],R[2],R[1],R[0]))<=this.epsilon&&(y=this.normal(R[0],R[4],R[8],R[12],R[11],R[7],R[3]));let D=this.normal(T[3],T[2],T[1],T[0],T[4],T[8],T[12]);abs2(D)<=this.epsilon&&abs2(D=this.normal(T[3],T[2],T[1],T[0],T[13],T[14],T[15]))<=this.epsilon&&(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12]));let I=this.Epsilon,z=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!d)if(d=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(T[12],T[8],T[4],T[0]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=R[15];let E=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(w,t[1],t[2],x)<this.res2){let t=unit(this.differential(R[3],R[7],R[11],R[15]));E=[E[0]-I*t[0],E[1]-I*t[1],E[2]-I*t[2]]}else E=T[0];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),g[e]=.5*(v[e]+f[e]);let w=this.data.Vertex(z,y,t),x=this.data.Vertex(E,D,g);this.Render(R,e,i,w,x,n,s,z,E,l,d,!1,m,f,u,t,g),this.Render(T,x,w,a,r,E,z,o,h,!1,d,c,m,g,t,p,v)}else{let t=this.vertex(z,y),f=this.vertex(E,D);this.Render(R,e,i,t,f,n,s,z,E,l,d,!1,m),this.Render(T,f,t,a,r,E,z,o,h,!1,d,c,m)}return}if(g[1]<this.res2){let g=new Split3(w,t[4],t[8],M),A=new Split3(t[1],t[5],t[9],t[13]),S=new Split3(t[2],t[6],t[10],t[14]),P=new Split3(x,t[7],t[11],b),R=[w,t[1],t[2],x,g.m0,A.m0,S.m0,P.m0,g.m3,A.m3,S.m3,P.m3,g.m5,A.m5,S.m5,P.m5],T=[g.m5,A.m5,S.m5,P.m5,g.m4,A.m4,S.m4,P.m4,g.m2,A.m2,S.m2,P.m2,M,t[13],t[14],b],y=this.normal(R[0],R[4],R[8],R[12],R[13],R[14],R[15]);abs2(y)<=this.epsilon&&abs2(y=this.normal(R[0],R[4],R[8],R[12],R[11],R[7],R[3]))<=this.epsilon&&(y=this.normal(R[3],R[2],R[1],R[0],R[13],R[14],R[15]));let D=this.normal(T[15],T[11],T[7],T[3],T[2],T[1],T[0]);abs2(D)<=this.epsilon&&abs2(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12]))<=this.epsilon&&(D=this.normal(T[12],T[13],T[14],T[15],T[2],T[1],T[0]));let I=this.Epsilon,z=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(w,t[4],t[8],M)<this.res2){let t=unit(this.differential(T[0],T[1],T[2],T[3]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=R[12];let E=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!c)if(c=Straightness(b,t[11],t[7],x)<this.res2){let t=unit(this.differential(R[15],R[14],R[13],R[12]));E=[E[0]-I*t[0],E[1]-I*t[1],E[2]-I*t[2]]}else E=T[3];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(p[e]+v[e]);let w=this.data.Vertex(z,y,t),x=this.data.Vertex(E,D,g);this.Render(R,e,w,x,r,n,z,E,h,l,!1,c,m,f,t,g,v),this.Render(T,w,i,a,x,z,s,o,E,l,d,c,!1,t,u,p,g)}else{let t=this.vertex(z,y),f=this.vertex(E,D);this.Render(R,e,t,f,r,n,z,E,h,l,!1,c,m),this.Render(T,t,i,a,f,z,s,o,E,l,d,c,!1)}return}let A=new Split3(w,t[1],t[2],x),S=new Split3(t[4],t[5],t[6],t[7]),P=new Split3(t[8],t[9],t[10],t[11]),R=new Split3(M,t[13],t[14],b),T=new Split3(w,t[4],t[8],M),y=new Split3(A.m0,S.m0,P.m0,R.m0),D=new Split3(A.m3,S.m3,P.m3,R.m3),I=new Split3(A.m5,S.m5,P.m5,R.m5),z=new Split3(A.m4,S.m4,P.m4,R.m4),E=new Split3(A.m2,S.m2,P.m2,R.m2),O=new Split3(x,t[7],t[11],b),L=[w,A.m0,A.m3,A.m5,T.m0,y.m0,D.m0,I.m0,T.m3,y.m3,D.m3,I.m3,T.m5,y.m5,D.m5,I.m5],N=[T.m5,y.m5,D.m5,I.m5,T.m4,y.m4,D.m4,I.m4,T.m2,y.m2,D.m2,I.m2,M,R.m0,R.m3,R.m5],_=[I.m5,z.m5,E.m5,O.m5,I.m4,z.m4,E.m4,O.m4,I.m2,z.m2,E.m2,O.m2,R.m5,R.m4,R.m2,b],B=[A.m5,A.m4,A.m2,x,I.m0,z.m0,E.m0,O.m0,I.m3,z.m3,E.m3,O.m3,I.m5,z.m5,E.m5,O.m5],V=L[15],C=this.normal(L[0],L[4],L[8],L[12],L[13],L[14],L[15]);abs2(C)<this.epsilon&&abs2(C=this.normal(L[0],L[4],L[8],L[12],L[11],L[7],L[3]))<this.epsilon&&(C=this.normal(L[3],L[2],L[1],L[0],L[13],L[14],L[15]));let F=this.normal(N[12],N[13],N[14],N[15],N[11],N[7],N[3]);abs2(F)<this.epsilon&&abs2(F=this.normal(N[12],N[13],N[14],N[15],N[2],N[1],N[0]))<this.epsilon&&(F=this.normal(N[0],N[4],N[8],N[12],N[11],N[7],N[3]));let H=this.normal(_[15],_[11],_[7],_[3],_[2],_[1],_[0]);abs2(H)<this.epsilon&&abs2(H=this.normal(_[15],_[11],_[7],_[3],_[4],_[8],_[12]))<this.epsilon&&(H=this.normal(_[12],_[13],_[14],_[15],_[2],_[1],_[0]));let G=this.normal(B[3],B[2],B[1],B[0],B[4],B[8],B[12]);abs2(G)<this.epsilon&&abs2(G=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15]))<this.epsilon&&(G=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12]));let U=this.normal(_[3],_[2],_[1],V,_[4],_[8],_[12]),W=this.Epsilon,Y=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(w,t[4],t[8],M)<this.res2){let t=unit(this.differential(N[0],N[1],N[2],N[3]));Y=[Y[0]-W*t[0],Y[1]-W*t[1],Y[2]-W*t[2]]}else Y=L[12];let j=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!d)if(d=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(_[12],_[8],_[4],_[0]));j=[j[0]-W*t[0],j[1]-W*t[1],j[2]-W*t[2]]}else j=N[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!c)if(c=Straightness(b,t[11],t[7],x)<this.res2){let t=unit(this.differential(B[15],B[14],B[13],B[12]));k=[k[0]-W*t[0],k[1]-W*t[1],k[2]-W*t[2]]}else k=_[3];let Z=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(w,t[1],t[2],x)<this.res2){let t=unit(this.differential(L[3],L[7],L[11],L[15]));Z=[Z[0]-W*t[0],Z[1]-W*t[1],Z[2]-W*t[2]]}else Z=B[0];if(f){let t=Array(4),g=Array(4),w=Array(4),x=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(u[e]+p[e]),w[e]=.5*(p[e]+v[e]),x[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+w[e]);let b=this.data.Vertex(Y,C,t),A=this.data.Vertex(j,F,g),S=this.data.Vertex(k,H,w),P=this.data.Vertex(Z,G,x),R=this.data.Vertex(V,U,M);this.Render(L,e,b,R,P,n,Y,V,Z,l,!1,!1,m,f,t,M,x),this.Render(N,b,i,A,R,Y,s,j,V,l,d,!1,!1,t,u,g,M),this.Render(_,R,A,a,S,V,j,o,k,!1,d,c,!1,M,g,p,w),this.Render(B,P,R,S,r,Z,V,k,h,!1,!1,c,m,x,M,w,v)}else{let t=this.vertex(Y,C),f=this.vertex(j,F),u=this.vertex(k,H),p=this.vertex(Z,G),v=this.vertex(V,U);this.Render(L,e,t,v,p,n,Y,V,Z,l,!1,!1,m),this.Render(N,t,i,f,v,Y,s,j,V,l,d,!1,!1),this.Render(_,v,f,a,u,V,j,o,k,!1,d,c,!1),this.Render(B,p,v,u,r,Z,V,k,h,!1,!1,c,m)}}}process3(t){if(1==wireframe)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],a=t[9],r=this.normal(a,t[5],t[2],e,t[1],t[3],i),n=this.normal(e,t[1],t[3],i,t[7],t[8],a),s=this.normal(i,t[7],t[8],a,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],d=this.data.Vertex(e,r,o),c=this.data.Vertex(i,n,h),m=this.data.Vertex(a,s,l);this.Render3(t,d,c,m,e,i,a,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,n),l=this.vertex(a,s);this.Render3(t,o,h,l,e,i,a,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,a,r,n,s,o,h,l,d,c,m){if(this.Distance3(t)<this.res2)this.offscreen([r,n,s])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],g=t[4],w=t[5],x=t[6],M=t[7],b=t[8],A=t[9],S=[.5*(A[0]+w[0]),.5*(A[1]+w[1]),.5*(A[2]+w[2])],P=[.5*(A[0]+b[0]),.5*(A[1]+b[1]),.5*(A[2]+b[2])],R=[.5*(w[0]+p[0]),.5*(w[1]+p[1]),.5*(w[2]+p[2])],T=[.5*(b[0]+g[0]),.5*(b[1]+g[1]),.5*(b[2]+g[2])],y=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],D=[.5*(p[0]+g[0]),.5*(p[1]+g[1]),.5*(p[2]+g[2])],I=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],z=[.5*(g[0]+v[0]),.5*(g[1]+v[1]),.5*(g[2]+v[2])],E=[.5*(M[0]+x[0]),.5*(M[1]+x[1]),.5*(M[2]+x[2])],O=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],L=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],N=[.5*(v[0]+x[0]),.5*(v[1]+x[1]),.5*(v[2]+x[2])],_=[.5*(S[0]+R[0]),.5*(S[1]+R[1]),.5*(S[2]+R[2])],B=[.5*(P[0]+y[0]),.5*(P[1]+y[1]),.5*(P[2]+y[2])],V=[.5*(R[0]+I[0]),.5*(R[1]+I[1]),.5*(R[2]+I[2])],C=[.5*T[0]+.25*(g[0]+u[0]),.5*T[1]+.25*(g[1]+u[1]),.5*T[2]+.25*(g[2]+u[2])],F=[.5*(y[0]+E[0]),.5*(y[1]+E[1]),.5*(y[2]+E[2])],H=[.5*D[0]+.25*(g[0]+M[0]),.5*D[1]+.25*(g[1]+M[1]),.5*D[2]+.25*(g[2]+M[2])],G=[.25*(w[0]+g[0])+.5*z[0],.25*(w[1]+g[1])+.5*z[1],.25*(w[2]+g[2])+.5*z[2]],U=[.5*(O[0]+L[0]),.5*(O[1]+L[1]),.5*(O[2]+L[2])],W=[.5*(L[0]+N[0]),.5*(L[1]+N[1]),.5*(L[2]+N[2])],Y=[.5*(H[0]+U[0]),.5*(H[1]+U[1]),.5*(H[2]+U[2])],j=[.5*(H[0]+W[0]),.5*(H[1]+W[1]),.5*(H[2]+W[2])],k=[.5*(U[0]+W[0]),.5*(U[1]+W[1]),.5*(U[2]+W[2])],Z=[.5*(G[0]+F[0]),.5*(G[1]+F[1]),.5*(G[2]+F[2])],X=[.5*(B[0]+G[0]),.5*(B[1]+G[1]),.5*(B[2]+G[2])],q=[.5*(B[0]+F[0]),.5*(B[1]+F[1]),.5*(B[2]+F[2])],K=[.5*(_[0]+C[0]),.5*(_[1]+C[1]),.5*(_[2]+C[2])],$=[.5*(V[0]+C[0]),.5*(V[1]+C[1]),.5*(V[2]+C[2])],Q=[.5*(_[0]+V[0]),.5*(_[1]+V[1]),.5*(_[2]+V[2])],J=[f,O,I,U,[.5*(D[0]+O[0]),.5*(D[1]+O[1]),.5*(D[2]+O[2])],V,k,Y,$,Q],tt=[k,W,j,N,[.5*(z[0]+E[0]),.5*(z[1]+E[1]),.5*(z[2]+E[2])],Z,x,E,F,q],et=[Q,K,_,X,[.5*(S[0]+T[0]),.5*(S[1]+T[1]),.5*(S[2]+T[2])],S,q,B,P,A],it=[q,X,Z,K,[.25*(R[0]+y[0]+L[0]+g[0]),.25*(R[1]+y[1]+L[1]+g[1]),.25*(R[2]+y[2]+L[2]+g[2])],j,Q,$,Y,k],at=this.normal(k,j,Z,q,X,K,Q),rt=this.normal(q,X,K,Q,$,Y,k),nt=this.normal(Q,$,Y,k,j,Z,q),st=this.Epsilon,ot=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!o)if(o=Straightness(x,M,b,A)<this.res2){let t=unit(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-st*t[0],ot[1]-st*t[1],ot[2]-st*t[2]]}else ot=q;let ht=[.5*(s[0]+r[0]),.5*(s[1]+r[1]),.5*(s[2]+r[2])];if(!h)if(h=Straightness(f,p,w,A)<this.res2){let t=unit(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-st*t[0],ht[1]-st*t[1],ht[2]-st*t[2]]}else ht=Q;let lt=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])];if(!l)if(l=Straightness(f,u,v,x)<this.res2){let t=unit(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-st*t[0],lt[1]-st*t[1],lt[2]-st*t[2]]}else lt=k;if(d){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(c[e]+m[e]),f[e]=.5*(m[e]+d[e]),u[e]=.5*(d[e]+c[e]);let p=this.data.Vertex(ot,at,t),v=this.data.Vertex(ht,rt,f),g=this.data.Vertex(lt,nt,u);this.Render3(J,e,g,v,r,lt,ht,!1,h,l,d,u,f),this.Render3(tt,g,i,p,lt,n,ot,o,!1,l,u,c,t),this.Render3(et,v,p,a,ht,ot,s,o,h,!1,f,t,m),this.Render3(it,p,v,g,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,at),d=this.vertex(ht,rt),c=this.vertex(lt,nt);this.Render3(J,e,c,d,r,lt,ht,!1,h,l),this.Render3(tt,c,i,t,lt,n,ot,o,!1,l),this.Render3(et,d,t,a,ht,ot,s,o,h,!1),this.Render3(it,t,d,c,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],a=t[12],r=t[15],n=Flatness(e,a,i,r);n=Math.max(Straightness(e,t[4],t[8],a)),n=Math.max(n,Straightness(t[1],t[5],t[9],t[13])),n=Math.max(n,Straightness(i,t[7],t[11],r)),n=Math.max(n,Straightness(t[2],t[6],t[10],t[14]));let s=Flatness(e,i,a,r);return s=Math.max(s,Straightness(e,t[1],t[2],i)),s=Math.max(s,Straightness(t[4],t[5],t[6],t[7])),s=Math.max(s,Straightness(t[8],t[9],t[10],t[11])),[n,s=Math.max(s,Straightness(a,t[13],t[14],r))]}Distance3(t){let e=t[0],i=t[4],a=t[6],r=t[9],n=abs2([(e[0]+a[0]+r[0])*third-i[0],(e[1]+a[1]+r[1])*third-i[1],(e[2]+a[2]+r[2])*third-i[2]]);return n=Math.max(n,Straightness(e,t[1],t[3],a)),n=Math.max(n,Straightness(e,t[2],t[5],r)),Math.max(n,Straightness(a,t[7],t[8],r))}differential(t,e,i,a){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return abs2(r)>this.epsilon?r:abs2(r=bezierPP(t,e,i))>this.epsilon?r:bezierPPP(t,e,i,a)}sumdifferential(t,e,i,a,r,n,s){let o=this.differential(t,e,i,a),h=this.differential(t,r,n,s);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,a,r,n,s){let o=3*(r[0]-a[0]),h=3*(r[1]-a[1]),l=3*(r[2]-a[2]),d=3*(i[0]-a[0]),c=3*(i[1]-a[1]),m=3*(i[2]-a[2]),f=[h*m-l*c,l*d-o*m,o*c-h*d];if(abs2(f)>this.epsilon)return f;let u=[d,c,m],p=[o,h,l],v=bezierPP(a,i,e),g=bezierPP(a,r,n),w=cross(g,u),x=cross(p,v);if(abs2(f=[w[0]+x[0],w[1]+x[1],w[2]+x[2]])>this.epsilon)return f;let M=bezierPPP(a,i,e,t),b=bezierPPP(a,r,n,s);w=cross(p,M),x=cross(b,u);let A=cross(g,v);return abs2(f=[w[0]+x[0]+A[0],w[1]+x[1]+A[1],w[2]+x[2]+A[2]])>this.epsilon?f:(w=cross(b,v),x=cross(g,M),abs2(f=[w[0]+x[0],w[1]+x[1],w[2]+x[2]])>this.epsilon?f:cross(b,M))}}class BezierCurve extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.CenterIndex=e,this.MaterialIndex=i}setMaterialIndex(){this.setMaterial(material1Data,drawMaterial1)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],a=t[2],r=t[3],n=this.normal(bezierP(e,i),bezierPP(e,i,a)),s=this.normal(bezierP(a,r),bezierPP(r,a,i)),o=this.data.vertex(e,n),h=this.data.vertex(r,s);this.Render(t,o,h),this.data.indices.length>0&&this.append()}append(){material1Data.append(this.data)}Render(t,e,i){let a=t[0],r=t[1],n=t[2],s=t[3];if(Straightness(a,r,n,s)<this.res2)this.offscreen([a,s])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])],h=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])],l=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])],d=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],c=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(d[0]+c[0]),.5*(d[1]+c[1]),.5*(d[2]+c[2])],f=[a,o,d,m],u=[m,c,l,s],p=this.normal(bezierPh(a,r,n,s),bezierPPh(a,r,n,s)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=dot(t,t),a=dot(t,e);return[i*e[0]-a*t[0],i*e[1]-a*t[1],i*e[2]-a*t[2]]}}class Pixel extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=a,this.Max=r}setMaterialIndex(){this.setMaterial(material0Data,drawMaterial0)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){material0Data.append(this.data)}}class Triangles extends Geometry{constructor(t,e,i){super(),this.CenterIndex=0,this.MaterialIndex=t,this.Min=e,this.Max=i,this.Positions=Positions,this.Normals=Normals,this.Colors=Colors,this.Indices=Indices,Positions=[],Normals=[],Colors=[],Indices=[],this.transparent=Materials[t].diffuse[3]<1}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.setMaterial(triangleData,drawTriangle)}process(t){materialIndex=this.Colors.length>0?-1-materialIndex:1+materialIndex;for(let t=0,e=this.Indices.length;t<e;++t){let e=this.Indices[t],i=e[0],a=this.Positions[i[0]],r=this.Positions[i[1]],n=this.Positions[i[2]];if(!this.offscreen([a,r,n])){let t=e.length>1?e[1]:i;if(t&&0!=t.length||(t=i),this.Colors.length>0){let s=e.length>2?e[2]:i;s&&0!=s.length||(s=i);let o=this.Colors[s[0]],h=this.Colors[s[1]],l=this.Colors[s[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l)):(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[0],a,this.Normals[t[0]],o))}else 0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]])):(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[0],a,this.Normals[t[0]]))}}this.data.nvertices=this.Positions.length,this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):triangleData.append(this.data)}}function home(){mat4.identity(rotMat),initProjection(),setProjection(),remesh=!0,draw()}let positionAttribute=0,normalAttribute=1,materialAttribute=2,colorAttribute=3,widthAttribute=4;function initShader(t=[]){let e=getShader(gl,vertex,gl.VERTEX_SHADER,t),i=getShader(gl,fragment,gl.FRAGMENT_SHADER,t),a=gl.createProgram();return gl.attachShader(a,e),gl.attachShader(a,i),gl.bindAttribLocation(a,positionAttribute,"position"),gl.bindAttribLocation(a,normalAttribute,"normal"),gl.bindAttribLocation(a,materialAttribute,"materialIndex"),gl.bindAttribLocation(a,colorAttribute,"color"),gl.bindAttribLocation(a,widthAttribute,"width"),gl.linkProgram(a),gl.getProgramParameter(a,gl.LINK_STATUS)||alert("Could not initialize shaders"),a}class Split3{constructor(t,e,i,a){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),n=.5*(e[1]+i[1]),s=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+a[0]),.5*(i[1]+a[1]),.5*(i[2]+a[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+n),.5*(this.m0[2]+s)],this.m4=[.5*(r+this.m2[0]),.5*(n+this.m2[1]),.5*(s+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}function unit(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function abs2(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function dot(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function cross(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function bezierP(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function bezierPP(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function bezierPPP(t,e,i,a){return[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]}function bezierPh(t,e,i,a){return[i[0]+a[0]-t[0]-e[0],i[1]+a[1]-t[1]-e[1],i[2]+a[2]-t[2]-e[2]]}function bezierPPh(t,e,i,a){return[3*t[0]-5*e[0]+i[0]+a[0],3*t[1]-5*e[1]+i[1]+a[1],3*t[2]-5*e[2]+i[2]+a[2]]}function Straightness(t,e,i,a){let r=[third*(a[0]-t[0]),third*(a[1]-t[1]),third*(a[2]-t[2])];return Math.max(abs2([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),abs2([a[0]-r[0]-i[0],a[1]-r[1]-i[1],a[2]-r[2]-i[2]]))}function Flatness(t,e,i,a){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],n=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return Math.max(abs2(cross(r,unit(n))),abs2(cross(n,unit(r))))/9}function corners(t,e){return[t,[t[0],t[1],e[2]],[t[0],e[1],t[2]],[t[0],e[1],e[2]],[e[0],t[1],t[2]],[e[0],t[1],e[2]],[e[0],e[1],t[2]],e]}function minbound(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function maxbound(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function COBTarget(t,e){mat4.fromTranslation(T,[center.x,center.y,center.z]),mat4.invert(cjMatInv,T),mat4.multiply(t,e,cjMatInv),mat4.multiply(t,T,t)}function setUniforms(t,e){let i=e==pixelShader;gl.useProgram(e),gl.enableVertexAttribArray(positionAttribute),i&&gl.enableVertexAttribArray(widthAttribute);let a=!i&&Lights.length>0;if(a&&gl.enableVertexAttribArray(normalAttribute),gl.enableVertexAttribArray(materialAttribute),e.projViewMatUniform=gl.getUniformLocation(e,"projViewMat"),e.viewMatUniform=gl.getUniformLocation(e,"viewMat"),e.normMatUniform=gl.getUniformLocation(e,"normMat"),e!=colorShader&&e!=transparentShader||gl.enableVertexAttribArray(colorAttribute),a)for(let t=0;t<Lights.length;++t)Lights[t].setUniform(e,t);for(let i=0;i<t.materials.length;++i)t.materials[i].setUniform(e,i);gl.uniformMatrix4fv(e.projViewMatUniform,!1,projViewMat),gl.uniformMatrix4fv(e.viewMatUniform,!1,viewMat),gl.uniformMatrix3fv(e.normMatUniform,!1,normMat)}function handleMouseDown(t){zoomEnabled||enableZoom(),mouseDownOrTouchActive=!0,lastMouseX=t.clientX,lastMouseY=t.clientY}let pinchStart,touchStartTime,pinch=!1;function pinchDistance(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function handleTouchStart(t){t.preventDefault(),zoomEnabled||enableZoom();let e=t.targetTouches;swipe=rotate=pinch=!1,zooming||(1!=e.length||mouseDownOrTouchActive||(touchStartTime=(new Date).getTime(),touchId=e[0].identifier,lastMouseX=e[0].pageX,lastMouseY=e[0].pageY),2!=e.length||mouseDownOrTouchActive||(touchId=e[0].identifier,pinchStart=pinchDistance(e),pinch=!0))}function handleMouseUpOrTouchEnd(t){mouseDownOrTouchActive=!1}function rotateScene(t,e,i,a,r){if(t==i&&e==a)return;let[n,s]=arcball([t,-e],[i,-a]);mat4.fromRotation(T,2*r*ArcballFactor*n/lastzoom,s),mat4.multiply(rotMat,T,rotMat)}function shiftScene(t,e,i,a){let r=1/lastzoom;shift.x+=(i-t)*r*halfCanvasWidth,shift.y-=(a-e)*r*halfCanvasHeight}function panScene(t,e,i,a){orthographic?shiftScene(t,e,i,a):(center.x+=(i-t)*(viewParam.xmax-viewParam.xmin),center.y-=(a-e)*(viewParam.ymax-viewParam.ymin))}function updateViewMatrix(){COBTarget(viewMat,rotMat),mat4.translate(viewMat,viewMat,[center.x,center.y,0]),mat3.fromMat4(viewMat3,viewMat),mat3.invert(normMat,viewMat3),mat4.multiply(projViewMat,projMat,viewMat)}function capzoom(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;Zoom<=e&&(Zoom=e),Zoom>=t&&(Zoom=t),Zoom!=lastzoom&&(remesh=!0),lastzoom=Zoom}function zoomImage(t){let e=zoomStep*halfCanvasHeight*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(zoomFactor);Math.abs(e)<i&&(Zoom*=zoomFactor**e,capzoom())}function normMouse(t){let e=t[0],i=t[1],a=Math.hypot(e,i);return a>1&&(denom=1/a,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function arcball(t,e){let i=normMouse(t),a=normMouse(e),r=dot(i,a);return r>1?r=1:r<-1&&(r=-1),[Math.acos(r),unit(cross(i,a))]}function zoomScene(t,e,i,a){zoomImage(e-a)}const DRAGMODE_ROTATE=1,DRAGMODE_SHIFT=2,DRAGMODE_ZOOM=3,DRAGMODE_PAN=4;function processDrag(t,e,i,a=1){let r;switch(i){case DRAGMODE_ROTATE:r=rotateScene;break;case DRAGMODE_SHIFT:r=shiftScene;break;case DRAGMODE_ZOOM:r=zoomScene;break;case DRAGMODE_PAN:r=panScene;break;default:r=((t,e,i,a)=>{})}r((lastMouseX-halfCanvasWidth)/halfCanvasWidth,(lastMouseY-halfCanvasHeight)/halfCanvasHeight,(t-halfCanvasWidth)/halfCanvasWidth,(e-halfCanvasHeight)/halfCanvasHeight,a),lastMouseX=t,lastMouseY=e,setProjection(),draw()}let zoomEnabled=0;function enableZoom(){zoomEnabled=1,canvas.addEventListener("wheel",handleMouseWheel,!1)}function disableZoom(){zoomEnabled=0,canvas.removeEventListener("wheel",handleMouseWheel,!1)}function handleKey(t){if(zoomEnabled||enableZoom(),embedded&&zoomEnabled&&27==t.keyCode)return void disableZoom();let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":home();break;case"m":3==++wireframe&&(wireframe=0),2!=wireframe&&(embedded||deleteShaders(),initShaders()),remesh=!0,draw();break;case"+":case"=":case">":expand();break;case"-":case"_":case"<":shrink()}e.length>0&&(mat4.rotate(rotMat,rotMat,.1,e),updateViewMatrix(),draw())}function handleMouseWheel(t){t.preventDefault(),t.deltaY<0?Zoom*=zoomFactor:Zoom/=zoomFactor,capzoom(),setProjection(),draw()}function handleMouseMove(t){if(!mouseDownOrTouchActive)return;let e;processDrag(t.clientX,t.clientY,e=t.getModifierState("Control")?DRAGMODE_SHIFT:t.getModifierState("Shift")?DRAGMODE_ZOOM:t.getModifierState("Alt")?DRAGMODE_PAN:DRAGMODE_ROTATE)}let zooming=!1,swipe=!1,rotate=!1;function handleTouchMove(t){if(t.preventDefault(),zooming)return;let e=t.targetTouches;if(!pinch&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,a=t-lastMouseX,r=i-lastMouseY,n=a*a+r*r<=shiftHoldDistance*shiftHoldDistance;if(n&&!swipe&&!rotate&&(new Date).getTime()-touchStartTime>shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(vibrateTime),swipe=!0),swipe)processDrag(t,i,DRAGMODE_SHIFT);else if(!n){rotate=!0,processDrag(e[0].pageX,e[0].pageY,DRAGMODE_ROTATE,.5)}}if(pinch&&!swipe&&2==e.length&&touchId==e[0].identifier){let t=pinchDistance(e),i=t-pinchStart;zooming=!0,(i*=zoomPinchFactor)>zoomPinchCap&&(i=zoomPinchCap),i<-zoomPinchCap&&(i=-zoomPinchCap),zoomImage(i/size2),pinchStart=t,swipe=rotate=zooming=!1,setProjection(),draw()}}let pixelShader,materialShader,colorShader,transparentShader,zbuffer=[];function transformVertices(t){let e=viewMat[2],i=viewMat[6],a=viewMat[10];zbuffer.length=t.length;for(let r=0;r<t.length;++r){let n=6*r;zbuffer[r]=e*t[n]+i*t[n+1]+a*t[n+2]}}function drawMaterial0(){drawBuffer(material0Data,pixelShader),material0Data.clear()}function drawMaterial1(){drawBuffer(material1Data,materialShader),material1Data.clear()}function drawMaterial(){drawBuffer(materialData,materialShader),materialData.clear()}function drawColor(){drawBuffer(colorData,colorShader),colorData.clear()}function drawTriangle(){drawBuffer(triangleData,transparentShader),triangleData.clear()}function drawTransparent(){let t=transparentData.indices;if(wireframe>0)return drawBuffer(transparentData,transparentShader,t),void transparentData.clear();if(t.length>0){transformVertices(transparentData.vertices);let e=t.length/3,i=Array(e).fill().map((t,e)=>e);i.sort(function(e,i){let a=3*e;Ia=t[a],Ib=t[a+1],Ic=t[a+2];let r=3*i;return IA=t[r],IB=t[r+1],IC=t[r+2],zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic]<zbuffer[IA]+zbuffer[IB]+zbuffer[IC]?-1:1});let a=Array(t.length);for(let r=0;r<e;++r){let e=3*i[r];a[3*r]=t[e],a[3*r+1]=t[e+1],a[3*r+2]=t[e+2]}gl.depthMask(!1),drawBuffer(transparentData,transparentShader,a),gl.depthMask(!0)}transparentData.clear()}function drawBuffers(){drawMaterial0(),drawMaterial1(),drawMaterial(),drawColor(),drawTriangle(),drawTransparent()}function draw(){embedded&&(offscreen.width=canvas.width,offscreen.height=canvas.height,setViewport()),gl.clearColor(Background[0],Background[1],Background[2],Background[3]),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);for(let t=0;t<P.length;++t)P[t].render();drawBuffers(),embedded&&(context.clearRect(0,0,canvas.width,canvas.height),context.drawImage(offscreen,0,0)),0==wireframe&&(remesh=!1)}function setDimensions(t,e,i,a){let r=t/e,n=1/lastzoom,s=(i/t+viewportshift[0])*lastzoom,o=(a/e+viewportshift[1])*lastzoom;if(orthographic){let t=B[0]-b[0],e=B[1]-b[1];if(t<e*r){let t=.5*e*r*n,i=2*t*s,a=e*n*o;viewParam.xmin=-t-i,viewParam.xmax=t-i,viewParam.ymin=b[1]*n-a,viewParam.ymax=B[1]*n-a}else{let e=.5*t/(r*Zoom),i=t*n*s,a=2*e*o;viewParam.xmin=b[0]*n-i,viewParam.xmax=B[0]*n-i,viewParam.ymin=-e-a,viewParam.ymax=e-a}}else{let t=H*n,e=t*r,i=2*e*s,a=2*t*o;viewParam.xmin=-e-i,viewParam.xmax=e-i,viewParam.ymin=-t-a,viewParam.ymax=t-a}}function setProjection(){setDimensions(canvasWidth,canvasHeight,shift.x,shift.y),(orthographic?mat4.ortho:mat4.frustum)(projMat,viewParam.xmin,viewParam.xmax,viewParam.ymin,viewParam.ymax,-viewParam.zmax,-viewParam.zmin),updateViewMatrix()}function initProjection(){H=-Math.tan(.5*angle)*B[2],center.x=center.y=0,center.z=.5*(b[2]+B[2]),lastzoom=Zoom=Zoom0,viewParam.zmin=b[2],viewParam.zmax=B[2],shift.x=shift.y=0}function setViewport(){gl.viewportWidth=canvasWidth,gl.viewportHeight=canvasHeight,gl.viewport(0,0,gl.viewportWidth,gl.viewportHeight),gl.scissor(0,0,gl.viewportWidth,gl.viewportHeight)}function setCanvas(){canvas.width=canvasWidth,canvas.height=canvasHeight,embedded&&(offscreen.width=canvasWidth,offscreen.height=canvasHeight),size2=Math.hypot(canvasWidth,canvasHeight),halfCanvasWidth=.5*canvasWidth,halfCanvasHeight=.5*canvasHeight}function setsize(t,e){t>maxViewportWidth&&(t=maxViewportWidth),e>maxViewportHeight&&(e=maxViewportHeight),shift.x*=t/canvasWidth,shift.y*=e/canvasHeight,canvasWidth=t,canvasHeight=e,setCanvas(),setViewport(),home()}function expand(){setsize(canvasWidth*resizeStep+.5,canvasHeight*resizeStep+.5)}function shrink(){setsize(Math.max(canvasWidth/resizeStep+.5,1),Math.max(canvasHeight/resizeStep+.5,1))}function webGLInit(){if(canvas=document.getElementById("Asymptote"),embedded=window.top.document!=document,initGL(),absolute&&!embedded)canvasWidth*=window.devicePixelRatio,canvasHeight*=window.devicePixelRatio;else{canvas.width=Math.max(window.innerWidth-windowTrim,windowTrim),canvas.height=Math.max(window.innerHeight-windowTrim,windowTrim);let t=canvasWidth/canvasHeight;canvas.width>canvas.height*t?canvas.width=Math.min(canvas.height*t,canvas.width):canvas.height=Math.min(canvas.width/t,canvas.height),canvas.width>0&&(canvasWidth=canvas.width),canvas.height>0&&(canvasHeight=canvas.height)}setCanvas(),ArcballFactor=1+8*Math.hypot(viewportmargin[0],viewportmargin[1])/size2,viewportshift[0]/=Zoom0,viewportshift[1]/=Zoom0,gl.enable(gl.BLEND),gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA),gl.enable(gl.DEPTH_TEST),gl.enable(gl.SCISSOR_TEST),setViewport(),home(),canvas.onmousedown=handleMouseDown,document.onmouseup=handleMouseUpOrTouchEnd,document.onmousemove=handleMouseMove,canvas.onkeydown=handleKey,embedded||enableZoom(),canvas.addEventListener("touchstart",handleTouchStart,!1),canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchmove",handleTouchMove,!1),document.addEventListener("keydown",handleKey,!1)}let listen=!1;class Align{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],a=t[2],r=e*this.ct+a*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+a*this.ct+this.center[2]]}}function Tcorners(t,e,i){let a=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[minbound(a),maxbound(a)]}function sphere(t,e,i,r,n){let s,o,h,l,d,c,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,g=.0549670512339254,w=.998880711874577,x=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,a,0],[1,a,m],[f,a*f,u],[p,a*p,v],[a,1,0],[a,1,m],[a*f,f,u],[a*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,a*p,v],[g,0,w],[a*p,p,v],[x,x,1],[.05*a,0,1],[0,p,v],[0,g,w],[0,.05*a,1],[0,0,1]]],b=new Align(t,n);function A(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let a=t[i];e[i]=d([s*a[0],o*a[1],h*a[2]])}return e}n?(l=1,c=0,d=b.T.bind(b)):(l=-1,c=-e,d=b.T0.bind(b));let S=Tcorners(d,[-e,-e,c],[e,e,e]),R=S[0],T=S[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){o=t*e;for(let t=l;t<=1;t+=2){h=t*e;for(let t=0;t<2;++t)P.push(new BezierPatch(A(M[t]),i,r,R,T))}}}}let a=4/3*(Math.sqrt(2)-1);function disk(t,e,i,r,n){let s=1-2*a/3,o=[[1,0,0],[1,-a,0],[a,-1,0],[0,-1,0],[1,a,0],[s,0,0],[0,-s,0],[-a,-1,0],[a,1,0],[0,s,0],[-s,0,0],[-1,-a,0],[0,1,0],[-a,1,0],[-1,a,0],[-1,0,0]],h=new Align(t,n);let l=Tcorners(h.T.bind(h),[-e,-e,0],[e,e,0]);P.push(new BezierPatch(function(t){let i=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];i[a]=h.T([e*r[0],e*r[1],0])}return i}(o),i,r,l[0],l[1]))}function cylinder(t,e,i,r,n,s,o){let h,l,d=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,a,0],[1,a,1/3],[1,a,2/3],[1,a,1],[a,1,0],[a,1,1/3],[a,1,2/3],[a,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],c=new Align(t,s);function m(t){let e=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];e[a]=c.T([h*r[0],l*r[1],i*r[2]])}return e}let f=Tcorners(c.T.bind(c),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){h=t*e;for(let t=-1;t<=1;t+=2)l=t*e,P.push(new BezierPatch(m(d),r,n,u,p))}if(o){let e=c.T([0,0,i]);P.push(new BezierCurve([t,e],r,n,t,e))}}function rmf(t,e,i,a,r){class n{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=cross(i,e)}}let s=Number.EPSILON*Math.max(abs2(t),abs2(e),abs2(i),abs2(a));function o(r){if(1==r){let r=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return abs2(r)>s?unit(r):abs2(r=[2*i[0]-e[0]-a[0],2*i[1]-e[1]-a[1],2*i[2]-e[2]-a[2]])>s?unit(r):[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]}let n=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,d=[n[0]*l+o[0]*r+h[0],n[1]*l+o[1]*r+h[1],n[2]*l+o[2]*r+h[2]];return abs2(d)>s?unit(d):abs2(d=[n[0]*(l=2*r)+o[0],n[1]*l+o[1],n[2]*l+o[2]])>s?unit(d):unit(n)}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];abs2(l)<s&&abs2(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]])<s&&(l=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]);let d=function(t){let e=cross(t,[0,1,0]),i=Number.EPSILON*abs2(t);return abs2(e)>i?unit(e):abs2(e=cross(t,[0,0,1]))>i?unit(e):[1,0,0]}(l=unit(l));h[0]=new n(t,d,l);for(let s=1;s<r.length;++s){let l=h[s-1],d=r[s],c=1-d,m=c*c,f=m*c,u=3*d;m*=u,c*=u*d;let p=d*d*d,v=[f*t[0]+m*e[0]+c*i[0]+p*a[0],f*t[1]+m*e[1]+c*i[1]+p*a[1],f*t[2]+m*e[2]+c*i[2]+p*a[2]],g=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=g[0]||0!=g[1]||0!=g[2]){let t=l.r,e=unit(g),i=l.t,a=dot(e,i),r=[i[0]-2*a*e[0],i[1]-2*a*e[1],i[2]-2*a*e[2]];i=o(d);let c=2*dot(e,t),m=[t[0]-c*e[0],t[1]-c*e[1],t[2]-c*e[2]],f=unit([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*dot(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[s]=new n(v,unit(m),unit(i))}else h[s]=h[s-1]}return h}function tube(t,e,i,r,n,s,o){let h=rmf(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),l=a*e,d=[[e,0],[e,l],[l,e],[0,e]];function c(e,a,o,l){let c=Array(16);for(let i=0;i<4;++i){let r=h[i],n=r.r[0],s=r.s[0],m=n*e+s*a,f=n*o+s*l,u=(n=r.r[1])*e+(s=r.s[1])*a,p=n*o+s*l,v=(n=r.r[2])*e+(s=r.s[2])*a,g=n*o+s*l,w=t[i],x=w[0];w1=w[1],w2=w[2];for(let t=0;t<4;++t){let e=d[t],a=e[0],r=e[1];c[4*i+t]=[m*a+f*r+x,u*a+p*r+w1,v*a+g*r+w2]}}P.push(new BezierPatch(c,i,r,n,s))}c(1,0,0,1),c(0,-1,1,0),c(-1,0,0,-1),c(0,1,-1,0),o&&P.push(new BezierCurve(t,i,r,n,s))}function webGLStart(){0==window.innerWidth||0==window.innerHeight?listen||(listen=!0,window.addEventListener("resize",webGLStart,!1)):(listen&&(window.removeEventListener("resize",webGLStart,!1),listen=!1),webGLInit())} +let vertex="\nattribute vec3 position;\n#ifdef WIDTH\nattribute float width;\n#endif\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\nattribute float materialIndex;\n#ifdef COLOR\nattribute vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\n#endif\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\nvarying vec4 emissive;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvoid main(void)\n{\n vec4 v=vec4(position,1.0);\n gl_Position=projViewMat*v;\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n ViewPosition=(viewMat*v).xyz;\n#endif \n Normal=normalize(normal*normMat);\n \n Material m;\n#ifdef TRANSPARENT\n m=Materials[int(abs(materialIndex))-1];\n emissive=m.emissive;\n if(materialIndex >= 0.0) {\n diffuse=m.diffuse;\n } else {\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n }\n#else\n m=Materials[int(materialIndex)];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif\n#endif\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[int(materialIndex)].emissive;\n#endif\n#ifdef WIDTH\n gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\n\nfloat Roughness2;\nvec3 normal;\n\nstruct Light {\n vec3 direction;\n vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\nfloat NDF_TRG(vec3 h)\n{\n float ndoth=max(dot(normal,h),0.0);\n float alpha2=Roughness2*Roughness2;\n float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n \nfloat GGX_Geom(vec3 v)\n{\n float ndotv=max(dot(v,normal),0.0);\n float ap=1.0+Roughness2;\n float k=0.125*ap*ap;\n return ndotv/((ndotv*(1.0-k))+k);\n}\n \nfloat Geom(vec3 v, vec3 l)\n{\n return GGX_Geom(v)*GGX_Geom(l);\n}\n \nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n float a=1.0-max(dot(h,v),0.0);\n float b=a*a;\n return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n \n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n vec3 lambertian=diffuse.rgb;\n vec3 h=normalize(lightDirection+viewDirection);\n \n float omegain=max(dot(viewDirection,normal),0.0);\n float omegali=max(dot(lightDirection,normal),0.0);\n \n float D=NDF_TRG(h);\n float G=Geom(viewDirection,lightDirection);\n float F=Fresnel(h,viewDirection,fresnel0);\n \n float denom=4.0*omegain*omegali;\n float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n \n vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n vec3 metal=rawReflectance*diffuse.rgb;\n \n return mix(dielectric,metal,metallic);\n}\n#endif\nvarying vec4 emissive;\n \nvoid main(void)\n{\n#if defined(NORMAL) && nlights > 0\n normal=normalize(Normal);\n normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n vec3 viewDir=-normalize(ViewPosition);\n#endif\n Roughness2=roughness*roughness;\n vec3 color=emissive.rgb;\n for(int i=0; i < nlights; ++i) {\n Light Li=Lights[i];\n vec3 L=Li.direction;\n float cosTheta=max(dot(normal,L),0.0);\n vec3 radiance=cosTheta*Li.color;\n color += BRDF(viewDir,L)*radiance;\n }\n gl_FragColor=vec4(color,diffuse.a);\n#else\n gl_FragColor=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var a in i)("object"==typeof exports?exports:t)[a]=i[a]}}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function i(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,a){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:a})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=a*Math.max(1,Math.abs(t),Math.abs(e))};var a=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var a=n(i(2)),r=n(i(3));function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=a,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*s-o*l,m=-c*n+o*h,f=l*n-s*h,u=i*d+a*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*a+r*l)*u,t[2]=(o*a-r*s)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*n)*u,t[6]=f*u,t[7]=(-l*i+a*h)*u,t[8]=(s*i-a*n)*u,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],g=e[15],x=i*o-a*s,w=i*h-r*s,M=i*l-n*s,b=a*h-r*o,S=a*l-n*o,P=r*l-n*h,A=c*p-d*u,y=c*v-m*u,T=c*g-f*u,R=d*v-m*p,D=d*g-f*p,I=m*g-f*v,z=x*I-w*D+M*R+b*T-S*y+P*A;if(!z)return null;return z=1/z,t[0]=(o*I-h*D+l*R)*z,t[1]=(r*D-a*I-n*R)*z,t[2]=(p*P-v*S+g*b)*z,t[3]=(m*S-d*P-f*b)*z,t[4]=(h*T-s*I-l*y)*z,t[5]=(i*I-r*T+n*y)*z,t[6]=(v*M-u*P-g*w)*z,t[7]=(c*P-m*M+f*w)*z,t[8]=(s*D-o*T+l*A)*z,t[9]=(a*T-i*D-n*A)*z,t[10]=(u*S-p*M+g*x)*z,t[11]=(d*M-c*S-f*x)*z,t[12]=(o*y-s*R-h*A)*z,t[13]=(i*R-a*y+r*A)*z,t[14]=(p*w-u*b-v*x)*z,t[15]=(c*b-d*w+m*x)*z,t},e.multiply=r,e.translate=function(t,e,i){var a=i[0],r=i[1],n=i[2],s=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,g=void 0;e===t?(t[12]=e[0]*a+e[4]*r+e[8]*n+e[12],t[13]=e[1]*a+e[5]*r+e[9]*n+e[13],t[14]=e[2]*a+e[6]*r+e[10]*n+e[14],t[15]=e[3]*a+e[7]*r+e[11]*n+e[15]):(s=e[0],o=e[1],h=e[2],l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],g=e[11],t[0]=s,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=g,t[12]=s*a+c*r+u*n+e[12],t[13]=o*a+d*r+p*n+e[13],t[14]=h*a+m*r+v*n+e[14],t[15]=l*a+f*r+g*n+e[15]);return t},e.rotate=function(t,e,i,r){var n,s,o,h,l,c,d,m,f,u,p,v,g,x,w,M,b,S,P,A,y,T,R,D,I=r[0],z=r[1],L=r[2],N=Math.sqrt(I*I+z*z+L*L);if(Math.abs(N)<a.EPSILON)return null;I*=N=1/N,z*=N,L*=N,n=Math.sin(i),s=Math.cos(i),o=1-s,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],g=e[9],x=e[10],w=e[11],M=I*I*o+s,b=z*I*o+L*n,S=L*I*o-z*n,P=I*z*o-L*n,A=z*z*o+s,y=L*z*o+I*n,T=I*L*o+z*n,R=z*L*o-I*n,D=L*L*o+s,t[0]=h*M+m*b+v*S,t[1]=l*M+f*b+g*S,t[2]=c*M+u*b+x*S,t[3]=d*M+p*b+w*S,t[4]=h*P+m*A+v*y,t[5]=l*P+f*A+g*y,t[6]=c*P+u*A+x*y,t[7]=d*P+p*A+w*y,t[8]=h*T+m*R+v*D,t[9]=l*T+f*R+g*D,t[10]=c*T+u*R+x*D,t[11]=d*T+p*R+w*D,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,n,s,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<a.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),n=Math.cos(e),s=1-n,t[0]=o*o*s+n,t[1]=h*o*s+l*r,t[2]=l*o*s-h*r,t[3]=0,t[4]=o*h*s-l*r,t[5]=h*h*s+n,t[6]=l*h*s+o*r,t[7]=0,t[8]=o*l*s+h*r,t[9]=h*l*s-o*r,t[10]=l*l*s+n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,a,r,n,s){var o=1/(i-e),h=1/(r-a),l=1/(n-s);return t[0]=2*n*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*n*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+a)*h,t[10]=(s+n)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*n*2*l,t[15]=0,t},e.ortho=function(t,e,i,a,r,n,s){var o=1/(e-i),h=1/(a-r),l=1/(n-s);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+a)*h,t[14]=(s+n)*l,t[15]=1,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var a=e[0],r=e[1],n=e[2],s=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],g=e[14],x=e[15],w=i[0],M=i[1],b=i[2],S=i[3];return t[0]=w*a+M*o+b*d+S*p,t[1]=w*r+M*h+b*m+S*v,t[2]=w*n+M*l+b*f+S*g,t[3]=w*s+M*c+b*u+S*x,w=i[4],M=i[5],b=i[6],S=i[7],t[4]=w*a+M*o+b*d+S*p,t[5]=w*r+M*h+b*m+S*v,t[6]=w*n+M*l+b*f+S*g,t[7]=w*s+M*c+b*u+S*x,w=i[8],M=i[9],b=i[10],S=i[11],t[8]=w*a+M*o+b*d+S*p,t[9]=w*r+M*h+b*m+S*v,t[10]=w*n+M*l+b*f+S*g,t[11]=w*s+M*c+b*u+S*x,w=i[12],M=i[13],b=i[14],S=i[15],t[12]=w*a+M*o+b*d+S*p,t[13]=w*r+M*h+b*m+S*v,t[14]=w*n+M*l+b*f+S*g,t[15]=w*s+M*c+b*u+S*x,t}}])}));let canvasWidth,canvasHeight,canvasWidth0,canvasHeight0,b,B,angle,Zoom0,zoom0,viewportmargin,zoomFactor,zoomPinchFactor,zoomPinchCap,zoomStep,shiftHoldDistance,shiftWaitTime,vibrateTime,embedded,canvas,gl,alpha,offscreen,context,maxMaterials,halfCanvasWidth,halfCanvasHeight,Zoom,maxViewportWidth,maxViewportHeight,P=[],Materials=[],Lights=[],Centers=[],Background=[1,1,1,1],absolute=!1,viewportshift=[0,0],nlights=0,Nmaterials=2,materials=[],pixel=.75,zoomRemeshFactor=1.5,FillFactor=.1;const windowTrim=10;let lastZoom,H,zmin,zmax,size2,ArcballFactor,third=1/3,rotMat=mat4.create(),projMat=mat4.create(),viewMat=mat4.create(),projViewMat=mat4.create(),normMat=mat3.create(),viewMat3=mat3.create(),cjMatInv=mat4.create(),T=mat4.create(),center={x:0,y:0,z:0},shift={x:0,y:0},viewParam={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},remesh=!0,wireframe=0,mouseDownOrTouchActive=!1,lastMouseX=null,lastMouseY=null,touchID=null,Positions=[],Normals=[],Colors=[],Indices=[];class Material{constructor(t,e,i,a,r,n){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=a,this.metallic=r,this.fresnel0=n}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Materials["+e+"]."+i);gl.uniform4fv(i("diffuse"),new Float32Array(this.diffuse)),gl.uniform4fv(i("emissive"),new Float32Array(this.emissive)),gl.uniform4fv(i("specular"),new Float32Array(this.specular)),gl.uniform4f(i("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let indexExt,TRIANGLES,material0Data,material1Data,materialData,colorData,transparentData,triangleData,materialIndex,enumPointLight=1,enumDirectionalLight=2;class Light{constructor(t,e){this.direction=t,this.color=e}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Lights["+e+"]."+i);gl.uniform3fv(i("direction"),new Float32Array(this.direction)),gl.uniform3fv(i("color"),new Float32Array(this.color))}}function initShaders(){let t=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);maxMaterials=Math.floor((t-14)/4),Nmaterials=Math.min(Math.max(Nmaterials,Materials.length),maxMaterials),pixelShader=initShader(["WIDTH"]),materialShader=initShader(["NORMAL"]),colorShader=initShader(["NORMAL","COLOR"]),transparentShader=initShader(["NORMAL","COLOR","TRANSPARENT"])}function deleteShaders(){gl.deleteProgram(transparentShader),gl.deleteProgram(colorShader),gl.deleteProgram(materialShader),gl.deleteProgram(pixelShader)}function noGL(){gl||alert("Could not initialize WebGL")}function saveAttributes(){let t=window.top.document.asygl[alpha];t.gl=gl,t.nlights=Lights.length,t.Nmaterials=Nmaterials,t.maxMaterials=maxMaterials,t.pixelShader=pixelShader,t.materialShader=materialShader,t.colorShader=colorShader,t.transparentShader=transparentShader}function restoreAttributes(){let t=window.top.document.asygl[alpha];gl=t.gl,nlights=t.nlights,Nmaterials=t.Nmaterials,maxMaterials=t.maxMaterials,pixelShader=t.pixelShader,materialShader=t.materialShader,colorShader=t.colorShader,transparentShader=t.transparentShader}function initGL(){if(alpha=Background[3]<1,embedded){let t=window.top.document;null==t.asygl&&(t.asygl=Array(2)),context=canvas.getContext("2d"),offscreen=t.offscreen,offscreen||(offscreen=t.createElement("canvas"),t.offscreen=offscreen),t.asygl[alpha]&&t.asygl[alpha].gl?(restoreAttributes(),(Lights.length!=nlights||Math.min(Materials.length,maxMaterials)>Nmaterials)&&(initShaders(),saveAttributes())):(gl=offscreen.getContext("webgl",{alpha:alpha}),gl||noGL(),initShaders(),t.asygl[alpha]={},saveAttributes())}else gl=canvas.getContext("webgl",{alpha:alpha}),gl||noGL(),initShaders();indexExt=gl.getExtension("OES_element_index_uint"),TRIANGLES=gl.TRIANGLES,material0Data=new vertexBuffer(gl.POINTS),material1Data=new vertexBuffer(gl.LINES),materialData=new vertexBuffer,colorData=new vertexBuffer,transparentData=new vertexBuffer,triangleData=new vertexBuffer}function getShader(t,e,i,a=[]){let r=`#version 100\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n#else\n precision mediump float;\n#endif\n #define nlights ${0==wireframe?Lights.length:0}\n\n const int Nlights=${Math.max(Lights.length,1)};\n\n #define Nmaterials ${Nmaterials}\n`;orthographic&&(r+="#define ORTHOGRAPHIC\n"),a.forEach(t=>r+="#define "+t+"\n");let n=t.createShader(i);return t.shaderSource(n,r+e),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS)?n:(alert(t.getShaderInfoLog(n)),null)}function registerBuffer(t,e,i,a=gl.ARRAY_BUFFER){return t.length>0&&(0==e&&(e=gl.createBuffer(),i=!0),gl.bindBuffer(a,e),i&&gl.bufferData(a,t,gl.STATIC_DRAW)),e}function drawBuffer(t,e,i=t.indices){if(0==t.indices.length)return;let a=e!=pixelShader;setUniforms(t,e);let r=remesh||t.partial||!t.rendered;t.verticesBuffer=registerBuffer(new Float32Array(t.vertices),t.verticesBuffer,r),gl.vertexAttribPointer(positionAttribute,3,gl.FLOAT,!1,a?24:16,0),a&&Lights.length>0?gl.vertexAttribPointer(normalAttribute,3,gl.FLOAT,!1,24,12):pixel&&gl.vertexAttribPointer(widthAttribute,1,gl.FLOAT,!1,16,12),t.materialsBuffer=registerBuffer(new Int16Array(t.materialIndices),t.materialsBuffer,r),gl.vertexAttribPointer(materialAttribute,1,gl.SHORT,!1,2,0),e!=colorShader&&e!=transparentShader||(t.colorsBuffer=registerBuffer(new Uint8Array(t.colors),t.colorsBuffer,r),gl.vertexAttribPointer(colorAttribute,4,gl.UNSIGNED_BYTE,!0,0,0)),t.indicesBuffer=registerBuffer(indexExt?new Uint32Array(i):new Uint16Array(i),t.indicesBuffer,r,gl.ELEMENT_ARRAY_BUFFER),t.rendered=!0,gl.drawElements(a?wireframe?gl.LINES:t.type:gl.POINTS,i.length,indexExt?gl.UNSIGNED_INT:gl.UNSIGNED_SHORT,0)}class vertexBuffer{constructor(t){this.type=t||TRIANGLES,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(materialIndex),this.nvertices++}iVertex(t,e,i,a=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=materialIndex;let n=4*t;this.colors[n]=a[0],this.colors[n+1]=a[1],this.colors[n+2]=a[2],this.colors[n+3]=a[3],this.indices.push(t)}append(t){append(this.vertices,t.vertices),append(this.materialIndices,t.materialIndices),append(this.colors,t.colors),appendOffset(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function append(t,e){let i=t.length,a=e.length;t.length+=a;for(let r=0;r<a;++r)t[i+r]=e[r]}function appendOffset(t,e,i){let a=t.length,r=e.length;t.length+=e.length;for(let n=0;n<r;++n)t[a+n]=e[n]+i}class Geometry{constructor(){this.data=new vertexBuffer,this.Onscreen=!1,this.m=[]}offscreen(t){let e=projViewMat,i=t[0],a=i[0],r=i[1],n=i[2],s=1/(e[3]*a+e[7]*r+e[11]*n+e[15]);this.x=this.X=(e[0]*a+e[4]*r+e[8]*n+e[12])*s,this.y=this.Y=(e[1]*a+e[5]*r+e[9]*n+e[13])*s;for(let i=1,a=t.length;i<a;++i){let a=t[i],r=a[0],n=a[1],s=a[2],o=1/(e[3]*r+e[7]*n+e[11]*s+e[15]),h=(e[0]*r+e[4]*n+e[8]*s+e[12])*o,l=(e[1]*r+e[5]*n+e[9]*s+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],a=this.c[2],r=t[0]-e,n=t[1]-i,s=t[2]-a;return[r*normMat[0]+n*normMat[3]+s*normMat[6]+e,r*normMat[1]+n*normMat[4]+s*normMat[7]+i,r*normMat[2]+n*normMat[5]+s*normMat[8]+a]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=Nmaterials&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(Materials[this.MaterialIndex])),materialIndex=t.materialTable[this.MaterialIndex]}render(){let t;if(this.setMaterialIndex(),0==this.CenterIndex?t=corners(this.Min,this.Max):(this.c=Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let e,i=this.controlpoints;if(0==this.CenterIndex){if(!remesh&&this.Onscreen)return void this.append();e=i}else{let t=i.length;e=Array(t);for(let a=0;a<t;++a)e[a]=this.T(i[a])}let a=orthographic?1:this.Min[2]/B[2],r=pixel*Math.hypot(a*(viewParam.xmax-viewParam.xmin),a*(viewParam.ymax-viewParam.ymin))/size2;this.res2=r*r,this.Epsilon=FillFactor*r,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(e)}}class BezierPatch extends Geometry{constructor(t,e,i,a,r,n){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.color=n,this.CenterIndex=e;let s=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==s||4==s?t+n[3][3]<1020:t<765}else this.transparent=Materials[i].diffuse[3]<1;this.MaterialIndex=i,this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data),this.L2norm(this.controlpoints)}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.color?this.setMaterial(colorData,drawColor):this.setMaterial(materialData,drawMaterial)}L2norm(t){let e=t[0];this.epsilon=0;let i=t.length;for(let a=1;a<i;++a)this.epsilon=Math.max(this.epsilon,abs2([t[a][0]-e[0],t[a][1]-e[1],t[a][2]-e[2]]));this.epsilon*=Number.EPSILON}processTriangle(t){let e=t[0],i=t[1],a=t[2],r=unit(cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-e[0],a[1]-e[1],a[2]-e[2]]));if(!this.offscreen([e,i,a])){let t,n,s;this.color?(t=this.data.Vertex(e,r,this.color[0]),n=this.data.Vertex(i,r,this.color[1]),s=this.data.Vertex(a,r,this.color[2])):(t=this.vertex(e,r),n=this.vertex(i,r),s=this.vertex(a,r)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],a=t[2],r=t[3],n=cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-i[0],a[1]-i[1],a[2]-i[2]]),s=cross([a[0]-r[0],a[1]-r[1],a[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=unit([n[0]+s[0],n[1]+s[1],n[2]+s[2]]);if(!this.offscreen([e,i,a,r])){let t,n,s,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),n=this.data.Vertex(i,o,this.color[1]),s=this.data.Vertex(a,o,this.color[2]),h=this.data.Vertex(r,o,this.color[3])):(t=this.vertex(e,o),n=this.vertex(i,o),s=this.vertex(a,o),h=this.vertex(r,o)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,a,r){new BezierCurve([t[e],t[i],t[a],t[r]],0,materialIndex,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=wireframe&&(materialIndex=this.color?-1-materialIndex:1+materialIndex),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==wireframe)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],a=t[12],r=t[15],n=this.normal(i,t[2],t[1],e,t[4],t[8],a);abs2(n)<this.epsilon&&(n=this.normal(i,t[2],t[1],e,t[13],t[14],r),abs2(n)<this.epsilon&&(n=this.normal(r,t[11],t[7],i,t[4],t[8],a)));let s=this.normal(e,t[4],t[8],a,t[13],t[14],r);abs2(s)<this.epsilon&&(s=this.normal(e,t[4],t[8],a,t[11],t[7],i),abs2(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(a,t[13],t[14],r,t[11],t[7],i);abs2(o)<this.epsilon&&(o=this.normal(a,t[13],t[14],r,t[2],t[1],e),abs2(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],a,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(abs2(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],a),abs2(h)<this.epsilon&&(h=this.normal(a,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,n,l),u=this.data.Vertex(a,s,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,a,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,n),c=this.vertex(a,s),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,a,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):this.color?colorData.append(this.data):materialData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:this.color?colorData.rendered=!1:materialData.rendered=!1}Render(t,e,i,a,r,n,s,o,h,l,c,d,m,f,u,p,v){let g=this.Distance(t);if(g[0]<this.res2&&g[1]<this.res2)this.offscreen([n,s,o])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a))),this.offscreen([n,o,h])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(a),this.data.indices.push(r)):(this.data.indices.push(a),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let x=t[0],w=t[3],M=t[12],b=t[15];if(g[0]<this.res2){let g=new Split3(x,t[1],t[2],w),S=new Split3(t[4],t[5],t[6],t[7]),P=new Split3(t[8],t[9],t[10],t[11]),A=new Split3(M,t[13],t[14],b),y=[x,g.m0,g.m3,g.m5,t[4],S.m0,S.m3,S.m5,t[8],P.m0,P.m3,P.m5,M,A.m0,A.m3,A.m5],T=[g.m5,g.m4,g.m2,w,S.m5,S.m4,S.m2,t[7],P.m5,P.m4,P.m2,t[11],A.m5,A.m4,A.m2,b],R=this.normal(y[12],y[13],y[14],y[15],y[11],y[7],y[3]);abs2(R)<=this.epsilon&&(R=this.normal(y[12],y[13],y[14],y[15],y[2],y[1],y[0]),abs2(R)<=this.epsilon&&(R=this.normal(y[0],y[4],y[8],y[12],y[11],y[7],y[3])));let D=this.normal(T[3],T[2],T[1],T[0],T[4],T[8],T[12]);abs2(D)<=this.epsilon&&(D=this.normal(T[3],T[2],T[1],T[0],T[13],T[14],T[15]),abs2(D)<=this.epsilon&&(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12])));let I=this.Epsilon,z=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(T[12],T[8],T[4],T[0]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=y[15];let L=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(x,t[1],t[2],w)<this.res2){let t=unit(this.differential(y[3],y[7],y[11],y[15]));L=[L[0]-I*t[0],L[1]-I*t[1],L[2]-I*t[2]]}else L=T[0];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),g[e]=.5*(v[e]+f[e]);let x=this.data.Vertex(z,R,t),w=this.data.Vertex(L,D,g);this.Render(y,e,i,x,w,n,s,z,L,l,c,!1,m,f,u,t,g),this.Render(T,w,x,a,r,L,z,o,h,!1,c,d,m,g,t,p,v)}else{let t=this.vertex(z,R),f=this.vertex(L,D);this.Render(y,e,i,t,f,n,s,z,L,l,c,!1,m),this.Render(T,f,t,a,r,L,z,o,h,!1,c,d,m)}return}if(g[1]<this.res2){let g=new Split3(x,t[4],t[8],M),S=new Split3(t[1],t[5],t[9],t[13]),P=new Split3(t[2],t[6],t[10],t[14]),A=new Split3(w,t[7],t[11],b),y=[x,t[1],t[2],w,g.m0,S.m0,P.m0,A.m0,g.m3,S.m3,P.m3,A.m3,g.m5,S.m5,P.m5,A.m5],T=[g.m5,S.m5,P.m5,A.m5,g.m4,S.m4,P.m4,A.m4,g.m2,S.m2,P.m2,A.m2,M,t[13],t[14],b],R=this.normal(y[0],y[4],y[8],y[12],y[13],y[14],y[15]);abs2(R)<=this.epsilon&&(R=this.normal(y[0],y[4],y[8],y[12],y[11],y[7],y[3]),abs2(R)<=this.epsilon&&(R=this.normal(y[3],y[2],y[1],y[0],y[13],y[14],y[15])));let D=this.normal(T[15],T[11],T[7],T[3],T[2],T[1],T[0]);abs2(D)<=this.epsilon&&(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12]),abs2(D)<=this.epsilon&&(D=this.normal(T[12],T[13],T[14],T[15],T[2],T[1],T[0])));let I=this.Epsilon,z=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(x,t[4],t[8],M)<this.res2){let t=unit(this.differential(T[0],T[1],T[2],T[3]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=y[12];let L=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Straightness(b,t[11],t[7],w)<this.res2){let t=unit(this.differential(y[15],y[14],y[13],y[12]));L=[L[0]-I*t[0],L[1]-I*t[1],L[2]-I*t[2]]}else L=T[3];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(p[e]+v[e]);let x=this.data.Vertex(z,R,t),w=this.data.Vertex(L,D,g);this.Render(y,e,x,w,r,n,z,L,h,l,!1,d,m,f,t,g,v),this.Render(T,x,i,a,w,z,s,o,L,l,c,d,!1,t,u,p,g)}else{let t=this.vertex(z,R),f=this.vertex(L,D);this.Render(y,e,t,f,r,n,z,L,h,l,!1,d,m),this.Render(T,t,i,a,f,z,s,o,L,l,c,d,!1)}return}let S=new Split3(x,t[1],t[2],w),P=new Split3(t[4],t[5],t[6],t[7]),A=new Split3(t[8],t[9],t[10],t[11]),y=new Split3(M,t[13],t[14],b),T=new Split3(x,t[4],t[8],M),R=new Split3(S.m0,P.m0,A.m0,y.m0),D=new Split3(S.m3,P.m3,A.m3,y.m3),I=new Split3(S.m5,P.m5,A.m5,y.m5),z=new Split3(S.m4,P.m4,A.m4,y.m4),L=new Split3(S.m2,P.m2,A.m2,y.m2),N=new Split3(w,t[7],t[11],b),E=[x,S.m0,S.m3,S.m5,T.m0,R.m0,D.m0,I.m0,T.m3,R.m3,D.m3,I.m3,T.m5,R.m5,D.m5,I.m5],O=[T.m5,R.m5,D.m5,I.m5,T.m4,R.m4,D.m4,I.m4,T.m2,R.m2,D.m2,I.m2,M,y.m0,y.m3,y.m5],V=[I.m5,z.m5,L.m5,N.m5,I.m4,z.m4,L.m4,N.m4,I.m2,z.m2,L.m2,N.m2,y.m5,y.m4,y.m2,b],C=[S.m5,S.m4,S.m2,w,I.m0,z.m0,L.m0,N.m0,I.m3,z.m3,L.m3,N.m3,I.m5,z.m5,L.m5,N.m5],B=E[15],H=this.normal(E[0],E[4],E[8],E[12],E[13],E[14],E[15]);abs2(H)<this.epsilon&&(H=this.normal(E[0],E[4],E[8],E[12],E[11],E[7],E[3]),abs2(H)<this.epsilon&&(H=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15])));let _=this.normal(O[12],O[13],O[14],O[15],O[11],O[7],O[3]);abs2(_)<this.epsilon&&(_=this.normal(O[12],O[13],O[14],O[15],O[2],O[1],O[0]),abs2(_)<this.epsilon&&(_=this.normal(O[0],O[4],O[8],O[12],O[11],O[7],O[3])));let F=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);abs2(F)<this.epsilon&&(F=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),abs2(F)<this.epsilon&&(F=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let G=this.normal(C[3],C[2],C[1],C[0],C[4],C[8],C[12]);abs2(G)<this.epsilon&&(G=this.normal(C[3],C[2],C[1],C[0],C[13],C[14],C[15]),abs2(G)<this.epsilon&&(G=this.normal(C[15],C[11],C[7],C[3],C[4],C[8],C[12])));let W=this.normal(V[3],V[2],V[1],B,V[4],V[8],V[12]),U=this.Epsilon,Z=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(x,t[4],t[8],M)<this.res2){let t=unit(this.differential(O[0],O[1],O[2],O[3]));Z=[Z[0]-U*t[0],Z[1]-U*t[1],Z[2]-U*t[2]]}else Z=E[12];let j=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-U*t[0],j[1]-U*t[1],j[2]-U*t[2]]}else j=O[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Straightness(b,t[11],t[7],w)<this.res2){let t=unit(this.differential(C[15],C[14],C[13],C[12]));k=[k[0]-U*t[0],k[1]-U*t[1],k[2]-U*t[2]]}else k=V[3];let Y=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(x,t[1],t[2],w)<this.res2){let t=unit(this.differential(E[3],E[7],E[11],E[15]));Y=[Y[0]-U*t[0],Y[1]-U*t[1],Y[2]-U*t[2]]}else Y=C[0];if(f){let t=Array(4),g=Array(4),x=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(u[e]+p[e]),x[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+x[e]);let b=this.data.Vertex(Z,H,t),S=this.data.Vertex(j,_,g),P=this.data.Vertex(k,F,x),A=this.data.Vertex(Y,G,w),y=this.data.Vertex(B,W,M);this.Render(E,e,b,y,A,n,Z,B,Y,l,!1,!1,m,f,t,M,w),this.Render(O,b,i,S,y,Z,s,j,B,l,c,!1,!1,t,u,g,M),this.Render(V,y,S,a,P,B,j,o,k,!1,c,d,!1,M,g,p,x),this.Render(C,A,y,P,r,Y,B,k,h,!1,!1,d,m,w,M,x,v)}else{let t=this.vertex(Z,H),f=this.vertex(j,_),u=this.vertex(k,F),p=this.vertex(Y,G),v=this.vertex(B,W);this.Render(E,e,t,v,p,n,Z,B,Y,l,!1,!1,m),this.Render(O,t,i,f,v,Z,s,j,B,l,c,!1,!1),this.Render(V,v,f,a,u,B,j,o,k,!1,c,d,!1),this.Render(C,p,v,u,r,Y,B,k,h,!1,!1,d,m)}}}process3(t){if(1==wireframe)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],a=t[9],r=this.normal(a,t[5],t[2],e,t[1],t[3],i),n=this.normal(e,t[1],t[3],i,t[7],t[8],a),s=this.normal(i,t[7],t[8],a,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,n,h),m=this.data.Vertex(a,s,l);this.Render3(t,c,d,m,e,i,a,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,n),l=this.vertex(a,s);this.Render3(t,o,h,l,e,i,a,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,a,r,n,s,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,n,s])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],g=t[4],x=t[5],w=t[6],M=t[7],b=t[8],S=t[9],P=[.5*(S[0]+x[0]),.5*(S[1]+x[1]),.5*(S[2]+x[2])],A=[.5*(S[0]+b[0]),.5*(S[1]+b[1]),.5*(S[2]+b[2])],y=[.5*(x[0]+p[0]),.5*(x[1]+p[1]),.5*(x[2]+p[2])],T=[.5*(b[0]+g[0]),.5*(b[1]+g[1]),.5*(b[2]+g[2])],R=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],D=[.5*(p[0]+g[0]),.5*(p[1]+g[1]),.5*(p[2]+g[2])],I=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],z=[.5*(g[0]+v[0]),.5*(g[1]+v[1]),.5*(g[2]+v[2])],L=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],N=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],E=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],O=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(P[0]+y[0]),.5*(P[1]+y[1]),.5*(P[2]+y[2])],C=[.5*(A[0]+R[0]),.5*(A[1]+R[1]),.5*(A[2]+R[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],H=[.5*T[0]+.25*(g[0]+u[0]),.5*T[1]+.25*(g[1]+u[1]),.5*T[2]+.25*(g[2]+u[2])],_=[.5*(R[0]+L[0]),.5*(R[1]+L[1]),.5*(R[2]+L[2])],F=[.5*D[0]+.25*(g[0]+M[0]),.5*D[1]+.25*(g[1]+M[1]),.5*D[2]+.25*(g[2]+M[2])],G=[.25*(x[0]+g[0])+.5*z[0],.25*(x[1]+g[1])+.5*z[1],.25*(x[2]+g[2])+.5*z[2]],W=[.5*(N[0]+E[0]),.5*(N[1]+E[1]),.5*(N[2]+E[2])],U=[.5*(E[0]+O[0]),.5*(E[1]+O[1]),.5*(E[2]+O[2])],Z=[.5*(F[0]+W[0]),.5*(F[1]+W[1]),.5*(F[2]+W[2])],j=[.5*(F[0]+U[0]),.5*(F[1]+U[1]),.5*(F[2]+U[2])],k=[.5*(W[0]+U[0]),.5*(W[1]+U[1]),.5*(W[2]+U[2])],Y=[.5*(G[0]+_[0]),.5*(G[1]+_[1]),.5*(G[2]+_[2])],X=[.5*(C[0]+G[0]),.5*(C[1]+G[1]),.5*(C[2]+G[2])],q=[.5*(C[0]+_[0]),.5*(C[1]+_[1]),.5*(C[2]+_[2])],K=[.5*(V[0]+H[0]),.5*(V[1]+H[1]),.5*(V[2]+H[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],Q=[.5*(V[0]+B[0]),.5*(V[1]+B[1]),.5*(V[2]+B[2])],J=[f,N,I,W,[.5*(D[0]+N[0]),.5*(D[1]+N[1]),.5*(D[2]+N[2])],B,k,Z,$,Q],tt=[k,U,j,O,[.5*(z[0]+L[0]),.5*(z[1]+L[1]),.5*(z[2]+L[2])],Y,w,L,_,q],et=[Q,K,V,X,[.5*(P[0]+T[0]),.5*(P[1]+T[1]),.5*(P[2]+T[2])],P,q,C,A,S],it=[q,X,Y,K,[.25*(y[0]+R[0]+E[0]+g[0]),.25*(y[1]+R[1]+E[1]+g[1]),.25*(y[2]+R[2]+E[2]+g[2])],j,Q,$,Z,k],at=this.normal(k,j,Y,q,X,K,Q),rt=this.normal(q,X,K,Q,$,Z,k),nt=this.normal(Q,$,Z,k,j,Y,q),st=this.Epsilon,ot=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!o)if(o=Straightness(w,M,b,S)<this.res2){let t=unit(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-st*t[0],ot[1]-st*t[1],ot[2]-st*t[2]]}else ot=q;let ht=[.5*(s[0]+r[0]),.5*(s[1]+r[1]),.5*(s[2]+r[2])];if(!h)if(h=Straightness(f,p,x,S)<this.res2){let t=unit(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-st*t[0],ht[1]-st*t[1],ht[2]-st*t[2]]}else ht=Q;let lt=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])];if(!l)if(l=Straightness(f,u,v,w)<this.res2){let t=unit(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-st*t[0],lt[1]-st*t[1],lt[2]-st*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,at,t),v=this.data.Vertex(ht,rt,f),g=this.data.Vertex(lt,nt,u);this.Render3(J,e,g,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,g,i,p,lt,n,ot,o,!1,l,u,d,t),this.Render3(et,v,p,a,ht,ot,s,o,h,!1,f,t,m),this.Render3(it,p,v,g,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,at),c=this.vertex(ht,rt),d=this.vertex(lt,nt);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,n,ot,o,!1,l),this.Render3(et,c,t,a,ht,ot,s,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],a=t[12],r=t[15],n=Flatness(e,a,i,r);n=Math.max(Straightness(e,t[4],t[8],a)),n=Math.max(n,Straightness(t[1],t[5],t[9],t[13])),n=Math.max(n,Straightness(i,t[7],t[11],r)),n=Math.max(n,Straightness(t[2],t[6],t[10],t[14]));let s=Flatness(e,i,a,r);return s=Math.max(s,Straightness(e,t[1],t[2],i)),s=Math.max(s,Straightness(t[4],t[5],t[6],t[7])),s=Math.max(s,Straightness(t[8],t[9],t[10],t[11])),s=Math.max(s,Straightness(a,t[13],t[14],r)),[n,s]}Distance3(t){let e=t[0],i=t[4],a=t[6],r=t[9],n=abs2([(e[0]+a[0]+r[0])*third-i[0],(e[1]+a[1]+r[1])*third-i[1],(e[2]+a[2]+r[2])*third-i[2]]);return n=Math.max(n,Straightness(e,t[1],t[3],a)),n=Math.max(n,Straightness(e,t[2],t[5],r)),Math.max(n,Straightness(a,t[7],t[8],r))}differential(t,e,i,a){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return abs2(r)>this.epsilon?r:(r=bezierPP(t,e,i),abs2(r)>this.epsilon?r:bezierPPP(t,e,i,a))}sumdifferential(t,e,i,a,r,n,s){let o=this.differential(t,e,i,a),h=this.differential(t,r,n,s);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,a,r,n,s){let o=3*(r[0]-a[0]),h=3*(r[1]-a[1]),l=3*(r[2]-a[2]),c=3*(i[0]-a[0]),d=3*(i[1]-a[1]),m=3*(i[2]-a[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(abs2(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=bezierPP(a,i,e),g=bezierPP(a,r,n),x=cross(g,u),w=cross(p,v);if(f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon)return f;let M=bezierPPP(a,i,e,t),b=bezierPPP(a,r,n,s);x=cross(p,M),w=cross(b,u);let S=cross(g,v);return f=[x[0]+w[0]+S[0],x[1]+w[1]+S[1],x[2]+w[2]+S[2]],abs2(f)>this.epsilon?f:(x=cross(b,v),w=cross(g,M),f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon?f:cross(b,M))}}class BezierCurve extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.CenterIndex=e,this.MaterialIndex=i}setMaterialIndex(){this.setMaterial(material1Data,drawMaterial1)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],a=t[2],r=t[3],n=this.normal(bezierP(e,i),bezierPP(e,i,a)),s=this.normal(bezierP(a,r),bezierPP(r,a,i)),o=this.data.vertex(e,n),h=this.data.vertex(r,s);this.Render(t,o,h),this.data.indices.length>0&&this.append()}append(){material1Data.append(this.data)}notRendered(){material1Data.rendered=!1}Render(t,e,i){let a=t[0],r=t[1],n=t[2],s=t[3];if(Straightness(a,r,n,s)<this.res2)this.offscreen([a,s])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])],h=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])],l=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[a,o,c,m],u=[m,d,l,s],p=this.normal(bezierPh(a,r,n,s),bezierPPh(a,r,n,s)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=dot(t,t),a=dot(t,e);return[i*e[0]-a*t[0],i*e[1]-a*t[1],i*e[2]-a*t[2]]}}class Pixel extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=a,this.Max=r}setMaterialIndex(){this.setMaterial(material0Data,drawMaterial0)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){material0Data.append(this.data)}notRendered(){material0Data.rendered=!1}}class Triangles extends Geometry{constructor(t,e,i){super(),this.CenterIndex=0,this.MaterialIndex=t,this.Min=e,this.Max=i,this.Positions=Positions,this.Normals=Normals,this.Colors=Colors,this.Indices=Indices,Positions=[],Normals=[],Colors=[],Indices=[],this.transparent=Materials[t].diffuse[3]<1}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.setMaterial(triangleData,drawTriangle)}process(t){materialIndex=this.Colors.length>0?-1-materialIndex:1+materialIndex;for(let t=0,e=this.Indices.length;t<e;++t){let e=this.Indices[t],i=e[0],a=this.Positions[i[0]],r=this.Positions[i[1]],n=this.Positions[i[2]];if(!this.offscreen([a,r,n])){let t=e.length>1?e[1]:i;if(t&&0!=t.length||(t=i),this.Colors.length>0){let s=e.length>2?e[2]:i;s&&0!=s.length||(s=i);let o=this.Colors[s[0]],h=this.Colors[s[1]],l=this.Colors[s[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l)):(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[0],a,this.Normals[t[0]],o))}else 0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]])):(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[0],a,this.Normals[t[0]]))}}this.data.nvertices=this.Positions.length,this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):triangleData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:triangleData.rendered=!1}}function redraw(){initProjection(),setProjection(),remesh=!0,draw()}function home(){mat4.identity(rotMat),redraw()}let positionAttribute=0,normalAttribute=1,materialAttribute=2,colorAttribute=3,widthAttribute=4;function initShader(t=[]){let e=getShader(gl,vertex,gl.VERTEX_SHADER,t),i=getShader(gl,fragment,gl.FRAGMENT_SHADER,t),a=gl.createProgram();return gl.attachShader(a,e),gl.attachShader(a,i),gl.bindAttribLocation(a,positionAttribute,"position"),gl.bindAttribLocation(a,normalAttribute,"normal"),gl.bindAttribLocation(a,materialAttribute,"materialIndex"),gl.bindAttribLocation(a,colorAttribute,"color"),gl.bindAttribLocation(a,widthAttribute,"width"),gl.linkProgram(a),gl.getProgramParameter(a,gl.LINK_STATUS)||alert("Could not initialize shaders"),a}class Split3{constructor(t,e,i,a){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),n=.5*(e[1]+i[1]),s=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+a[0]),.5*(i[1]+a[1]),.5*(i[2]+a[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+n),.5*(this.m0[2]+s)],this.m4=[.5*(r+this.m2[0]),.5*(n+this.m2[1]),.5*(s+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}function unit(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function abs2(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function dot(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function cross(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function bezierP(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function bezierPP(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function bezierPPP(t,e,i,a){return[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]}function bezierPh(t,e,i,a){return[i[0]+a[0]-t[0]-e[0],i[1]+a[1]-t[1]-e[1],i[2]+a[2]-t[2]-e[2]]}function bezierPPh(t,e,i,a){return[3*t[0]-5*e[0]+i[0]+a[0],3*t[1]-5*e[1]+i[1]+a[1],3*t[2]-5*e[2]+i[2]+a[2]]}function Straightness(t,e,i,a){let r=[third*(a[0]-t[0]),third*(a[1]-t[1]),third*(a[2]-t[2])];return Math.max(abs2([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),abs2([a[0]-r[0]-i[0],a[1]-r[1]-i[1],a[2]-r[2]-i[2]]))}function Flatness(t,e,i,a){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],n=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return Math.max(abs2(cross(r,unit(n))),abs2(cross(n,unit(r))))/9}function corners(t,e){return[t,[t[0],t[1],e[2]],[t[0],e[1],t[2]],[t[0],e[1],e[2]],[e[0],t[1],t[2]],[e[0],t[1],e[2]],[e[0],e[1],t[2]],e]}function minbound(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function maxbound(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function COBTarget(t,e){mat4.fromTranslation(T,[center.x,center.y,center.z]),mat4.invert(cjMatInv,T),mat4.multiply(t,e,cjMatInv),mat4.multiply(t,T,t)}function setUniforms(t,e){let i=e==pixelShader;gl.useProgram(e),gl.enableVertexAttribArray(positionAttribute),i&&gl.enableVertexAttribArray(widthAttribute);let a=!i&&Lights.length>0;if(a&&gl.enableVertexAttribArray(normalAttribute),gl.enableVertexAttribArray(materialAttribute),e.projViewMatUniform=gl.getUniformLocation(e,"projViewMat"),e.viewMatUniform=gl.getUniformLocation(e,"viewMat"),e.normMatUniform=gl.getUniformLocation(e,"normMat"),e!=colorShader&&e!=transparentShader||gl.enableVertexAttribArray(colorAttribute),a)for(let t=0;t<Lights.length;++t)Lights[t].setUniform(e,t);for(let i=0;i<t.materials.length;++i)t.materials[i].setUniform(e,i);gl.uniformMatrix4fv(e.projViewMatUniform,!1,projViewMat),gl.uniformMatrix4fv(e.viewMatUniform,!1,viewMat),gl.uniformMatrix3fv(e.normMatUniform,!1,normMat)}function handleMouseDown(t){zoomEnabled||enableZoom(),mouseDownOrTouchActive=!0,lastMouseX=t.clientX,lastMouseY=t.clientY}let pinchStart,touchStartTime,pinch=!1;function pinchDistance(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function handleTouchStart(t){t.preventDefault(),zoomEnabled||enableZoom();let e=t.targetTouches;swipe=rotate=pinch=!1,zooming||(1!=e.length||mouseDownOrTouchActive||(touchStartTime=(new Date).getTime(),touchId=e[0].identifier,lastMouseX=e[0].pageX,lastMouseY=e[0].pageY),2!=e.length||mouseDownOrTouchActive||(touchId=e[0].identifier,pinchStart=pinchDistance(e),pinch=!0))}function handleMouseUpOrTouchEnd(t){mouseDownOrTouchActive=!1}function rotateScene(t,e,i,a,r){if(t==i&&e==a)return;let[n,s]=arcball([t,-e],[i,-a]);mat4.fromRotation(T,2*r*ArcballFactor*n/Zoom,s),mat4.multiply(rotMat,T,rotMat)}function shiftScene(t,e,i,a){let r=1/Zoom;shift.x+=(i-t)*r*halfCanvasWidth,shift.y-=(a-e)*r*halfCanvasHeight}function panScene(t,e,i,a){orthographic?shiftScene(t,e,i,a):(center.x+=(i-t)*(viewParam.xmax-viewParam.xmin),center.y-=(a-e)*(viewParam.ymax-viewParam.ymin))}function updateViewMatrix(){COBTarget(viewMat,rotMat),mat4.translate(viewMat,viewMat,[center.x,center.y,0]),mat3.fromMat4(viewMat3,viewMat),mat3.invert(normMat,viewMat3),mat4.multiply(projViewMat,projMat,viewMat)}function capzoom(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;Zoom<=e&&(Zoom=e),Zoom>=t&&(Zoom=t),(zoomRemeshFactor*Zoom<lastZoom||Zoom>zoomRemeshFactor*lastZoom)&&(remesh=!0,lastZoom=Zoom)}function zoomImage(t){let e=zoomStep*halfCanvasHeight*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(zoomFactor);Math.abs(e)<i&&(Zoom*=zoomFactor**e,capzoom())}function normMouse(t){let e=t[0],i=t[1],a=Math.hypot(e,i);return a>1&&(denom=1/a,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function arcball(t,e){let i=normMouse(t),a=normMouse(e),r=dot(i,a);return[r>1?0:r<-1?pi:Math.acos(r),unit(cross(i,a))]}function zoomScene(t,e,i,a){zoomImage(e-a)}const DRAGMODE_ROTATE=1,DRAGMODE_SHIFT=2,DRAGMODE_ZOOM=3,DRAGMODE_PAN=4;function processDrag(t,e,i,a=1){let r;switch(i){case 1:r=rotateScene;break;case 2:r=shiftScene;break;case 3:r=zoomScene;break;case 4:r=panScene;break;default:r=(t,e,i,a)=>{}}r((lastMouseX-halfCanvasWidth)/halfCanvasWidth,(lastMouseY-halfCanvasHeight)/halfCanvasHeight,(t-halfCanvasWidth)/halfCanvasWidth,(e-halfCanvasHeight)/halfCanvasHeight,a),lastMouseX=t,lastMouseY=e,setProjection(),draw()}let zoomEnabled=0;function enableZoom(){zoomEnabled=1,canvas.addEventListener("wheel",handleMouseWheel,!1)}function disableZoom(){zoomEnabled=0,canvas.removeEventListener("wheel",handleMouseWheel,!1)}function handleKey(t){if(zoomEnabled||enableZoom(),embedded&&zoomEnabled&&27==t.keyCode)return void disableZoom();let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":home();break;case"m":++wireframe,3==wireframe&&(wireframe=0),2!=wireframe&&(embedded||deleteShaders(),initShaders()),remesh=!0,draw();break;case"+":case"=":case">":expand();break;case"-":case"_":case"<":shrink()}e.length>0&&(mat4.rotate(rotMat,rotMat,.1,e),updateViewMatrix(),draw())}function setZoom(){capzoom(),setProjection(),draw()}function handleMouseWheel(t){t.preventDefault(),t.deltaY<0?Zoom*=zoomFactor:Zoom/=zoomFactor,setZoom()}function handleMouseMove(t){if(!mouseDownOrTouchActive)return;let e,i=t.clientX,a=t.clientY;e=t.getModifierState("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,processDrag(i,a,e)}let zooming=!1,swipe=!1,rotate=!1;function handleTouchMove(t){if(t.preventDefault(),zooming)return;let e=t.targetTouches;if(!pinch&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,a=t-lastMouseX,r=i-lastMouseY,n=a*a+r*r<=shiftHoldDistance*shiftHoldDistance;if(n&&!swipe&&!rotate&&(new Date).getTime()-touchStartTime>shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(vibrateTime),swipe=!0),swipe)processDrag(t,i,2);else if(!n){rotate=!0,processDrag(e[0].pageX,e[0].pageY,1,.5)}}if(pinch&&!swipe&&2==e.length&&touchId==e[0].identifier){let t=pinchDistance(e),i=t-pinchStart;zooming=!0,i*=zoomPinchFactor,i>zoomPinchCap&&(i=zoomPinchCap),i<-zoomPinchCap&&(i=-zoomPinchCap),zoomImage(i/size2),pinchStart=t,swipe=rotate=zooming=!1,setProjection(),draw()}}let pixelShader,materialShader,colorShader,transparentShader,zbuffer=[];function transformVertices(t){let e=viewMat[2],i=viewMat[6],a=viewMat[10];zbuffer.length=t.length;for(let r=0;r<t.length;++r){let n=6*r;zbuffer[r]=e*t[n]+i*t[n+1]+a*t[n+2]}}function drawMaterial0(){drawBuffer(material0Data,pixelShader),material0Data.clear()}function drawMaterial1(){drawBuffer(material1Data,materialShader),material1Data.clear()}function drawMaterial(){drawBuffer(materialData,materialShader),materialData.clear()}function drawColor(){drawBuffer(colorData,colorShader),colorData.clear()}function drawTriangle(){drawBuffer(triangleData,transparentShader),triangleData.rendered=!1,triangleData.clear()}function drawTransparent(){let t=transparentData.indices;if(wireframe>0)return drawBuffer(transparentData,transparentShader,t),void transparentData.clear();if(t.length>0){transformVertices(transparentData.vertices);let e=t.length/3,i=Array(e).fill().map((t,e)=>e);i.sort((function(e,i){let a=3*e;Ia=t[a],Ib=t[a+1],Ic=t[a+2];let r=3*i;return IA=t[r],IB=t[r+1],IC=t[r+2],zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic]<zbuffer[IA]+zbuffer[IB]+zbuffer[IC]?-1:1}));let a=Array(t.length);for(let r=0;r<e;++r){let e=3*i[r];a[3*r]=t[e],a[3*r+1]=t[e+1],a[3*r+2]=t[e+2]}gl.depthMask(!1),drawBuffer(transparentData,transparentShader,a),transparentData.rendered=!1,gl.depthMask(!0)}transparentData.clear()}function drawBuffers(){drawMaterial0(),drawMaterial1(),drawMaterial(),drawColor(),drawTriangle(),drawTransparent()}function draw(){embedded&&(offscreen.width=canvasWidth,offscreen.height=canvasHeight,setViewport()),gl.clearColor(Background[0],Background[1],Background[2],Background[3]),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);for(let t=0;t<P.length;++t)P[t].render();drawBuffers(),embedded&&(context.clearRect(0,0,canvasWidth,canvasHeight),context.drawImage(offscreen,0,0)),0==wireframe&&(remesh=!1)}function setDimensions(t,e,i,a){let r=t/e,n=1/Zoom,s=(i/t+viewportshift[0])*Zoom,o=(a/e+viewportshift[1])*Zoom;if(orthographic){let t=B[0]-b[0],e=B[1]-b[1];if(t<e*r){let t=.5*e*r*n,i=2*t*s,a=e*n*o;viewParam.xmin=-t-i,viewParam.xmax=t-i,viewParam.ymin=b[1]*n-a,viewParam.ymax=B[1]*n-a}else{let e=.5*t/(r*Zoom),i=t*n*s,a=2*e*o;viewParam.xmin=b[0]*n-i,viewParam.xmax=B[0]*n-i,viewParam.ymin=-e-a,viewParam.ymax=e-a}}else{let t=H*n,e=t*r,i=2*e*s,a=2*t*o;viewParam.xmin=-e-i,viewParam.xmax=e-i,viewParam.ymin=-t-a,viewParam.ymax=t-a}}function setProjection(){setDimensions(canvasWidth,canvasHeight,shift.x,shift.y),(orthographic?mat4.ortho:mat4.frustum)(projMat,viewParam.xmin,viewParam.xmax,viewParam.ymin,viewParam.ymax,-viewParam.zmax,-viewParam.zmin),updateViewMatrix()}function initProjection(){H=-Math.tan(.5*angle)*B[2],center.x=center.y=0,center.z=.5*(b[2]+B[2]),lastZoom=Zoom=zoom0,viewParam.zmin=b[2],viewParam.zmax=B[2],shift.x=shift.y=0}function setViewport(){gl.viewportWidth=canvasWidth,gl.viewportHeight=canvasHeight,gl.viewport(.5*(canvas.width-canvasWidth),.5*(canvas.height-canvasHeight),canvasWidth,canvasHeight),gl.scissor(0,0,canvas.width,canvas.height)}function setCanvas(){embedded&&(canvas.width=offscreen.width=canvasWidth,canvas.height=offscreen.height=canvasHeight),size2=Math.hypot(canvasWidth,canvasHeight),halfCanvasWidth=.5*canvas.width,halfCanvasHeight=.5*canvas.height,ArcballFactor=1+8*Math.hypot(viewportmargin[0],viewportmargin[1])/size2}function setsize(t,e){t>maxViewportWidth&&(t=maxViewportWidth),e>maxViewportHeight&&(e=maxViewportHeight),shift.x*=t/canvasWidth,shift.y*=e/canvasHeight,canvasWidth=t,canvasHeight=e,setCanvas(),setViewport(),setProjection(),remesh=!0}function resize(){if(zoom0=Zoom0,absolute&&!embedded)canvasWidth=canvasWidth0*window.devicePixelRatio,canvasHeight=canvasHeight0*window.devicePixelRatio;else{let t=canvasWidth0/canvasHeight0;canvasWidth=Math.max(window.innerWidth-10,10),canvasHeight=Math.max(window.innerHeight-10,10),!orthographic&&canvasWidth<canvasHeight*t&&(zoom0*=canvasWidth/(canvasHeight*t))}canvas.width=canvasWidth,canvas.height=canvasHeight;window.innerWidth,window.innerHeight;viewportshift[0]/=zoom0,viewportshift[1]/=zoom0,setsize(canvasWidth,canvasHeight),redraw()}function expand(){Zoom*=zoomFactor,setZoom()}function shrink(){Zoom/=zoomFactor,setZoom()}class Align{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],a=t[2],r=e*this.ct+a*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+a*this.ct+this.center[2]]}}function Tcorners(t,e,i){let a=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[minbound(a),maxbound(a)]}function sphere(t,e,i,r,n){let s,o,h,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,g=.0549670512339254,x=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,a,0],[1,a,m],[f,a*f,u],[p,a*p,v],[a,1,0],[a,1,m],[a*f,f,u],[a*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,a*p,v],[g,0,x],[a*p,p,v],[w,w,1],[.05*a,0,1],[0,p,v],[0,g,x],[0,.05*a,1],[0,0,1]]],b=new Align(t,n);function S(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let a=t[i];e[i]=c([s*a[0],o*a[1],h*a[2]])}return e}n?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let A=Tcorners(c,[-e,-e,d],[e,e,e]),y=A[0],T=A[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){o=t*e;for(let t=l;t<=1;t+=2){h=t*e;for(let t=0;t<2;++t)P.push(new BezierPatch(S(M[t]),i,r,y,T))}}}}let a=4/3*(Math.sqrt(2)-1);function disk(t,e,i,r,n){let s=1-2*a/3,o=[[1,0,0],[1,-a,0],[a,-1,0],[0,-1,0],[1,a,0],[s,0,0],[0,-s,0],[-a,-1,0],[a,1,0],[0,s,0],[-s,0,0],[-1,-a,0],[0,1,0],[-a,1,0],[-1,a,0],[-1,0,0]],h=new Align(t,n);let l=Tcorners(h.T.bind(h),[-e,-e,0],[e,e,0]);P.push(new BezierPatch(function(t){let i=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];i[a]=h.T([e*r[0],e*r[1],0])}return i}(o),i,r,l[0],l[1]))}function cylinder(t,e,i,r,n,s,o){let h,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,a,0],[1,a,1/3],[1,a,2/3],[1,a,1],[a,1,0],[a,1,1/3],[a,1,2/3],[a,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Align(t,s);function m(t){let e=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];e[a]=d.T([h*r[0],l*r[1],i*r[2]])}return e}let f=Tcorners(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){h=t*e;for(let t=-1;t<=1;t+=2)l=t*e,P.push(new BezierPatch(m(c),r,n,u,p))}if(o){let e=d.T([0,0,i]);P.push(new BezierCurve([t,e],r,n,t,e))}}function rmf(t,e,i,a,r){class n{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=cross(i,e)}}let s=Number.EPSILON*Math.max(abs2(t),abs2(e),abs2(i),abs2(a));function o(r){if(1==r){let r=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return abs2(r)>s?unit(r):(r=[2*i[0]-e[0]-a[0],2*i[1]-e[1]-a[1],2*i[2]-e[2]-a[2]],abs2(r)>s?unit(r):[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])])}let n=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[n[0]*l+o[0]*r+h[0],n[1]*l+o[1]*r+h[1],n[2]*l+o[2]*r+h[2]];return abs2(c)>s?unit(c):(l=2*r,c=[n[0]*l+o[0],n[1]*l+o[1],n[2]*l+o[2]],abs2(c)>s?unit(c):unit(n))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];abs2(l)<s&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],abs2(l)<s&&(l=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])])),l=unit(l);let c=function(t){let e=cross(t,[0,1,0]),i=Number.EPSILON*abs2(t);return abs2(e)>i?unit(e):(e=cross(t,[0,0,1]),abs2(e)>i?unit(e):[1,0,0])}(l);h[0]=new n(t,c,l);for(let s=1;s<r.length;++s){let l=h[s-1],c=r[s],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*a[0],f*t[1]+m*e[1]+d*i[1]+p*a[1],f*t[2]+m*e[2]+d*i[2]+p*a[2]],g=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=g[0]||0!=g[1]||0!=g[2]){let t=l.r,e=unit(g),i=l.t,a=dot(e,i),r=[i[0]-2*a*e[0],i[1]-2*a*e[1],i[2]-2*a*e[2]];i=o(c);let d=2*dot(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=unit([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*dot(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[s]=new n(v,unit(m),unit(i))}else h[s]=h[s-1]}return h}function tube(t,e,i,r,n,s,o){let h=rmf(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),l=a*e,c=[[e,0],[e,l],[l,e],[0,e]];function d(e,a,o,l){let d=Array(16);for(let i=0;i<4;++i){let r=h[i],n=r.r[0],s=r.s[0],m=n*e+s*a,f=n*o+s*l;n=r.r[1],s=r.s[1];let u=n*e+s*a,p=n*o+s*l;n=r.r[2],s=r.s[2];let v=n*e+s*a,g=n*o+s*l,x=t[i],w=x[0];w1=x[1],w2=x[2];for(let t=0;t<4;++t){let e=c[t],a=e[0],r=e[1];d[4*i+t]=[m*a+f*r+w,u*a+p*r+w1,v*a+g*r+w2]}}P.push(new BezierPatch(d,i,r,n,s))}d(1,0,0,1),d(0,-1,1,0),d(-1,0,0,-1),d(0,1,-1,0),o&&P.push(new BezierCurve(t,i,r,n,s))}function webGLStart(){canvas=document.getElementById("Asymptote"),embedded=window.top.document!=document,initGL(),gl.enable(gl.BLEND),gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA),gl.enable(gl.DEPTH_TEST),gl.enable(gl.SCISSOR_TEST),canvas.onmousedown=handleMouseDown,document.onmouseup=handleMouseUpOrTouchEnd,document.onmousemove=handleMouseMove,canvas.onkeydown=handleKey,embedded||enableZoom(),canvas.addEventListener("touchstart",handleTouchStart,!1),canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchmove",handleTouchMove,!1),document.addEventListener("keydown",handleKey,!1),canvasWidth0=canvasWidth,canvasHeight0=canvasHeight,mat4.identity(rotMat),0!=window.innerWidth&&0!=window.innerHeight&&resize(),window.addEventListener("resize",resize,!1)} |