过
两
点
两
点
A
(
x
1
,
y
1
)
,
B
(
x
2
,
y
2
)
的
直
线
可
以
表
示
为
假
设
直
线
上
的
任
意
一
点
为
C
(
x
,
y
)
,
三
点
共
线
可
以
表
示
为
,
A
B
⃗
=
λ
B
C
⃗
(
x
2
−
x
1
,
y
2
−
y
1
)
=
λ
(
x
−
x
2
,
y
−
y
2
)
;
∴
(
x
2
−
x
1
)
/
(
x
−
x
2
)
=
(
y
2
−
y
1
)
/
(
y
−
y
2
)
过两点两点A(x_1,y_1),B(x_2,y_2)的直线可以表示为 \\假设直线上的任意一点为C(x,y), \\三点共线可以表示为,\vec {AB} = \lambda \vec {BC} \\(x2-x1,y2-y1) = \lambda(x-x2,y-y2); \\ \therefore (x_2-x1)/(x-x_2) = (y_2-y_1)/(y-y_2)
过两点两点A(x1,y1),B(x2,y2)的直线可以表示为假设直线上的任意一点为C(x,y),三点共线可以表示为,AB=λBC(x2−x1,y2−y1)=λ(x−x2,y−y2);∴(x2−x1)/(x−x2)=(y2−y1)/(y−y2)
(
x
2
−
x
1
)
∗
(
y
−
y
2
)
=
(
y
2
−
y
1
)
∗
(
x
−
y
2
)
(x_2-x_1)*(y-y_2)=(y_2-y_1)*(x-y_2)
(x2−x1)∗(y−y2)=(y2−y1)∗(x−y2)
#include<bits/stdc++.h>
using namespace std;
class point
{
private:
int _x,_y;
public:
point(int m,int n):_x(m),_y(n)
{
}
~point()
{
}
void set_X_Y(int m,int n)
{
_x = m;
_y = n;
}
void set_x(int m)
{
_x = m;
}
void set_Y(int n)
{
_y = n;
}
int x()
{
return _x;
}
int y()
{
return _y;
}
void display()
{
cout<<"("<<_x<<","<<_y<<")"<<endl;
}
};
bool isLine(point p1, point p2, point p3)//判断三点是否共线
{
if((p2.x() - p1.x())*(p3.y() - p2.y()) == (p2.y() - p1.y() )*(p3.x() - p2.x()))
return true;
else return false;
}
int main()
{
while(1)
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
point p1(x1,y1),p2(x2,y2);
cout<<"p1: "<<endl;
p1.display();
cout<<"p2: "<<endl;
p2.display();
cout<<"size: "<<endl;
int n;
cin>>n;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
point p3(i,j);
if(isLine(p1,p2,p3))
cout<<".";
else cout<<" ";
if(j == n-1)cout<<endl;
}
}
}
return 0;
}