Java编写线段类Bee Line的成员方法,求线段的长度,判断两条线段是否相交,求一点到线段的距离

Java编写线段类Bee Line的成员方法,求线段的长度,判断两条线段是否相交,求一点到线段的距离

小魔女参考了bing和GPT部分内容调写:
要实现上述功能,需要定义一个Bee Line类,该类有两个属性,分别为两个端点的坐标,即:

class BeeLine {
    private Point start;
    private Point end;
    
    // 构造函数
    public BeeLine(Point start, Point end) {
        this.start = start;
        this.end = end;
    }
    
    // getter and setter
    public Point getStart() {
        return start;
    }
    public void setStart(Point start) {
        this.start = start;
    }
    public Point getEnd() {
        return end;
    }
    public void setEnd(Point end) {
        this.end = end;
    }
}

接下来,实现求线段长度的方法:

// 计算线段长度
public double getLength() {
    double x = Math.abs(start.getX() - end.getX());
    double y = Math.abs(start.getY() - end.getY());
    return Math.sqrt(x * x + y * y);
}

实现判断两条线段是否相交的方法:

// 判断两条线段是否相交
public boolean isIntersect(BeeLine line) {
    // 获取两条线段的端点
    Point start1 = this.getStart();
    Point end1 = this.getEnd();
    Point start2 = line.getStart();
    Point end2 = line.getEnd();
    // 判断两条线段是否相交
    if (Math.max(start1.getX(), end1.getX()) >= Math.min(start2.getX(), end2.getX()) &&
        Math.max(start2.getX(), end2.getX()) >= Math.min(start1.getX(), end1.getX()) &&
        Math.max(start1.getY(), end1.getY()) >= Math.min(start2.getY(), end2.getY()) &&
        Math.max(start2.getY(), end2.getY()) >= Math.min(start1.getY(), end1.getY())) {
        return true;
    }
    return false;
}

最后,实现求一点到线段的距离的方法:

// 计算一点到线段的距离
public double getDistance(Point point) {
    double a = this.getLength();
    double b = new BeeLine(point, this.getStart()).getLength();
    double c = new BeeLine(point, this.getEnd()).getLength();
    double p = (a + b + c) / 2;
    double s = Math.sqrt(p * (p - a) * (p - b) * (p - c));
    return 2 * s / a;
}

回答不易,记得采纳呀。