简单的计算几何

前言

某些阴间数形结合题目不知道的结论全都放这里了。
其实并不是正经的计算几何,只是名字听起来高级

直角坐标系中任意线段的整数坐标点

给定起始点终止点坐标为整数

设线段起始点坐标为 \((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) 还有一组整数坐标 
}

迁移自洛谷

posted @ 2025-02-04 13:32  hm2ns  阅读(11)  评论(0)    收藏  举报