Blog2:nchu-software-oop-2022-4+5+期中( 三 )


Blog2:nchu-software-oop-2022-4+5+期中

文章插图
虽然使用了面向对象的方法,但是创建类是并没有创建的很完善 。
【Blog2:nchu-software-oop-2022-4+5+期中】另外,很多内容还是挤在一起,没有去单独构造成函数 。
*******************************************************************************************************************************************************
题目2:
7-1 点线形系列5-凸五边形的计算-1
分数 50全屏浏览题目切换布局作者 蔡轲单位 南昌航空大学用户输入一组选项和数据,进行与五边形有关的计算 。以下五边形顶点的坐标要求按顺序依次输入,连续输入的两个顶点是相邻顶点,第一个和最后一个输入的顶点相邻 。选项包括:1:输入五个点坐标,判断是否是五边形,判断结果输出true/false 。2:输入五个点坐标,判断是凹五边形(false)还是凸五边形(true),如果是凸五边形,则再输出五边形周长、面积,结果之间以一个英文空格符分隔 。若五个点坐标无法构成五边形,输出"not a pentagon"3:输入七个点坐标,前两个点构成一条直线,后五个点构成一个凸五边形、凸四边形或凸三角形,输出直线与五边形、四边形或三角形相交的交点数量 。如果交点有两个,再按面积从小到大输出被直线分割成两部分的面积(不换行) 。若直线与多边形形的一条边线重合,输出"The line is coincide with one of the lines" 。若后五个点不符合五边形输入,若前两点重合,输出"points coincide" 。
以上3选项中,若输入的点无法构成多边形,则输出"not a polygon" 。输入的五个点坐标可能存在冗余,假设多边形一条边上两个端点分别是x、y,边线中间有一点z,另一顶点s:1)符合要求的输入:顶点重复或者z与xy都相邻,如:x x y s、x z y s、x y x s、s x y y 。此时去除冗余点,保留一个x、一个y 。2) 不符合要求的输入:z不与xy都相邻,如:z x y s、x z s y、x s z y
import java.util.Scanner;class Point{double x;double y;int exist=1;//1:存在0:不存在2:交点无数个int flag=0;public boolean pointchonghe(Point A,Point B)//判断两点重合{if(A.x==B.x&&A.y==B.y)return true;elsereturn false;}public boolean Pointscoincide(Point A,Point B,Point C,Point D)//判断四边形四点重合{if(A.x==B.x&&A.y==B.y||A.x==C.x&&A.y==C.y||A.x==D.x&&A.y==D.y||B.x==C.x&&B.y==C.y||B.x==D.x&&B.y==D.y||C.x==D.x&&C.y==D.y)return true;elsereturn false;}}//==========================================================================================================class Line{Point p1=new Point();Point p2=new Point();double a;double b;double c;double D;//线段距离public void L(Line l)//一般式系数{l.a=l.p2.y-l.p1.y;l.b=l.p1.x-l.p2.x;l.c=l.p2.x*l.p1.y-l.p1.x*l.p2.y;}public void distanse(Line l)//求线段距离D{l.D=Math.sqrt(Math.pow(l.p1.x-l.p2.x,2)+Math.pow(l.p1.y-l.p2.y,2));l.D=Math.round(l.D*1000000000)/(double)1000000000;}public void D(Point p1,Point p2,Line lp1p2)//两点间距离{lp1p2.D=Math.sqrt(Math.pow(lp1p2.p1.x-lp1p2.p2.x,2)+Math.pow(lp1p2.p1.y-lp1p2.p2.y,2));lp1p2.D=Math.round(lp1p2.D*1000000000)/(double)1000000000;}public boolean zhixian(Point X,Line l)//点是否在直线上{L(l);if(l.a*X.x+l.b*X.y+l.c==0)return true;elsereturn false;}public boolean pingxing(Line l1,Line l2)//判断是否平行(有无交点){L(l1);L(l2);if(l1.b==0&&l2.b==0)return true;else if(l1.b!=0&&l2.b!=0&&(l1.a/l1.b==l2.a/l2.b))return true;elsereturn false;}public boolean linechonghe(Line l1,Line l2)//判断是否两线重合{L(l1);L(l2);if(l1.b==0&&l2.b==0){if(l1.c/l1.a==l2.c/l2.a)return true;elsereturn false;}else if(l1.a==0&&l2.a==0){if(l1.c/l1.b==l2.c/l2.b)return true;elsereturn false;}else{if(l1.c/l1.a==l2.c/l2.a&&l1.c/l1.b==l2.c/l2.b)return true;elsereturn false;}}public void jiaodian(Line l1,Line l2,Point O)//两条直线交点{if(l1.pingxing(l1,l2)){O.exist=0;//System.out.println("@@@@@@@@");}else{l1.L(l1);l2.L(l2);O.x=(l1.b*l2.c-l2.b*l1.c)/(l1.a*l2.b-l2.a*l1.b);O.y=(l2.a*l1.c-l1.a*l2.c)/(l1.a*l2.b-l2.a*l1.b);O.x=Math.round(O.x*1000000000)/(double)1000000000;O.y=Math.round(O.y*1000000000)/(double)1000000000;}}public boolean pointwhere(Point A,Point B,Point C,Line lBC)//点A是否在线段BC上(含端点){if(A.pointchonghe(A,B)||A.pointchonghe(A,C))return true;else{Line lAB=new Line();lAB.p1=A;lAB.p2=B;Line lAC=new Line();lAC.p1=A;lAC.p2=C;lAB.D(A,B,lAB);lAC.D(A,C,lAC);lBC.D(B,C,lBC);if(lAB.D+lAC.D-lBC.D<0.000001)return true;elsereturn false;}}public boolean pointwhere1(Point A,Point B,Point C,Line lBC)//点A是否在线段BC上(不含端点){if(A.pointchonghe(A,B)||A.pointchonghe(A,C))return false;else{Line lAB=new Line();lAB.p1=A;lAB.p2=B;Line lAC=new Line();lAC.p1=A;lAC.p2=C;lAB.D(A,B,lAB);lAC.D(A,C,lAC);lBC.D(B,C,lBC);if(lAB.D+lAC.D-lBC.D<0.000001)return true;elsereturn false;}}}//=======================================================================================================class Triangle{Point p1=new Point();Point p2=new Point();Point p3=new Point();Line l1=new Line();Line l2=new Line();Line l3=new Line();double S;//面积int num;//交点数量int flag=0;//0:不存在/1-10:10种三角形组合public void Set(Point A,Point B,Point C,Triangle T){T.p1=A;T.p2=B;T.p3=C;}public void Line(Point A,Point B,Point C,Triangle T)//newLine{T.l1.p1=A;T.l1.p2=B;T.l2.p1=B;T.l2.p2=C;T.l3.p1=A;T.l3.p2=C;}public boolean sanjiaox(Point A,Point B,Point C,Triangle T)//判断是否为三角形{T.Line(A,B,C,T);l1.distanse(l1);l2.distanse(l2);l3.distanse(l3);if((l1.D+l2.D>l3.D&&l1.D<=l3.D&&l2.D<=l3.D)||(l1.D+l3.D>l2.D&&l1.D<=l2.D&&l3.D<=l2.D)||(l2.D+l3.D>l1.D&&l2.D<=l1.D&&l2.D<=l1.D))return true;elsereturn false;}public void sanjiaoxmianji(Triangle t)//三角形面积{t.Line(t.p1,t.p2,t.p3,t);t.l1.distanse(t.l1);t.l2.distanse(t.l

经验总结扩展阅读