[java作业]Fan、求直线交点、Triangle2D、选课

public class Fan {
         public static void main(String[] args) {
                   Fan fan1 = new Fan(), fan2 = new Fan();
                   fan1.modifySpeed(FAST);
                   fan1.modifyRadius(10);
                   fan1.modifyColor("yellow");
                   fan1.modifyOn(true);
                   System.out.println(fan1.toString());
                   fan2.modifySpeed(MEDIUM);
                   fan2.modifyRadius(5);
                   fan2.modifyColor("blue");
                   fan2.modifyOn(false);
                   System.out.println(fan2.toString());
         }
         public Fan() {
                   speed = SLOW;
                   on = false;
                   radius = 5;
                   color = "blue";
         }
         public int getSpeed() {
                   return speed;
         }
         public boolean getOn() {
                   return on;
         }
         public double getRadius() {
                   return radius;
         }
         public String getColor() {
                   return color;
         }
         public void modifySpeed(int speed) {
                   this.speed = speed;
         }
         public void modifyOn(boolean on) {
                   this.on = on;
         }
         public void modifyRadius(double radius) {
                   this.radius = radius;
         }
         public void modifyColor(String color) {
                   this.color = color;
         }
         public String toString() {
                   if (on == true) return new String(speed + " " + color + " " + radius);
                   else return new String("fan is off" + " " + color + " " + radius);
         }
         final static int SLOW = 1, MEDIUM = 2, FAST = 3;
         int speed = SLOW;
         boolean on = false;
         double radius = 5;
         String color = "blue";
}

  

import java.util.Scanner;
public class Cross {
         static Line l1, l2;
         static Scanner input = new Scanner(System.in);
         public static void main(String[] args) {
                    System.out.println("Enter the endpoints of the first line segment:");
                    l1 = new Line();
        	 		l2 = new Line();
        	 		l1.read();
        	 		System.out.println("Enter the endpoints of the second line segment:");
        	 		l2.read();
        	 		Point ans = getCrossPoint(l1, l2);
        	 		System.out.println("The intersecting point is: " + ans.toString());
         }
         public static Point getCrossPoint(Line l1, Line l2) {
                    double a = l1.b.y - l1.a.y;
                    double b = l1.a.x - l1.b.x;
                    double p = l1.a.x * l1.b.y - l1.b.x * l1.a.y;
                    double c = l2.b.y - l2.a.y;
                    double d = l2.a.x - l2.b.x;
                    double q = l2.a.x * l2.b.y - l2.b.x * l2.a.y;
                    double u, v;
                    if (Math.abs(b * c - a * d) > 1e-10) {
                            v = (p * c - q * a) / (b * c - a * d);
                            if (Math.abs(a) > 1e-10) u = (p - b * v) / a;
                            else u = (q - d * v) / c;
                    }
                    else {
                            u = (p * d - q * b) / (a * d - c * b);
                            if (Math.abs(b) > 1e-10) v = (p - a * u) / b;
                            else v = (q - c * u) / d;
                    }
                    return new Point(u, v);
         }
         public static class Point {
                    public Point(double x, double y) {
                            this.x = x;
                            this.y = y;
                    }
                    public Point() {
                            x = y = 0;
                    }
                    public void read() {
                            x = input.nextDouble();
                            y = input.nextDouble();
                    }
                    public String toString() {
                            return new String("(" + x + ", " + y + ")");
                    }
                    double x, y;
         }
         public static class Line {
                    public Line(Point a, Point b) {
                            this.a = a;
                            this.b = b;
                    }
                    public Line() {
                            a = new Point();
                            b = new Point();
                    }             
                    public void read() {
                       a.read();
                       b.read();
                    }
                    Point a, b;
         }
}

  

