*/
/**
* 考虑:
* 线的准确含义,可能性有:
* 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