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

推薦閱讀