Computer Science 120
Introduction to Programming

Spring 2012, Siena College

PerspectiveRR Demo

A working demo of PerspectiveRR will appear below. Click inside the applet to interact with it.



PerspectiveRR BlueJ Project

Click here to download a BlueJ project for PerspectiveRR.


PerspectiveRR Source Code

The Java source code for PerspectiveRR is below. Click on a file name to download it.


PerspectiveRR.java

import objectdraw.*;
import java.awt.*;

/*
 * Example PerspectiveRR
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 *
 * $Id: PerspectiveRR.java 1577 2011-03-28 02:10:20Z terescoj $
 */

public class PerspectiveRR extends WindowController {

    private static final int TOP_OFFSET = 25;
    private static final int TIE_HEIGHT = 20;
    private static final int MIN_TIE_WIDTH = 40;
    private static final int TIE_SPACING = 30;
    
    public void begin() {
        
        Location topOfLines = new Location(canvas.getWidth()/2, TOP_OFFSET);
        Location bottomOfLine1 = new Location(canvas.getWidth()/4,
                                              canvas.getHeight() - TOP_OFFSET);
        Location bottomOfLine2 = new Location(3*canvas.getWidth()/4,
                                              canvas.getHeight() - TOP_OFFSET);
    
        new Line(topOfLines, bottomOfLine1, canvas);
        new Line(topOfLines, bottomOfLine2, canvas);
        
        double biggestTieWidth = 3*canvas.getWidth()/4;
        
        int numTies = (canvas.getHeight() - 2 * TOP_OFFSET) /
                      (TIE_HEIGHT + TIE_SPACING);
        
        double nextWidth = MIN_TIE_WIDTH;
        double widthIncrement = (biggestTieWidth - MIN_TIE_WIDTH) /
                                (numTies - 1);
        double nextYPos = TOP_OFFSET;
         
        int tieNum = 0;
        while (tieNum < numTies) {
            
          new FilledRect(canvas.getWidth()/2 - nextWidth/2, nextYPos,
                         nextWidth, TIE_HEIGHT, canvas);
          nextWidth = nextWidth + widthIncrement;
          nextYPos = nextYPos + TIE_HEIGHT + TIE_SPACING;
          tieNum++;
        }
    }
}