简单的计算几何
前言
某些阴间数形结合题目不知道的结论全都放这里了。
其实并不是正经的计算几何,只是名字听起来高级。
直角坐标系中任意线段的整数坐标点
给定起始点终止点坐标为整数
设线段起始点坐标为 \((x_1,y_1)\) ,终止点坐标为 \((x_2,y_2)\)
首先计算 \(d=\operatorname {gcd} \left ( \left (x_1-x_2 \right ),\left (y_1-y_2\right )\right )\)
然后计算 \(a=\dfrac{x_1-x_2}{d},b=\dfrac{y_1-y_2}{d}\)
则所有整数点的坐标为:
\[(x_1+ak,y_1+bk)
\]
其中 \(k \in \mathbb{Z}^+\),\(x_1+ak \ne x2\ \ \operatorname{or}\ \ y_1+bk \ne y2\)
可能不严谨,因为 \(x_1+ak \ne x2\ \ \operatorname{or}\ \ y_1+bk \ne y2\) 是代码里 while 循环的条件。
代码如下:
for(int i=1;i<=n;i++){
int sx,sy,dx,dy;
cin>>sx>>sy>>dx>>dy;
ll d=__gcd(abs(sx-dx),abs(sy-dy));
ll a=(dx-sx)/d;
ll b=(dy-sy)/d;
while(sx!=dx||sy!=dy){
// (sx,sy) 一组整数坐标
sx+=a;
sy+=b;
}
// 注意退出后 (sx,sy) 还有一组整数坐标
}
迁移自洛谷

浙公网安备 33010602011771号