「java线段查找」快速查线段

博主:adminadmin 2022-11-22 19:47:06 55

本篇文章给大家谈谈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线段查找和快速查线段的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。