import org.gicentre.utils.stat.*; import papaya.*; float[] urand; float[] zrand; float[] erand; float[] subu; int type =0; int samples = 20000; int sampleslidervalue = 100; int numbin; Frequency somefreq; float binwidth; BarChart achart; PFont myfont; JakeButton unifb, normb, expb; JakeSlider sampleslider; void setup() { size(400, 500); smooth(); myfont = loadFont("ArialMT-24.vlw"); PImage[] unifimageset = {loadImage("unifdark.jpg"), loadImage("uniflight.jpg")}; unifb = new JakeButton(25,30,unifimageset[1],unifimageset[0],unifimageset[0]); PImage[] normalimageset = {loadImage("normaldark.jpg"), loadImage("normallight.jpg")}; normb = new JakeButton(150,30,normalimageset[1],normalimageset[0],normalimageset[0]); PImage[] expimageset = {loadImage("expdark.jpg"), loadImage("explight.jpg")}; expb = new JakeButton(275,30,expimageset[1],expimageset[0],expimageset[0]); urand = new float[samples]; zrand = new float[samples]; erand = new float[samples]; float uone; float utwo; for (int i = 0; i 3.0)zrand[i]=3.0; } for (int i=0;i5.0)erand[i]=5.0; } achart = new BarChart(this); for (int i = 0; i < samples; i++) urand[i] = random(0, 1); sampleslider = new JakeSlider(50,450,300,30,100,100,20000,true,color(71, 145, 255),color(2,52,77),myfont,10,5,0); } void draw() { background(255); switch(type) { case 0: subu = subset(urand, 0, sampleslidervalue); numbin = (int)(log(sampleslidervalue)/log(2)); binwidth = (1.0-0.0)/numbin; somefreq = new Frequency(subu, 0.0, 1.0, binwidth); break; case 1: subu = subset(zrand, 0, sampleslidervalue); numbin = (int)(log(sampleslidervalue)/log(2)); binwidth = 6.0/numbin; somefreq = new Frequency(subu, -3.0, 3.0, binwidth); break; case 2: subu = subset(erand, 0, sampleslidervalue); numbin = (int)(log(sampleslidervalue)/log(2)); binwidth = 5.0/numbin; somefreq = new Frequency(subu, 0.0, 5.0, binwidth); break; } float[] tempfreq = somefreq.getFrequency(); float[] density = new float[numbin]; for (int i = 0; i < numbin; i++) density[i] = tempfreq[i]/sampleslidervalue/binwidth; achart.setData(density); achart.draw(50, 100, 300, 300); achart.setMinValue(0); if (type ==0)achart.setMaxValue(1.2); if (type ==1)achart.setMaxValue(0.4); if (type ==2)achart.setMaxValue(1.0); //achart.showValueAxis(true); //noFill(); //line(53,160,275+71,160); float[] data = new float[201]; noFill(); //stroke(0); if (type==0) { line(50, 153, 350, 153); } else if (type==1) { beginShape(); for (int i=0; i<201; i++) { float x = -3.0+0.03*i; data[i] = exp(-x*x/2.0); vertex(50.0+(x+3.0)/6.0*300.0, 398-data[i]*300.0); } endShape(); } else if (type==2) { beginShape(); for (int i=0; i<201; i++) { float x = i/40.0; data[i] = exp(-x); vertex(map(i, 0, 200, 50, 350), 398-map(data[i], 0, 1, 0, 300)); } endShape(); } unifb.updateButton(); unifb.drawButton(); if(unifb.clicked) type = 0; normb.updateButton(); normb.drawButton(); if(normb.clicked) type = 1; expb.updateButton(); expb.drawButton(); if(expb.clicked) type = 2; sampleslider.updateSlider(); sampleslider.drawSlider(); sampleslidervalue = int(sampleslider.getValue()); }