一、前期准备:
当x1 /=x2,y1 /=y2时,直线斜率: k=(y2-y1)/(x2-x1),
由点斜式可得,直线方程为: y - y1=k (x-x1)
推导得到: (y2-y1)x + (x1-x2)y + x2y1 - x1y2 =0
对应一般式: ax+by+c=0
得出:
a=y2-y1
b=x1-x2
c= x2y1 - x1y2
二、上代码:
//给出若干个参数坐标(最少包含3个点),判断一条直线最多能包含这些坐标点中的几个。
//输出最大个数,比如输入(1,1)(2,2)(3,3),输出3
1.0版:
#include<iostream>
using namespace std;
void line_test(int x[],int y[],int n)
{
int a = 0, b = 0, c = 0, max0 = 2;
//直线方程一般式为ax+by+c=0,截距式为y=kx+b,考虑到分数问题,这里用的一般式
for (int i = 0; i < n-1; i++)
{
for (int j = 0;j < n-1; j++)
{
if (i != j)
{
int max = 0, value = 0;
//计算出所有直线的a,b,c的值
a = y[i] - y[j];
b = x[j] - x[i];
c = y[j] * x[i] - x[j] * y[i];
for(int f=0;f<n;f++)//匹配ax+by+c=0
{
value = a * x[f] + b * y[f] + c;
if (value == 0)
max++;
}
if (max > max0)max0 = max;
}
<