• 大小: 4KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: Java
  • 标签: java  线段  

资源简介

一个线段类 MyLine,要求如下: n主要属性有: e1,e2 端点,类型为Point n编写构造方法,如(Point p1 , Point p2) n编写成员方法。如: •检查线段是否位于第一象限check… •求线段的长度 length() … •判断两条线段(非延长线)是否相交(另一线段作为参数)。 •求一点到该线段(或延长线)的距离 n编写测试程序 •用户输入线段的两点坐标构造一个线段 •用户选择需要执行已编写的哪种方法(判断是否相交) •根据用户选择的方法要求用户输入点的坐标,或者线段的两点坐标,并反馈给用户结果。

资源截图

代码片段和文件信息

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;
}
//判断线段是否在第一象限内
public boolean check()
{
if(p1.x>0&&p1.y>0&&p2.x>0&&p2.y>0)
return true;
//线段两端点均在第一象限内时线段在第一象限
else
return false;
}

//计算线段的长度,公式为√[(X1-X2)^2+(Y1-Y2)^2]
//构造函数
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;
//跨立试验
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;
}
}

//一点到线段或延长线的距离
  //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(“请输入第一条线段起点的横坐标:“);
float cx1=s1.nextFloat();
System.out.println(“请输入第一条线段起点的纵坐标:“);
float cy1=s1.nextFloat();
Sys

评论

共有 条评论