*/
/** * 考虑: * 线的准确含义,可能性有: * 1)由斜率和y轴截距确定; * 2)由这条边上的任意两点确定; * 3)线段,以正方形的边作为起点和终点。 * * 假设:这条线的端点应该落在正方形的边上。 * 思路:要将两个正方形对半分,这条线必须连接两个正方形的中心点。 */ public class Square { //正方形的四条边 int left; int right; int top; int bottem; int size; public static void main(String[] args) { // TODO Auto-generated method stub } //得到正方形的中心点的位置 public Point getMiddle(){ return new Point((this.left+this.right)/2.0,(this.top+this.bottem)/2); } //返回线段mid1和mid2的线段与square2的边相交的点,即从mid1到mid2画一条线,一直延伸置碰到square2的靠外的那条边。 public Point extend(Point mid1,Point mid2,int size){ //确定线段mid1->mid2的方向 int xdir=mid1.x<mid2.x?1:-1; int ydir=mid1.y<mid2.y?1:-1; //如果mid1和mid2的x坐标相同,计算斜率时,会抛出零异常,做特别处理 if(mid1.x==mid2.y) return new Point(mid2.x,mid2.y+ydir*size/2.0); //计算线段的斜率 double slope=(mid2.y-mid1.y)/(mid2.x-mid1.x); double x1=0; double y1=0; //计算相交点,注意斜率的取值 if(Math.abs(slope)==1){ x1=mid2.x+xdir*size/2.0; y1=mid2.y+ydir*size/2.0; }else if(Math.abs(slope)<1){ x1=mid2.x+xdir*size/2.0; y1=mid2.y+slope*ydir*(size/2.0);//注意方向 }else if(Math.abs(slope)>1){ x1=mid2.x+slope*xdir*(size/2.0); y1=mid2.y+ydir*size/2.0; } return new Point(x1,y1); } public MyLine cut(Square other){ //计算两个中心点之间的线段与正方形的边相交的位置 Point point1=extend(this.getMiddle(),other.getMiddle(),other.size); Point point2=extend(this.getMiddle(),other.getMiddle(),-other.size); Point point3=extend(other.getMiddle(),this.getMiddle(),this.size); Point point4=extend(other.getMiddle(),this.getMiddle(),-this.size); //找出线段的起点和终点 Point start=point1; Point end=point1; Point[] points={point1,point2,point3}; for(int i=0;i<points.length;i++){ if(points[i].x<start.x||points[i].x==start.x&&points[i].y<start.y) start=points[i]; else if(points[i].x>end.x||points[i].x==end.x&&points[i].y>end.y) end=points[i]; } return new MyLine(start,end); } } class MyLine{ Point start; Point end; public MyLine(Point start,Point end){ this.start=start; this.end=end; } } class Point{ double x; double y; public Point(double x,double y){ this.x=x; this.y=y; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
9.7数学与概率(三)——在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分
原文地址:http://blog.csdn.net/shangqing1123/article/details/47340815