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;
}
回答不易,记得采纳呀。