class Point{ int x,y; Point(){ x=0; y=0; } Point(int x,int y){ this.x=x; this.y=y; } } class Line{ double tan,len; Line(double t,double l){ tan=t; len=l; } Line(){ tan=0.0; len=0.0; } } public class JavaApplication10 { public static void main(String[] args) { Point p1=new Point(1,5); Point p2=new Point(); Line l1=new Line(1,1.41); Line l2=new Line(-1,23); if(crossing(l1,l2)) System.out.println("l1与l2相交"); Line l3=new Line(two_point(p1,p2).tan, two_point(p1,p2).len); System.out.println("两点确定直线tan="+l3.tan+" len="+l3.len); } static boolean crossing(Line l1,Line l2){ if(l1.tan==l2.tan||l1.tan==-l2.tan) return false; else return true; } static Line two_point(Point p1,Point p2){ Line l=new Line(); int a,b; a=Math.abs(p1.x-p2.x); b=Math.abs(p1.y-p2.y); l.tan=(double)(p1.y-p2.y)/(p1.x-p2.x); l.len=Math.sqrt((float)(a*a+b*b)); return l; } }
这个有什么好解释的?
Point代表点,有x,y坐标
Line代表线段,它有角度值和长度,角度值是用正切表示的,从程序来看,这个线段应该表示成从原点出发的。因为仅仅角度和长度是不能确定一个直线的位置的。
crossing判断tan是否相同,或相反,。如果相同或相反就是在同一条直线上,就没交点return false.
two_point(Point p1,Point p2) 两点算出一条线段,tan角度是根据定义算的,长度是根据直角三角形边长公式算的。