//グラフィックライブラリ:glib
//1998.7.16 ver-1.2 小山智史(弘前大学)
//2001.9.1 ver-1.3g ...NN4, NN6, IE5に対応, circle(), ellipse()などを追加
//グラフィックを独立窓に表示する場合はgopen(...,gwin)でgwinを-1にします。
//現在位置に表示する場合はgwinを0にします
//フレーム表示の場合はgwinを1〜のフレーム番号にします
var ON=1, OFF=0, SWIDTH=8, SHEIGHT=11
var BGCOLOR, IXMAX, IYMAX, ILINE=1
var IXPOS=0, IYPOS=0, DM=1, KX=0, KY=0, KZ=0
var XOF=0, YOF=0, ZOF=0, XFS=0, YFS=0, ZFS=0, XCK=1, YCK=1, ZCK=1, XSPAN=1, YSPAN=1, ZSPAN=1,XSTEP=0, YSTEP=0, ZSTEP=0
var c1=new Array(1,.966,.866,.707,.5,.259,0)
var iflag=new Array(); ixtable=new Array(), iytable=new Array()
var gwin=0
var gcolor=new Array("RED","BLUE","GREEN","MAGENTA","ORANGE","PINK","LIME","YELLOW","BROWN","BLACK");
var gsymbol=new Array("×","●","▲","■","◆","*","○","△","□","◇")
//グラフィックの開始...
//bgcolor:背景色, ixmax:幅,iymax:高さ, s:タイトル, gwin:-1で独立窓, 0で現在位置, 1〜でフレーム
var agt=navigator.userAgent.toLowerCase()
var is_major= parseInt(navigator.appVersion)
var is_nav = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('compatible')==-1))
var is_nav4 = (is_nav && (is_major==4))
var is_nav4up=(is_nav && (is_major>=4))
var is_nav5up=(is_nav && (is_major>=5))
var is_ie = (agt.indexOf("msie")!=-1)
var is_ie3 = (is_ie && (is_major< 4))
var is_ie4 = (is_ie && (is_major==4) && (agt.indexOf("msie 5.0")==-1) )
var is_ie4up= (is_ie && (is_major>=4))
var is_ie5up= (is_ie && !is_ie3 && !is_ie4)
function gopen(bgcolor,ixmax,iymax,s,gw){
GWIN=gw; BGCOLOR=bgcolor||"cornsilk"; IXMAX=ixmax||400; IYMAX=iymax||200; ILINE=1
IXPOS=IYPOS=0; DM=1; KX=KY=KZ=0; XOF=YOF=ZOF=0; XCK=YCK=ZCK=1
if(GWIN<0){ //ウィンドウ版
gwin=window.open("","gwin1","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width="+IXMAX+",height="+IYMAX)
gwin.focus();gwin.document.open();gwin.document.bgColor=BGCOLOR
gwin.document.write("
"+s+"")
gwin.document.write(""+s+"
")
}else if(GWIN==0){ //現在位置
if(is_nav4) document.write("
")
else if(is_ie4up) document.write("
"+s+"
")
else if(is_nav5up) document.write("
"+s+"
")
}else with(parent.frames[GWIN].document){ //フレーム版
open()
if(is_nav4) write("
")
else if(is_ie4up) write("
"+s+"
")
else if(is_nav5up) write("
"+s+"
")
}
}
//グラフィック終了
function gclose(){
if(GWIN<0) gwin.document.close() //ウィンドウ版
else if(GWIN==0){
if(is_nav4) document.write("
") //現在位置
else if(is_ie4up) document.write("
")
else if(is_nav5up){
document.write("
")
for(var i=0;i") //グラフ表示後の位置調整(NN6)
}
}else with(parent.frames[GWIN].document){ //フレーム版
if(is_nav4) write("
") //現在位置
else if(is_ie4up) write("
")
else if(is_nav5up){
write("
")
for(var i=0;i") //グラフ表示後の位置調整(NN6)
}
}
}
function ixx(ix){return (DM==2||DM==3)?(IXPOS-ix):(IXPOS+ix)}
function iyy(iy){return (DM==3||DM==4)?(IYPOS+iy):(IYPOS-iy)}
function xyinit(ix0,iy0,dm,kx0,ky0,kz0){IXPOS=ix0;IYPOS=iy0;DM=dm; KX=kx0; KY=ky0; KZ=kz0}
function xyzcv1(x, y, z, P){
var kx1,ky1,kz1,kx2,ky2,kz2,kz3,zz,x1,y1,x2,y2,cx1,cy1,cz
kx1=(KX<0)?(1-KX):(1+KX)
ky1=(KY<0)?(1-KY):(1+KY)
kz1=(KZ<0)?(1-KZ):(1+KZ)
kz2=Math.floor((kz1-1)/10)
kz1=Math.floor(kz1-(10*kz2))
kx2=8-kx1; ky2=8-ky1; kz3=8-kz1
if(KX!=KY) kz1=kz3=1
P.x=x/XCK; P.y=y/YCK;
zz=z/ZCK;
x1=c1[kx1-1]*P.x; y1=c1[ky1-1]*P.y
cy1=(-c1[ky2-1]); cx1=c1[kx2-1]
if((KY<0)^(DM==2 || DM==4)) cy1=(-cy1)
if((KX<0)^(DM==2 || DM==4)) cx1=(-cx1)
x2=x1+cy1*P.y; y2=y1+cx1*P.x
cz=c1[kz3-1]
if(kz2==0){
if((KZ<0)&&(DM==2 || DM==3)) cz=(-cz)
x2=c1[kz1-1]*x2+cz*zz
}else if(kz2==1){
if((KZ<0)&&(DM==3 || DM==4)) cz=(-cz)
y2=c1[kz1-1]*y2+cz*zz
}
P.x=Math.floor(100*x2); P.y=Math.floor(100*y2)
}
function xyzcv(x, y, z, P){
var POF=new Array()
xyzcv1(x,y,z,P); xyzcv1(XOF,YOF,ZOF,POF)
P.x-=POF.x; P.y-=POF.y
}
function goffset(x, y, z){ XOF=x; YOF=y; ZOF=z } //オフセット指定
function gscale(cx, cy, cz){ XCK=cx; YCK=cy; ZCK=cz } //軸感度指定
function plot(color,x,y,s){
if(s) symbol(color,x,y,s);
else if(is_nav4){
if(GWIN<0) gwin.document.write("");
else if(GWIN==0) document.write("");
else parent.frames[GWIN].document.write("");
}else if(is_ie4up||is_nav5up){
if(GWIN<0) gwin.document.write("");
else if(GWIN==0) document.write("");
else parent.frames[GWIN].document.write("");
}
}
function fplot(color, x, y, z, s){
var P=new Array();
if(s) fsymbol(color,x,y,z,s);
else{xyzcv(x,y,z,P); plot(color,P.x,P.y);}
}
function plot0(color,x,y,s){
if(is_nav4){
if(GWIN<0) gwin.document.write(""+s+"")
else if(GWIN==0) document.write(""+s+"")
else parent.frames[GWIN].document.write(""+s+"")
}else if(is_ie4up||is_nav5up){
if(GWIN<0) gwin.document.write(""+s+"")
else if(GWIN==0) document.write(""+s+"")
else parent.frames[GWIN].document.write(""+s+"")
}
}
function plotc(color, s, str){
var ixpos1=IXPOS, iypos1=IYPOS, dm1=DM, kx1=KX, ky1=KY, kz1=KZ
var ix=IXMAX-100-str.length*SWIDTH-SWIDTH
var iy=-(SHEIGHT+2)*(ILINE++)
xyinit(0,0,0,0,0,0)
symbol(color,IXMAX-80,iy,str)
iy-=(SHEIGHT/2)
// line( color,IXMAX-140,iy,IXMAX-100,iy)
// plot0(color,IXMAX-140,iy,s)
plot0(color,IXMAX-90,iy,s)
xyinit(ixpos1,iypos1,dm1,kx1,ky1,kz1)
}
function circle(color,x0,y0,r){
var x=r, y=0
while(x>=y){
plot(color,x0+x,y0+y); plot(color,x0+x,y0-y)
plot(color,x0-x,y0+y); plot(color,x0-x,y0-y)
plot(color,x0+y,y0+x); plot(color,x0+y,y0-x)
plot(color,x0-y,y0+x); plot(color,x0-y,y0-x)
if((r-=(y++ <<1))<0) r+=(x-- -1)<<1
}
}
function fcircle(color, x0, y0, z0, r){
var P0=new Array()
xyzcv(x0,y0,z0,P0); circle(color,P0.x,P0.y,Math.round(r*100))
}
function Circle(color,x0,y0,r){
var x=r, y=0
while(x>=y){
hline(color,x0+x,y0+y,x0-x); hline(color,x0+x,y0-y,x0-x)
hline(color,x0+y,y0+x,x0-y); hline(color,x0+y,y0-x,x0-y)
if((r-=(y++ <<1))<0) r+=(x-- -1)<<1
}
}
function fCircle(color, x0, y0, z0, r){
var P0=new Array()
xyzcv(x0,y0,z0,P0); Circle(color,P0.x,P0.y,Math.round(r*100))
}
function ellipse(color, x0, y0, rx, ry){
var x, x1, y, y1, r
if(rx>=ry){
x=r=rx; y=0
while(x>=y){
x1=Math.round(x*ry/rx); y1=Math.round(y*ry/rx)
plot(color,x0+x,y0+y1); plot(color,x0+x,y0-y1)
plot(color,x0-x,y0+y1); plot(color,x0-x,y0-y1)
plot(color,x0+y,y0+x1); plot(color,x0+y,y0-x1)
plot(color,x0-y,y0+x1); plot(color,x0-y,y0-x1)
if((r-=(y++ <<1)-1)<0) r+=(x-- -1)<<1
}
}else{
x=r=ry; y=0
while(x>=y){
x1=Math.round(x*rx/ry); y1=Math.round(y*rx/ry)
plot(color,x0+x1,y0+y); plot(color,x0+x1,y0-y)
plot(color,x0-x1,y0+y); plot(color,x0-x1,y0-y)
plot(color,x0+y1,y0+x); plot(color,x0+y1,y0-x)
plot(color,x0-y1,y0+x); plot(color,x0-y1,y0-x)
if((r-=(y++ <<1)-1)<0) r+=(x-- -1)<<1
}
}
}
function fellipse(color, x0, y0, z0, rx, ry){
var P0=new Array()
xyzcv(x0,y0,z0,P0); ellipse(color,P0.x,P0.y,Math.round(rx*100),Math.round(ry*100))
}
function Ellipse(color, x0, y0, rx, ry){
var x, x1, y, y1, r
if(rx>=ry){
x=r=rx; y=0
while(x>=y){
x1=Math.round(x*ry/rx); y1=Math.round(y*ry/rx)
hline(color,x0+x,y0+y1,x0-x); hline(color,x0+x,y0-y1,x0-x)
hline(color,x0+y,y0+x1,x0-y); hline(color,x0+y,y0-x1,x0-y)
if((r-=(y++ <<1)-1)<0) r+=(x-- -1)<<1
}
}else{
x=r=ry; y=0
while(x>=y){
x1=Math.round(x*rx/ry); y1=Math.round(y*rx/ry)
hline(color,x0+x1,y0+y,x0-x1); hline(color,x0+x1,y0-y,x0-x1)
hline(color,x0+y1,y0+x,x0-y1); hline(color,x0+y1,y0-x,x0-y1)
if((r-=(y++ <<1)-1)<0) r+=(x-- -1)<<1
}
}
}
function fEllipse(color, x0, y0, z0, rx, ry){
var P0=new Array()
xyzcv(x0,y0,z0,P0); Ellipse(color,P0.x,P0.y,Math.round(rx*100),Math.round(ry*100))
}
function hline(color,x1,y1,x2){
if(x1==x2){ plot(color,x1,y1); return}
var ixx1=ixx(x1), iyy1=iyy(y1), ixx2=ixx(x2), t
if(ixx1>ixx2){ t=ixx1; ixx1=ixx2; ixx2=t }
if(GWIN<0){
if(is_nav4) gwin.document.write("")
else if(is_ie4up||is_nav5up) gwin.document.write("")
}else if(GWIN==0){
if(is_nav4) document.write("")
else if(is_ie4up||is_nav5up) document.write("")
}else{with(parent.frames[GWIN].document){
if(is_nav4) write("")
else if(is_ie4up||is_nav5up) write("")
}}
}
function vline(color,x1,y1,y2){
if(y1==y2){ plot(color,x1,y1); return}
var ixx1=ixx(x1), iyy1=iyy(y1), iyy2=iyy(y2), t
if(iyy1>iyy2){ t=iyy1; iyy1=iyy2; iyy2=t }
if(GWIN<0){
if(is_nav4) gwin.document.write("")
else if(is_ie4up||is_nav5up) gwin.document.write("")
}else if(GWIN==0){
if(is_nav4) document.write("")
else if(is_ie4up||is_nav5up) document.write("")
}else{with(parent.frames[GWIN].document){
if(is_nav4) write("")
else if(is_ie4up||is_nav5up) write("")
}}
}
function arrow(color,x1,y1,x2,y2){
if(x1==x2){
vline(color,x1,y1,y2)
if(y1>y2){ line(color,x2,y2,x2+3,y2+10); line(color,x2,y2,x2-3,y2+10)}
else{ line(color,x2,y2,x2+3,y2-10); line(color,x2,y2,x2-3,y2-10)}
}else if(y1==y2){
hline(color,x1,y1,x2)
if(x1>x2){ line(color,x2,y2,x2+10,y2+3); line(color,x2,y2,x2+10,y2-3)}
else{ line(color,x2,y2,x2-10,y2+3); line(color,x2,y2,x2-10,y2-3)}
}
}
function line(color,x1,y1,x2,y2){
if(x1==x2) vline(color,x1,y1,y2)
else if(y1==y2) hline(color,x1,y1,x2)
else{
var dx=Math.abs(x2-x1), dy=Math.abs(y2-y1), s, step, x0, y0
if(dx>dy){
if(x1>x2){
step=(y1>y2)?1:-1
s=x1; x1=x2; x2=s; y1=y2
}else step=(y1>1
while(++x1<=x2){
if((s-=dy)<0){hline(color,x0,y1,x1); x0=x1; s+=dx; y1+=step}
// if((s-=dy)<0){s+=dx; y1+=step}
// plot(color,x1,y1)
}
hline(color,x0,y1,x1)
// s=dx>>1
// while(++x1<=x2){
// if((s-=dy)<0){s+=dx; y1+=step}
// plot(color,x1,y1)
// }
}else{
if(y1>y2){
step=(x1>x2)?1:-1
s=y1; y1=y2; y2=s; x1=x2
}else step=(x1>1
while(++y1<=y2){
if((s-=dx)<0){vline(color,x1,y0,y1); y0=y1; s+=dy; x1+=step}
// if((s-=dx)<0){s+=dy; x1+=step}
// plot(color,x1,y1)
}
vline(color,x1,y0,y1)
}
// var ixx1=ixx(x1), iyy1=iyy(y1), ixx2=ixx(x2), iyy2=iyy(y2), t
// if(ixx1>ixx2){ t=ixx1; ixx1=ixx2; ixx2=t }
// if(iyy1>iyy2){ t=iyy1; iyy1=iyy2; iyy2=t }
// if(x1ixx2){ t=ixx1; ixx1=ixx2; ixx2=t }
if(iyy1>iyy2){ t=iyy1; iyy1=iyy2; iyy2=t }
if(GWIN<0){
if(is_nav4) gwin.document.write("")
else if(is_ie4up||is_nav5up) gwin.document.write("")
}else if(GWIN==0){
if(is_nav4) document.write("")
else if(is_ie4up||is_nav5up) document.write("")
}else{
if(is_nav4) parent.frames[GWIN].document.write("")
else if(is_ie4up||is_nav5up) parent.frames[GWIN].document.write("")
}
if(color==color.toUpperCase()){
line("BLACK",ix1,iy1,ix1,iy2); line("BLACK",ix1,iy1,ix2,iy1);
line("BLACK",ix1,iy2,ix2,iy2); line("BLACK",ix2,iy1,ix2,iy2);
}
}
}
function fbox(color, x1, y1, z1, x2, y2, z2){
var P1=new Array(), P2=new Array()
xyzcv(x1,y1,z1,P1); xyzcv(x2,y2,z2,P2)
gbox(color,P1.x,P1.y,P2.x,P2.y)
}
function symbol(color, ix, iy, str){
if(DM==3 || DM==4) iy-=SHEIGHT
if(GWIN<0){
if(is_nav4) gwin.document.write(""+str+"")
else if(is_ie4up||is_nav5up) gwin.document.write(""+str+"")
}else if(GWIN==0){
if(is_nav4) document.write(""+str+"")
else if(is_ie4up||is_nav5up) document.write(""+str+"")
}else{
if(is_nav4) parent.frames[GWIN].document.write(""+str+"")
else if(is_ie4up||is_nav5up) parent.frames[GWIN].document.write(""+str+"")
}
}
function fsymbol(color, x, y, z, str){
var P=new Array()
xyzcv(x,y,z,P); symbol(color,P.x,P.y,str)
}
function fpconv(w, ref, W){
W.ww=w
var ref10=10*ref
for(var i=0;i<100;i++) if(Math.abs(W.ww)<=ref10){ break}else{W.ww/=10}
for(var j=0;j<100;j++) if(Math.abs(W.ww)>ref){ break}else{W.ww*=10}
W.np=i-j
}
function fltx(wof, span, W){
fpconv(span,1.1,W)
if(W.ww>5.1) W.unit=2
else if(W.ww>=0) W.unit=1
else if(W.ww>(-5.1))W.unit=(-1)
else W.unit=(-2)
W.unit*=Math.pow(10,W.np)
var ifix=Math.floor(wof/W.unit)
W.org=ifix*(W.unit)
var w1=wof+1.1*span
if(wof<=w1){W.min=wof; W.max=w1}
else {W.min=w1; W.max=wof}
}
function cdisp(unit, color, ix, iy, w1, size){
unit=Math.round(unit*1000000)/1000000+""
if(DM==2 || DM==3) ix+=SWIDTH
if(DM==3 || DM==4) iy-=SHEIGHT
if(DM!=2 && DM!=3) ix-=SWIDTH*(unit.length-1)
symbol(color,ix,iy,""+unit+"")
}
function xscale(color, fs, str, step){
var P=new Array(), W=new Array(), xx
XFS=fs
XSPAN=fs-XOF
if(XSPAN==0) return
var x1=XOF+XSPAN
fline(color,XOF,YOF,ZOF,x1,YOF,ZOF)
if(str!=""){
x1=XOF+1.1*XSPAN
xyzcv(x1,YOF,ZOF,P)
P.x-=SWIDTH/2; P.y+=SHEIGHT/2
if(DM==2 || DM==3) P.x+=SWIDTH
if(DM==3 || DM==4) P.y-=SHEIGHT
symbol(color,P.x,P.y,str)
}
if(step){
XSTEP=step
for(x1=XOF;x1<=XOF+XSPAN;x1+=step){
xyzcv(x1,YOF,ZOF,P); line(color,P.x,P.y,P.x,P.y-4)
cdisp(x1,color,P.x-SWIDTH/2,P.y-2,x1)
}
}else{
fltx(XOF,XSPAN,W)
XSTEP=W.unit
for(x1=W.org;(XSPAN<0&&x1>=W.min)||(XSPAN>0&&x1<=W.max);x1+=W.unit){
xyzcv(x1,YOF,ZOF,P); line(color,P.x,P.y,P.x,P.y-4)
cdisp(x1,color,P.x-SWIDTH/2,P.y-2,x1)
}
}
}
function yscale(color, fs, str, step){
var P=new Array(), W=new Array(), yy
YFS=fs
YSPAN=fs-YOF
if(YSPAN==0) return
var y1=YOF+YSPAN
fline(color,XOF,YOF,ZOF,XOF,y1,ZOF)
if(str!=""){
y1=YOF+1.1*YSPAN
xyzcv(XOF,y1,ZOF,P)
P.x-=SWIDTH/2; P.y+=SHEIGHT/2
if(DM==2 || DM==3) P.x+=SWIDTH
if(DM==3 || DM==4) P.y-=SHEIGHT
symbol(color,P.x,P.y,str,2)
}
if(step){
YSTEP=step
for(y1=YOF;y1<=YOF+YSPAN;y1+=step){
xyzcv(XOF,y1,ZOF,P); line(color,P.x,P.y,P.x-4,P.y)
cdisp(y1,color,P.x-10,P.y+SHEIGHT/2,y1)
}
}else{
fltx(YOF,YSPAN,W)
YSTEP=W.unit
for(y1=W.org;(YSPAN<0&&y1>=W.min)||(YSPAN>0&&y1<=W.max);y1+=W.unit){
xyzcv(XOF,y1,ZOF,P); line(color,P.x,P.y,P.x-4,P.y)
cdisp(y1,color,P.x-10,P.y+SHEIGHT/2,y1)
}
}
}
function xygrid(color){
for(var x=XOF;x<=XFS;x+=XSTEP) fline(color,x,YOF,0,x,YFS,0);
for(var y=YOF;y<=YFS;y+=YSTEP) fline(color,XOF,y,0,XFS,y,0);
}
function zscale(color, fs, str, step){
var P=new Array(), W=new Array(), ix,iy,ix1,iy1, org,z1,zz
ZFS=fs
ZSPAN=fs-ZOF
if(ZSPAN==0) return
z1=ZOF+ZSPAN
fline(color,XOF,YOF,ZOF,XOF,YOF,z1)
if(str!=""){
z1=ZOF+1.1*ZSPAN
xyzcv(XOF,YOF,z1,P)
P.x-=SWIDTH/2; P.y+=SHEIGHT/2
if(DM==2 || DM==3) P.x+=SWIDTH
if(DM==3 || DM==4) P.y-=SHEIGHT
symbol(color,P.x,P.y,str,2)
}
if(step){
ZSTEP=step
for(z1=ZOF;z1<=ZOF+ZSPAN;z1=z1+step){
xyzcv(XOF,YOF,z1,P)
ix1=P.x; iy1=P.y
if(KZ>=-6 && KZ<=6) iy1+=3
else ix1+=4
line(color,P.x,P.y,ix1,iy1)
P.x-=4; P.y-=2; if(KZ<-6 || KZ>6){ P.x-=6; P.y+=6 }
cdisp(z1,color,P.x,P.y,z1)
}
}else{
fltx(ZOF,ZSPAN,W)
ZSTEP=W.unit
for(z1=W.org;(ZSPAN<0 && z1>=W.min) || (ZSPAN>0 && z1<=W.max);z1=z1+W.unit){
xyzcv(XOF,YOF,z1,P)
ix1=P.x; iy1=P.y
if(KZ>=-6 && KZ<=6) iy1+=3
else ix1+=4
line(color,P.x,P.y,ix1,iy1)
P.x-=4; P.y-=2; if(KZ<-6 || KZ>6){ P.x-=6; P.y+=6 }
cdisp(z1,color,P.x,P.y,z1)
}
}
}
function gplot(ichain, color, x, y, z, s){
var ix0,iy0,ix1,iy1,ix2,iy2, i,n,k, x1,y1,z1,x2,y2,z2,d,xk,yk
var P=new Array(), P0=new Array()
if(ichain<0) for(i=1;i<=10;i++) iflag[i]=OFF //chainの初期化
else{
xyzcv(x,y,z,P)
if(s=="||"){ xyzcv(x,YOF,z,P0); gbox(color,P.x,P.y,P.x+10,P0.y)}
else if(s=="|"){xyzcv(x,YOF,z,P0); gbox(BGCOLOR,P.x,P.y,P.x+10,P0.y)}
else if(s=="="){xyzcv(XOF,y,z,P0); gbox(color,P.x,P.y,P0.x,P.y+10)}
else if(s=="-"){xyzcv(XOF,y,z,P0); gbox(BGCOLOR,P.x,P.y,P0.x,P.y+10)}
else plot0(color,P.x,P.y,s)
plot(color,P.x,P.y)
if(ichain>=1 && ichain<=10){
ix1=ixtable[ichain]; iy1=iytable[ichain]
ixtable[ichain]=P.x; iytable[ichain]=P.y
if(iflag[ichain]==ON) line(color,P.x,P.y,ix1,iy1)
iflag[ichain]=ON
}
}
}
function sinc(x){with(Math){ //sinc(x)=sin(PI*x)/(PI*x)
if(x==0) return 1
else return sin(PI*x)/(PI*x)
}}
function sinca(x){with(Math){ //sinca(x)=sin(PI*x)/{PI*x*(1-x**2)}
var x1
if(x==0) return 1
else if((x1=1-x*x)==0) return .5
else return sin(PI*x)/(PI*x*x1)
}}
function gauss(v){with(Math){ //zero-mean Gaussian random variable
var x=sqrt(-2.*log(random())*v)
return x*cos(2.*PI*random())
}}
function GRopen(c,x,y,s,m){
gopen(c,x,y,s,m);
GRlabel=new Array(); GRarray=new Array();
gplot(-1)
}
function GRdata(){
GRlabel[GRarray.length]=arguments[0];
gsymbol[GRarray.length]=arguments[1];
gcolor[GRarray.length]= arguments[2];
GRarray[GRarray.length]=new Array();
var row=GRarray[GRarray.length-1];
for(var i=3; ixmax) xmax=GRarray[i][0];
if(GRarray[i][0]