1.平分的直线
题目描述
在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分。假定正方形的上下两条边与x轴平行。
给定两个vecotrA和B,分别为两个正方形的四个顶点。请返回一个vector,代表所求的平分直线的斜率和截距,保证斜率存在。
测试样例:
[(0,0),(0,1),(1,1),(1,0)],[(1,0),(1,1),(2,0),(2,1)]
返回:[0.0,0.5]
思路:平分线必定过两个正方形的的中点,因此求出两个正方形的中点,然后分别求出其斜率和截距,赋给arr[0]和arr[1]。
import java.util.*;
/*
public class Point {
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public Point() {
this.x = 0;
this.y = 0;
}
}*/
public class Bipartition {
public static double[] getBipartition(Point[] A, Point[] B) {
double [] arr={0,0};
double Ax=0,Ay=0,Bx=0,By=0;
for(int i=0;i<A.length;i++){
Ax+=A[i].x;
Ay+=A[i].y;
}
Ax=Ax/4; Ay=Ay/4;
for(int i=0;i<B.length;i++){
Bx+=B[i].x;
By+=B[i].y;
}
Bx=Bx/4; By=By/4;
//斜率
arr[0]=(By-Ay)/(Bx-Ax);
//截距
arr[1]=Ay-arr[0]*Ax;
return arr;
}
}
2.穿点最多的直线
题目描述
在二维平面上,有一些点,请找出经过点数最多的那条线。
给定一个点集vector<point>p和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vector<double>,代表经过点数最多的那条直线的斜率和截距。</double></point>