[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;
}
[java作业]Fan、求直线交点、Triangle2D、选课的更多相关文章
- UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)
Problem ATriangle Fun Input: Standard Input Output: Standard Output In the picture below you can see ...
- POJ_1269_Intersecting Lines_求直线交点
POJ_1269_Intersecting Lines_求直线交点 Description We all know that a pair of distinct points on a plane ...
- Uva 11178 Morley's Theorem 向量旋转+求直线交点
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=9 题意: Morlery定理是这样的:作三角形ABC每个 ...
- poj 1269 Intersecting Lines——叉积求直线交点坐标
题目:http://poj.org/problem?id=1269 相关知识: 叉积求面积:https://www.cnblogs.com/xiexinxinlove/p/3708147.html什么 ...
- poj1269 (叉积求直线的交点)
题目链接:https://vjudge.net/problem/POJ-1269 题意:给出4个顶点,表示两条直线,求这两条直线的相交情况,重合输出LINE,平行输出NONE,相交于一点输出该点的距离 ...
- 谈谈"求线段交点"的几种算法(js实现,完整版)
"求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法总结一下, 希望对大家有所帮助. ...
- 计算几何——直线交点poj1269
求直线交点还是要推一个公式的.. 见博客https://blog.csdn.net/u013050857/article/details/40923789 还要学一下向量的定点比分法 另外poj精度好 ...
- 个人项目作业$\cdot$求交点个数
个人项目作业\(\cdot\)求交点个数 一.作业要求简介 本次作业是北航计算机学院软件工程课程的个人项目作业,个人开发能力对于软件开发团队是至关重要的,本项目旨在通过一个求几何图形的交点的需求来使学 ...
- hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)
Area Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- Problem F Free Weights
二分答案. 思路:对于二分给定的mid,即当前允许移动的最大重量,我们可以把小于改重量的标记一下,然后把没有标记的按照顺序放到另一个数组,然后判断是否满足两两相同. #include<bits/ ...
- C#开发BIMFACE系列31 服务端API之模型对比2:获取模型对比状态
系列目录 [已更新最新开发文章,点击查看详细] 在上一篇<C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比>中发起了2个模型对比,由于模型对比是在BIMFAC ...
- Springboot整合https原来这么简单
1 简介 HTTP是不安全的,我们需要给它套上SSL,让它变成HTTPS.本文章将用实例介绍Springboot整合HTTPS. 2 密码学基础 要谈https就要谈Security,自然就要谈安全: ...
- ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.33.10' (111) 解决方法
谷歌了一下之后,原来是在mysql的my.cnf中有下面一段代码: # Instead of skip-networking the default is now to listen only on ...
- Visual Studio 2015 + Windows 2012 R2, c++/cli Array::Sort() 抛出异常
在Windows7上编译就是正常. 可见Windows2012 R2缺少了一些东西. 另外,有一个现象一样,但原因不一样的 https://stackoverflow.com/questions/46 ...
- 梁国辉获Yes评分表系统3.0计算机软件著作权
梁国辉获Yes评分表系统3.0计算机软件著作权 Liang Guohui won the Yes score system 3 computer software copyright 登记证书如下 R ...
- 将Spring Boot应用程序注册成为系统服务
文章目录 前期准备 打包成可执行jar包 注册成为liunx服务 System V Init Systemd Upstart 在Windows中安装 Windows Service Wrapper J ...
- 最大比例 公约数复用 【蓝桥真题】 (c++)
最大比例 X星球的某个大奖赛设了M级奖励.每个级别的奖金是一个正整数.并且,相邻的两个级别间的比例是个固定值.也就是说:所有级别的奖金数构成了一个等比数列.比如:16,24,36,54其等比值为:3/ ...
- Python内置函数enumerate()
enumerate()是Python的内置函数. help(enumerate) Help on class enumerate in module builtins: class enumerate ...
- javascript SDK开发之webpack中eslint的配置
eslint的好处就不多说了.代码检查,代码报错, 智能提示,让开发人员更规范的撸代码等等. 1.安装依赖 npm install --save-dev eslint eslint-friendly- ...