public class Triangle2D {
	public static void main(String[] args) {
		Triangle2D t1 = new Triangle2D(new MyPoint(2.5, 2), new MyPoint(4.2, 3), new MyPoint(5, 3.5));
		System.out.println("Area is: " + t1.getArea() + "\nPerimeter is: " + t1.getPerimeter());
		System.out.println(t1.contains(new MyPoint(3, 3)));
		System.out.println(t1.contains(new Triangle2D(new MyPoint(2.9, 2), new MyPoint(4, 1), new MyPoint(1, 3.4))));
		System.out.println(t1.overlaps(new Triangle2D(new MyPoint(2, 5.5), new MyPoint(4, -3), new MyPoint(2, 6.5))));
	}
	public Triangle2D() {
		p1 = new MyPoint();
		p2 = new MyPoint(1, 1);
		p3 = new MyPoint(2, 5);
	}
	public Triangle2D(MyPoint p1, MyPoint p2, MyPoint p3) {
		this.p1 = p1;
		this.p2 = p2;
		this.p3 = p3;
	}
	public double getArea() {
		double a = MyPoint.distance(p1, p2);
		double b = MyPoint.distance(p2, p3);
		double c = MyPoint.distance(p3, p1);
		double p = (a + b + c) / 2;
		return Math.sqrt(p * (p - a) * (p - b) * (p - c));
	}
	public double getPerimeter() {
		double a = MyPoint.distance(p1, p2);
		double b = MyPoint.distance(p2, p3);
		double c = MyPoint.distance(p3, p1);
		return a + b + c;
	}
	public boolean contains(MyPoint p) {
		MyPoint pa = new MyPoint(p1.x - p.x, p1.y - p.y);
		MyPoint pb = new MyPoint(p2.x - p.x, p2.y - p.y);
		MyPoint pc = new MyPoint(p3.x - p.x, p3.y - p.y);
		double angle = getAngle(pa, pb) + getAngle(pb, pc) + getAngle(pc, pa);
		if (Math.abs(angle) > 1e-5) return true;
		return false;
	}
	public boolean contains(Triangle2D t) {
		return contains(t.p1) && contains(t.p2) && contains(t.p3);
	}
	//假定坐标系范围为[-10,10]
	public boolean overlaps(Triangle2D t) {
		if (contains(t) || t.contains(this)) return true;
		if (contains(t.p1) || contains(t.p2) || contains(t.p3)) return true;
		MyPoint P = new MyPoint();
		for (int i = 0; i < 10000000; i ++) {
			P.x = Math.random() * 20 - 10;
			P.y = Math.random() * 20 - 10;
			if (contains(P) && t.contains(P)) return true;
		}
		return false;
	}
	public static double getAngle(MyPoint v1, MyPoint v2) {
		double ans = Math.acos(v1.mul(v2) / v1.abs() / v2.abs());
		if (v1.x * v2.y - v1.y * v2.x < 0) return ans;
		else return -ans;
	}
	public void setP1(MyPoint p1) {
		this.p1 = p1;
	}
	public void setP2(MyPoint p2) {
		this.p2 = p2;
	}
	public void setP3(MyPoint p3) {
		this.p3 = p3;
	}
	public MyPoint getP1() {
		return p1;
	}
	public MyPoint getP2() {
		return p2;
	}
	public MyPoint getP3() {
		return p3;
	}
	public static class MyPoint {
		public MyPoint() {
			x = y = 0;
		}
		public MyPoint(double x, double y) {
			this.x = x;
			this.y = y;
		}
		public double getx() {
			return x;
		}
		public double gety() {
			return y;
		}
		public double mul(MyPoint that) {
			return x * that.x + y * that.y;
		}
		public double abs() {
			return Math.sqrt(x * x + y * y);
		}
		public static double distance(MyPoint A, MyPoint B) {
			double x = A.x - B.x, y = A.y - B.y;
			return Math.sqrt(x * x + y * y);
		}
		public static double distance(double x1, double y1, double x2, double y2) {
			double x = x1 - x2, y = y1 - y2;
			return Math.sqrt(x * x + y * y);
		}
		double x, y;
	}
	MyPoint p1, p2, p3;
}

  

