「java线段查找」快速查线段
本篇文章给大家谈谈java线段查找,以及快速查线段对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java 线性查找和二分查找的区别
一 线性查找
定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。
线性查找又称为顺序查找。如果查找池是某种类型的一个表,比如一个数组,简单的查找方法是从表头开始,一次将每一个值与目标元素进行比较。最后,或者查找到目标,或者达到表尾,而目标不存在于组中,这个方法称为线性查找。
二 折半查找
定义:二分查找又称折半查找,它是一种效率较高的查找方法。
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
【算法复杂度】假设其数组长度为n,其算法复杂度为o(log(n))
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果xa[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果xa[n/2],则我们只要在数组a的右 半部继续搜索x。
java怎么求点到线段的距离
import java.util.Scanner;
public class Distance {
public static void main(String[] args) {
Line L = new Line(2,3,5);
Scanner sc = new Scanner(System.in);
System.out.println("输入点的x坐标:");
double x = sc.nextDouble();
System.out.println("输入点的y坐标:");
double y = sc.nextDouble();
System.out.println(distence(x,y,L));
}
public static double distence(double x,double y,Line L){
return Math.abs(L.A*x+L.B*y+L.C)/Math.sqrt(L.A*L.A+L.B*L.B);
}
}
class Line{//直线类,方程为:Ax+By+C=0
double A;
double B;
double C;
public Line(double A,double B,double C){
this.A = A;
this.B = B;
this.C = C;
}
}
java 判断直线状况
public class LineTest {
public static void main(String[] args) {
Point p1 = new Point(0, 3), p2 = new Point(4, 0);
Line l1 = new Line(0, 3, 4, 0),
l2 = new Line(p1, p2),
l3 = new Line(0,4,0,3),
l4 = new Line(4,4,0,4),
l5 = new Line(0,0,3,3);
System.out.println("l1:"+l1);
System.out.println("l2:"+l2);
System.out.println("l3:"+l3);
System.out.println("l4:"+l4);
System.out.println("l5:"+l5);
System.out.println("l1 length:"+l1.getLength());
System.out.println("l2 length:"+l2.getLength());
System.out.println("l3 length:"+l3.getLength());
System.out.println("l4 length:"+l4.getLength());
System.out.println("l1 isHorizontal:"+l1.isHorizontal());
System.out.println("l3 isHorizontal:"+l3.isHorizontal());
System.out.println("l1 isVertical:"+l1.isVertical());
System.out.println("l4 isVertical:"+l4.isVertical());
System.out.println("l1 slope:"+l1.getSlope());
System.out.println("l3 slope:"+l3.getSlope());
System.out.println("l4 slope:"+l4.getSlope());
System.out.println("l5 slope:"+l5.getSlope());
System.out.println("l1 midpoint:"+l1.getMidpoint().toString());
System.out.println("l3 midpoint:"+l3.getMidpoint().toString());
System.out.println("l1 equals l2:"+l1.equals(l2));
System.out.println("l1 equals l3:"+l1.equals(l3));
System.out.println("l2 equals l3:"+l2.equals(l3));
}
}
class Line {
private Point p1,p2;
public Line(Point p1, Point p2) {
super();
this.p1 = p1;
this.p2 = p2;
}
public Line(int x1,int y1,int x2,int y2){
super();
this.p1=new Point(x1, y1);
this.p2=new Point(x2, y2);
}
public int getLength(){
int a=(int) Math.abs(p1.getX()-p2.getX());
int b=(int) Math.abs(p1.getY()-p2.getY());
return (int) Math.sqrt(a*a+b*b);
}
public boolean isHorizontal(){
return Math.abs(p1.getX()-p2.getX())=0.00001;
}
public boolean isVertical(){
return Math.abs(p1.getY()-p2.getY())=0.00001;
}
public double getSlope(){
double a=p1.getX()-p2.getX();
double b=p1.getY()-p2.getY();
if(b==0.0)return Double.MAX_VALUE;
return a/b;
}
public Point getMidpoint(){
return new Point((int)((p1.getX()+p2.getX())/2)
,(int)((p1.getY()+p2.getY())/2));
}
public boolean equals(Line ol){
return (this.p1.equals(ol.getP1()))
(this.p2.equals(ol.getP2()));
}
public Point getP1() {
return p1;
}
public void setP1(Point p1) {
this.p1 = p1;
}
public Point getP2() {
return p2;
}
public void setP2(Point p2) {
this.p2 = p2;
}
@Override
public String toString(){
StringBuilder sb=new StringBuilder();
sb.append("[")
.append("(").append(p1.getX()).append(",")
.append(p1.getY()).append(")").append(",")
.append("(").append(p2.getX()).append(",")
.append(p2.getY()).append(")")
.append("]");
return sb.toString();
}
}
有个小问题就是你要求用Point做点,而Point点的数据类型是int,计算中点时会损失精度,可以改成Point2D实现。
java取得线段与矩形的交点
解法一:
可以把矩形看成是4条直线相交段构成的,把这4条直线的方程写出来,在把直线AB的方程也写出来。把直线AB的方程和分别和这4条边的直线的某一条组成方程组求解:
1、若都无解,肯定不相交。
2、有1个或2个解,可能相交。看求得的横坐标和纵坐标是否同时在线段DE(或EF或FG或GD)和线段AB的范围内。
3、计算过程中x、y的系数完全抵消,这是重合情况。
解法二:AB和矩形DEFG相交,有两种情况:
(1)有一个点在矩形内部,另一个点在矩形外部,这时候只有一个交点。
(2)两个点都在矩形外部,这时候有两个交点。
(1)和(2)不同时满足。
对于(1)通过判断A、B相对于矩形4条边的位置就可以确定。
对于(2)先计算出AB、DE、EF、FG、GD这5条直线的斜率,然后可以根据斜率判断是否相交,若斜率相同可能是重合或平行要排除。若只与其中一条相交,归结为情况(1),排除。然后,求出相交点,看求得的横坐标和纵坐标是否同时在线段DE(或EF或FG或GD)和线段AB的范围内。
关于java线段查找和快速查线段的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-22,除非注明,否则均为
原创文章,转载请注明出处。