// 31 MAY 2004
// R.A.Runge
// Industrial Design - DA716 Design by Numbers
// Speed


import java.lang.Math.*;
import java.io.FileOutputStream;
import java.io.IOException;

import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.PdfContentByte;
import java.awt.Color;

public class Painter5 {

//Line line;


    public static void main(String[] args) {

		// A0 size in points [2384;3370]
		int xOrigin=(int) (Math.random() * 2384);
		int yOrigin=(int) (Math.random() * 3370);
		int xEndpoint;
		int yEndpoint;
		float avW; //average linewidth

		float maxLines;
		float rectHeigth;
		float rectWidth;
		float rectX;
		float rectY;
		float circleX;
		float circleR;		
		float circleY;
		float M=0;
		float yStep;
		
        System.out.println("Creating visual speed in PDF file");
        System.out.print(xOrigin);
        System.out.print(yOrigin);        
        Document document = new Document(PageSize.A0);


        try {
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("CircleSpeed13.pdf"));
				document.open();
            writer.setViewerPreferences(PdfWriter.PageModeFullScreen);
				PdfContentByte cb = writer.getDirectContent();
				
				//create background rectangle with color
				cb.setCMYKColorFillF(0f, 0f, 0f,1f);
				cb.rectangle(0,0, 2384, 3370);
				cb.fill();
				
			
				// circle repetition
				for (int x=0; x<200;x++) { 
	         	circleR = ((float)Math.pow((x),2));
					yStep = circleR*(float) 2/3;
		         circleX = xOrigin;
					circleY = (yOrigin+yStep);
	            
	            cb.setCMYKColorStrokeF(0f, 0f, 0f, 2/3f); 
		         cb.setLineWidth(x);    
	   			cb.circle(circleX,circleY,circleR);
	   	      cb.stroke();
					}

				
				// line repetition
				for (float j=0;j<3;j++){
					maxLines = (200-(j*50));
					avW = (20-(j*5));
					cb.setCMYKColorStrokeF(0f, 0f, 0f,(2/3f-(j*1/3f)));
				   //cb.setStrokeOpacity(0.5f);
					
					//lines in upper direction
					for (int i=0;i<maxLines;i++){
						cb.setLineWidth((int) (Math.random() * avW)); 
						cb.moveTo(xOrigin, yOrigin);
		        		cb.lineTo((int) (Math.random() * 2384), 3370);
		 	         cb.stroke();
					   }
						//lines in right direction
					for (int i=0;i<maxLines;i++){
						cb.setLineWidth((int) (Math.random() * avW)); 
						cb.moveTo(xOrigin, yOrigin);
		        		cb.lineTo(2384, (int) (Math.random() *3370));
		 	         cb.stroke();
				   	}
					//lines in lower direction
					for (int i=0;i<maxLines;i++){
						cb.setLineWidth((int) (Math.random() * avW)); 
						cb.moveTo(xOrigin, yOrigin);
		        		cb.lineTo((int) (Math.random() * 2384), 0);
		 	         cb.stroke();
				   	}
					//lines in left direction
					for (int i=0;i<maxLines;i++){
						cb.setLineWidth((int) (Math.random() * avW)); 
						cb.moveTo(xOrigin, yOrigin);
		        		cb.lineTo(0, (int) (Math.random() *3370));
		 	         cb.stroke();
					   }		
					}
								// circle repetition	
				for (int x=0; x<30;x++) {
	         	circleR = ((float)Math.pow((x),3));
					yStep = circleR*(float) 2/3;
		         circleX = xOrigin;
					circleY = (yOrigin+yStep);
	            
	            cb.setCMYKColorStrokeF(0f, 0f, 0f, 0f); 
		         cb.setLineWidth(((float)Math.pow((x),2))/3); // (int) (Math.random() * 80));    
	   			cb.circle(circleX,circleY,circleR);
	   	      cb.stroke();
					}
					           	
        }

        catch(DocumentException de) {
            System.err.println(de.getMessage());
        }
        catch(IOException ioe) {
            System.err.println(ioe.getMessage());
        }

        document.close();
    }
}