public class CourseSelection {
	public static void main(String[] args) {
		CourseSelection cs = new CourseSelection();
		cs.addStudent("大神");
		cs.addStudent("郑涛");
		cs.addStudent("邓时庆");
		cs.addCourse("大学语文");
		cs.addCourse("理论物理");
		cs.addCourse("宇宙的起源");
		cs.selectCourse("大神", "宇宙的起源");
		cs.selectCourse("大神", "理论物理");
		cs.selectCourse("邓时庆", "大学语文");
		cs.selectCourse("郑涛", "理论物理");
		cs.selectCourse("邓时庆", "理论物理");
		cs.selectCourse("郑涛", "大学语文");
		cs.showStudents();
		cs.showCourses();
		System.out.println();
		cs.dropCourse("郑涛", "理论物理");
		cs.dropCourse("邓时庆", "大学语文");
		cs.dropCourse("大神", "宇宙的起源");
		cs.dropCourse("大神", "理论物理");
		cs.selectCourse("大神", "大学语文");
		cs.selectCourse("郑涛", "宇宙的起源");
		cs.selectCourse("邓时庆", "宇宙的起源");
		cs.showStudents();
		cs.showCourses();
	}
	public void showStudents() {
		System.out.println("--------------sutdents--------------");
		for (int i = 0; i < numberOfStudents; i ++) {
			System.out.print(students[i].getStudentName() + ":");
			for (int j = 0; j < students[i].numberOfCourses; j ++) {
				System.out.print("___" + students[i].getCourses()[j]);
			}
			System.out.println();
		}
	}
	public void showCourses() {
		System.out.println("--------------courses--------------");
		for (int i = 0; i < numberOfCourses; i ++) {
			System.out.print(courses[i].getCourseName() + ":");
			for (int j = 0; j < courses[i].numberOfStudents; j ++) {
				System.out.print("___" + courses[i].getStudents()[j]);
			}
			System.out.println();
		}
	}
	public void addStudent(String studentName) {
		students[numberOfStudents] = new Student(studentName);
		numberOfStudents ++;
	}
	public void addCourse(String courseName) {
		courses[numberOfCourses] = new Course(courseName);
		numberOfCourses ++;
	}
	public void selectCourse(String studentName, String courseName) {
		for (int i = 0; i < numberOfStudents; i ++) {
			if (students[i].studentName.equals(studentName)) {
				students[i].addCourse(courseName);
			}
		}
		for (int i = 0; i < numberOfCourses; i ++) {
			if (courses[i].courseName.equals(courseName)) {
				courses[i].addStudent(studentName);
			}
		}
	}
	public void dropCourse(String studentName, String courseName) {
		for (int i = 0; i < numberOfStudents; i ++) {
			if (students[i].studentName.equals(studentName)) {
				students[i].dropCourse(courseName);
			}
		}
		for (int i = 0; i < numberOfCourses; i ++) {
			if (courses[i].courseName.equals(courseName)) {
				courses[i].dropStudent(studentName);
			}
		}
	}
	public CourseSelection() {
		numberOfCourses = numberOfStudents = 0;
	}
	public static class Course {
		public Course() {
			numberOfStudents = 0;
		}
		public Course(String courseName) {
			this.courseName = courseName;
		}
		public String[] getStudents() {
			return students;
		}
		public int getNumberOfStudents() {
			return numberOfStudents;
		}
		public String getCourseName() {
			return courseName;
		}
		public void addStudent(String student) {
			students[numberOfStudents] = student;
			numberOfStudents ++;
		}
		public void dropStudent(String student) {
			for (int i = 0; i < numberOfStudents; i ++) {
				if (this.students[i].equals(student)) {
					for (int j = i + 1; j < numberOfStudents; j ++) {
						this.students[j - 1] = this.students[j];
					}
					numberOfStudents --;
					i --;
				}
			}
		}
		public void clear() {
			numberOfStudents = 0;
		}
		String courseName;
		String[] students = new String[100];
		int numberOfStudents;
	}
	public class Student {
		public Student() {
			numberOfCourses = 0;
		}
		public Student(String studentName) {
			this.studentName = studentName;
		}
		public void addCourse(String course) {
			courses[numberOfCourses] = course;
			numberOfCourses ++;
		}
		public void dropCourse(String course) {
			for (int i = 0; i < numberOfCourses; i ++) {
				if (this.courses[i].equals(course)) {
					for (int j = i + 1; j < numberOfCourses; j ++) {
						this.courses[j - 1] = this.courses[j];
					}
					numberOfCourses --;
					i --;
				}
			}
		}
		public String[] getCourses() {
			return courses;
		}
		public int getNumberOfCourses() {
			return numberOfCourses;
		}
		public String getStudentName() {
			return studentName;
		}
		public void setStudentName(String studentName) {
			this.studentName = studentName;
		}
		String studentName;
		String[] courses = new String[100];
		int numberOfCourses;
	}
	Course[] courses = new Course[100];
	Student[] students = new Student[100];
	int numberOfCourses, numberOfStudents;
}

  

posted @ 2015-10-31 18:45  jklongint  阅读(388)  评论(0编辑  收藏  举报