001 package ps4;
002
003 import ps2.GeoPoint;
004 import ps2.GeoSegment;
005
006 /**
007 * Class overview to be written by student.
008 **/
009 public class StreetSegment extends GeoSegment {
010
011 /**
012 * Creates a new StreetSegment from the given arguments.
013 *
014 * @requires leftNumbers does not share any numbers with rightNumbers
015 * unless leftZip != rightZip; all arguments are
016 * non-null; leftZip and rightZip are valid zipcodes,
017 * where a valid zipcode is any 5-digit String or the
018 * empty String.
019 *
020 * @param p1
021 * one end of the StreetSegment
022 * @param p2
023 * the other end of the StreetSegment
024 * @param name
025 * the name of the street of which this is a segment
026 * @param leftNumbers
027 * street numbers on the left side of the street
028 * @param rightNumbers
029 * street numbers on the right side of the street
030 * @param leftZip
031 * ZIP code on the left side of the street
032 * @param rightZip
033 * ZIP code on the right side of the street
034 * @param streetClass
035 * StreetClassification of this StreetSegment
036 * @param increasingAddresses
037 * true if addresses increase from p1 to p2
038 * <p>
039 * The left and right sides of the street are as viewed from p1
040 * to p2.
041 */
042 public StreetSegment(GeoPoint p1, GeoPoint p2, String name,
043 StreetNumberSet leftNumbers, StreetNumberSet rightNumbers,
044 String leftZip, String rightZip, StreetClassification streetClass,
045 boolean increasingAddresses) {
046 super(name, p1, p2);
047 }
048
049 /**
050 * This method assumes that the locations corresponding to street
051 * numbers on this street are spaced evenly apart (regardless of
052 * the arithmetic difference between two consecutive street
053 * numbers). It returns the fraction of the distance that the
054 * street number sn is from p1. The return value is a number from
055 * 0 to 1, exclusive.
056 * <p>
057 * For instance, if one side of this street contains the street numbers
058 * 1, 3, and 99, and this.increasingAddresses is true, then those
059 * numbers appear .25, .5, and .75 of the way along the street. If
060 * this.increasingAddresses is false, then the numbers appear .75, .5,
061 * and .25 of the way along the street.
062 * <p>
063 * If both sides of the street have the number sn (which can happen
064 * only if the two sides have different Zip codes), then this selects
065 * the address on the right-hand side of the street (as viewed from p1).
066 *
067 * @requires this instance of StreetSegment must contain the street number sn
068 * @return the fraction of the length of this segment that is from p1 to
069 * the address sn
070 */
071 public double fractionDist(int sn) {
072 throw new RuntimeException("StreetSegment.fractionDist() unimplemented!");
073 }
074
075
076 }