public void run() {
		for(int i = 0;i < points;i++) {
			Point2D.Float p = new Point2D.Float(rand(), rand());
			debug(i + "", p.x + ", " + p.y);
			for(int j = 0;j < 40;j++) {
				Form form = chooseFormByWeight();
				Color c = form.getColor();
				form.compute(p);
				debug(i + ", " + j, "----------------------------------------");
				debug(i + ", " + j, form.getName() + ": " + p.x + ", " + p.y);
				if(j >= 20) {
					int x = (int) (p.x * ratio + marginLeft);
					int y = (int) (-p.y * ratio + marginTop);
					
					if(x >= 0 && y >= 0 && x < width && y < height) {
						Color before = histogram.getColor(x, y);
						
						if(DEBUG) {
							debug(i + ", " + j, x + ", " + y + "  f=" + histogram.getFrequency(x, y));
							
							debug(i + ", " + j, printColor(before) + " + " + printColor(c));
						}
						
						Color after = blendColor(before, c);
						histogram.putColor(x, y, after);
						
						if(DEBUG) {
							debug(i + ", " + j, "==> f=" + histogram.getFrequency(x, y) + "  " + printColor(after));
						}
					}
				}
			}
		}
	}