[基本算法]Java——编写一个线段类,实现基本数学算法

来源:互联网 发布:淘宝贝南海幼儿园 编辑:程序博客网 时间:2024/06/11 00:49
[基本算法]Java——编写一个线段类,实现基本数学算法
主要属性有:e1,e2端点,类型为Point;
编写构造方法,如(Point p1, Point p2)
编写成员方法。如:
检查线段是否位于第一象限
求线段的长度
判断两天线段是否相交
求一点到该线段的距离
 
import java.awt.Point;
import java.lang.Math;

public class MyLine
{
    
private Point e1;
    
private Point e2;
    
    MyLine(Point p1,Point p2)
    
{
        e1
=p1;
        e2
=p2;
    }

    
    
void is1quadrant()
    
{
        
if(e1.x>0&&e1.y>0&&e2.x>0&&e2.y>0)
        System.out.println(
"线段位于第一象限");
        
else
        System.out.println(
"线段不在第一象限");
    }

    
    
public float length(Point p1,Point p2)
    
{
        
return (float)java.lang.Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
    }

    
    
/*public bool IsIntersect(float x0,float y0,float x1,float y1,float x2,float y2,float x3,float y3,float &InterX,float &InterY)
    {
        
    }
*/


    
public void distance(Point a,Point b,Point c)
    
{
        
float f;
        
float d;
        Point ab
=new Point();
        Point ac
=new Point();
        Point e
=new Point();
        ab.x
=b.x-a.x;
        ab.y
=b.y-a.y;
        ac.x
=c.x-a.x;
        ac.y
=c.y-a.y;
        f
=ab.x*ac.x+ab.y*ac.y;
        d
=ab.x*ab.x+ab.y+ab.y;
        
if(f<0)
            System.out.println(length(a,c));
        
if(f>d)
            System.out.println(length(a,b));
        f
=f/d;
        e.x
=a.x+(int)f*ab.x;   // c在ab线段上的投影点
        e.y=a.y+(int)f*ab.y;
        System.out.println(length(a,e));
    }

    
}


class l
{
    
public static void main(String args[])
    
{
        Point p1;
        Point p2;
        Point m;
        p1
=new Point(1,1);
        p2
=new Point(2,1);
        m
=new Point(4,1);
        
        MyLine line
=new MyLine(p1,p2);
        line.is1quadrant();
        System.out.println(
"两点间线段的长度:"+line.length(p1,p2));
        System.out.println(
"点x到线段的长度:");
        line.distance(p1,p2,m);        
    }

}