平面几何的几个距离

Posted yspm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平面几何的几个距离相关的知识,希望对你有一定的参考价值。

欧几里得距离:

(n) 维空间的表示就是

[sqrt{sumlimits^{n}_ {i=1} (ax_i-ay_i)^2} ]

感觉好装的样子……

曼哈顿距离

[sumlimits_{i=1}^{n} |ax_i-ay_i| ]

还是感觉好装的样子

切比雪夫距离

[maxlimits_{i=1}^{n} |ax_i-ay_i| ]

就是坐标差的绝对值的极值

然后我们思考曼哈顿距离和切比雪夫距离的关系:

请在纸上建一个二维坐标系,然后画一个与原点曼哈顿距离为 (5) 的正方形 (S_1)

然后再画一个切比雪夫距离为 (5) 的正方形 (S_2)

看看它们,是不是有某种奇妙的联系:(S_1) 旋转 (45) 度后放大为原来原来的两倍就是 (S_2)

互相转化的公式为$(x,y) on S_1 ightarrow(frac{x+y}{2},frac{x-y}{2}) on S_2 $

这里可以用来使某些题的处理更加方便,比如:

Luogu5193 [TJOI2012]炸弹

题意转化:

给一个二维平面和一堆点,如果两个点的曼哈顿距离小于等于定值就连边

最后求图上连通块个数

(nle 10^5)

曼哈顿两个维度有点头疼,不好处理,那我们转切比雪夫

这样我们把距离转成了以每个点为原点,在定边长切比雪夫距离矩形中框点

我们上 (map) 扫描线就行了

我们在处理每个点的时候就直接找那个离他 (y) 最近的上下两个就行了

因为那个点已经考虑了前面的点

Code:

#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace yspm{
	inline int read()
	{
		int res=0,f=1; char k;
		while(!isdigit(k=getchar())) if(k==‘-‘) f=-1;
		while(isdigit(k)) res=res*10+k-‘0‘,k=getchar();
		return res*f;
	}
	const int N=1e5+10;
	struct node{
		int x,y;
		#define x(i) p[i].x
		#define y(i) p[i].y
	}p[N];
	int ans,n,fa[N],r;
	inline int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
	inline bool cmp(node a,node b)
	{
		return a.x<b.x;
	}
	map<int,int> mp;
	signed main()
	{
		n=read(); r=read();
		for(int i=1,tx,ty;i<=n;++i)
		{
			fa[i]=i; tx=read(),ty=read();
			x(i)=(tx+ty); y(i)=(tx-ty);
		} 
		mp[1e15+10]=-1;
		mp[-1e15-10]=-1;
		sort(p+1,p+n+1,cmp);
		int now=1;
		for(int i=1;i<=n;++i)
		{
			while(now<n&&x(now)+r<x(i)) 
			{
				if(mp[y(now)]==now) mp.erase(y(now));
				++now;
			}
			map<int,int>::iterator it=mp.lower_bound(y(i));
			if(y(i)+r>=(*it).first) 
			{
				
				int t=(*it).second; 
				if(find(t)!=find(i)) 
				{
					fa[find(t)]=find(i),ans--;
				}
			}
			it--; 
			if(y(i)<=(*it).first+r)
			{
				int t=(*it).second; 
				if(find(t)!=find(i)) 
				{
					fa[find(t)]=find(i),ans--;
				}
			}
			mp[y(i)]=i;
		}printf("%lld
",ans+n);
		return 0;
	}
}
signed main(){return yspm::main();}

以上是关于平面几何的几个距离的主要内容,如果未能解决你的问题,请参考以下文章

支持向量机(support vector machine, SVM)

点到平面的距离怎么求?

View的几个坐标的问题 ,涉及到动画

使 PHP 代码更加简洁的几个小技巧

如何使一张ppt里的几个文本框之间的距离保持一致

IOS 距离现在的几分,几个小时,几分钟,几天,几周几月,几年