/**
* 功能:在二維平面上,有兩個正方形,請找出一條直線,可以將這兩個正方形對半分。
* 假定正方形的上下兩條邊與x軸平行。java
*/app
[java] view plain copythis
或者:spa
public
static
double
[] getBipartition(Point[] A, Point[] B) {
.net
// 此題因爲正方形的上下兩條邊與x軸平行, 因此就不用直線相交去求中心點了
code
// 求出第一個點不一樣的座標(由於點的順序多是混亂的)
blog
double
p1x1 = A[
0
].x;
ip
double
p1x2 = A[
1
].x == A[
0
].x ? A[
2
].x:A[
1
].x;
ci
double
p1y1 = A[
0
].y;
get
double
p1y2 = A[
1
].y == A[
0
].y ? A[
2
].y:A[
1
].y;
// 求出第二個點不一樣的座標(由於點的順序多是混亂的)
double
p2x1 = B[
0
].x;
double
p2x2 = B[
1
].x == B[
0
].x ? B[
2
].x:B[
1
].x;
double
p2y1 = B[
0
].y;
double
p2y2 = B[
1
].y == B[
0
].y ? B[
2
].y:B[
1
].y;
// 平分線的兩個點
double
x1 = (
double
)(p1x2 + p1x1) /
2
;
double
y1 = (
double
)(p1y2 + p1y1) /
2
;
double
x2 = (
double
)(p2x1 + p2x2) /
2
;
double
y2 = (
double
)(p2y1 + p2y2) /
2
;
double
k = (
double
)(y2 - y1) / (x2 - x1);
double
b = y1 - k*x1;
return
new
double
[] {k,b};
}
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
public class Bipartition {
public double[] getBipartition(Point[] A, Point[] B) {
// write code here
double Acenterx=0;//正方形A的中心x座標
double Acentery=0;//正方形A的中心y座標
for(int i=0;i<4;i++){
Acenterx+=A[i].x;
Acentery+=A[i].y;
}
Acenterx/=4.0;
Acentery/=4.0;
double Bcenterx=0;//正方形B的中心x座標
double Bcentery=0;//正方形B的中心y座標
for(int i=0;i<4;i++){
Bcenterx+=B[i].x;
Bcentery+=B[i].y;
}
Bcenterx/=4.0;
Bcentery/=4.0;
double[] result=new double[2];
result[0]=(Bcentery-Acentery)/(Bcenterx-Acenterx);//求斜率
result[1]=Acentery-result[0]*Acenterx;//求截距
return result;
}
}