資源簡介
一個(gè)線段類 MyLine,要求如下:
n主要屬性有: e1,e2 端點(diǎn),類型為Point
n編寫構(gòu)造方法,如(Point p1 , Point p2)
n編寫成員方法。如:
?檢查線段是否位于第一象限check…
?求線段的長度 length() …
?判斷兩條線段(非延長線)是否相交(另一線段作為參數(shù))。
?求一點(diǎn)到該線段(或延長線)的距離
n編寫測試程序
?用戶輸入線段的兩點(diǎn)坐標(biāo)構(gòu)造一個(gè)線段
?用戶選擇需要執(zhí)行已編寫的哪種方法(判斷是否相交)
?根據(jù)用戶選擇的方法要求用戶輸入點(diǎn)的坐標(biāo),或者線段的兩點(diǎn)坐標(biāo),并反饋給用戶結(jié)果。
代碼片段和文件信息
import?java.awt.*;
import?java.util.Scanner;
class?Point
{float?xy;
}
public?class?MyLine?
{
Point?p1=new?Point();
Point?p2=new?Point();
public?void?MyLine(Point?p1Point?p2)
{
?this.p1=p1;
?this.p2=p2;
}
//判斷線段是否在第一象限內(nèi)
public?boolean?check()
{
if(p1.x>0&&p1.y>0&&p2.x>0&&p2.y>0)
return?true;
//線段兩端點(diǎn)均在第一象限內(nèi)時(shí)線段在第一象限
else
return?false;
}
//計(jì)算線段的長度,公式為√[(X1-X2)^2+(Y1-Y2)^2]
//構(gòu)造函數(shù)
public?double?length(Point?pt1Point?pt2)
{
double?result=Math.sqrt((pt1.x-pt2.x)*(pt1.x-pt2.x)+(pt1.y-pt2.y)*(pt1.y-pt2.y));
return?result;
}
public?double?length()
{
double?result=Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
return?result;
}
//判斷兩條線段是否相交
public?boolean?cross(MyLine?l1MyLine?l2){
double?slope1slope2;//判斷斜率是否相等
slope1=(l2.p1.y-l2.p2.y)/(l2.p1.x-l2.p2.x);
slope2=(l1.p1.y-l1.p2.y)/(l1.p1.x-l1.p2.x);
if(slope1==slope2)
return?false;
//跨立試驗(yàn)
else{
if((((l2.p1.x-l1.p1.x)*(l1.p2.y-l1.p1.y)-(l2.p1.y-l1.p1.y)*(l1.p2.x-l1.p1.x))*((l2.p2.x-l1.p1.x)*(l1.p2.y-l1.p1.y)-(l2.p2.y-l1.p1.y)*(l1.p2.x-l1.p1.x)))<=0)
return?true;
else
return?false;
}
}
//一點(diǎn)到線段或延長線的距離
??//S=√[p(p-a)(p-b)(p-c)]
??//p=(a+b+c)/2
??public?double?distence(Point?a){
double?d1=this.length();//線段長度
double?d2=length(this.p1a);
double?d3=length(this.p2a);
if(d2==0||d3==0)
return?0;
else?if(d1==0)
return?d2;
else{
double?p=(d1+d2+d3)/2;
return?(Math.sqrt(p*(p-d1)*(p-d2)*(p-d3))/d1*2);
}
}
public?static?void?main(String[]?args){
Scanner?s1=new?Scanner(System.in);
System.out.println(“請輸入第一條線段起點(diǎn)的橫坐標(biāo):“);
float?cx1=s1.nextFloat();
System.out.println(“請輸入第一條線段起點(diǎn)的縱坐標(biāo):“);
float?cy1=s1.nextFloat();
Sys
評論
共有 條評論