平面坐标系

目录

一,直角坐标系

1,数学中的平面坐标系

2,计算机中的平面坐标系

二,六边形坐标系

1,直角坐标系

2,120度坐标系

3,60度坐标系

4,极坐标系


一,直角坐标系

1,数学中的平面坐标系

数学中的平面坐标系只有一种:

2,计算机中的平面坐标系

计算机中,常用的平面坐标系有两种:

第一种是和数学中的比较接近,

第二种是契合阅读顺序,即x=3,y=5对应第三行第5列

opencv中,at函数是第二种坐标系,矩形是第一种坐标系(常见的都是第一种坐标系)。

二,六边形坐标系

直角坐标系中,用平行来理解坐标也可以,用垂直来理解坐标也可以。

但是本质上,平行才是几何的基本概念,垂直是推导出来的概念,所以严格来讲我们就应该用平行来理解直角坐标。

对于六边形坐标系,自然没有垂直的概念,平行的概念仍然可用。

1,直角坐标系

六边形直角坐标系是尽量贴近普通直角坐标系设计的,不过还是很不一样,这里的直线是扭曲的。

从(x,y)往上、右上、右下分别走一步,向量分别是(0,1)(1,x%2)(1,x%2-1),

其实往右下走一步就是往右上走一步再往下走一步。

往另外三个方向走一步,和这三个方向分别相反即可。

求2点之间的最小路径距离:

struct Node
{
	int x,y;
};
int GetLen(Node a, Node b)
{
	if (a.x > b.x)return GetLen(b, a);
	int dx = b.x - a.x;
	int dy = abs(b.y - a.y);
	if (dx % 2 == 0) {
		if (dy <= dx / 2)return dx;
		return dx + dy - dx / 2;
	}
	int ym = dx / 2 + ((a.x + (b.y < a.y)) % 2 + 2) % 2;
	if (dy <= ym)return dx;
	return dx + dy - ym;
}

计算从一个点往一个方向运动一定距离之后,到达的位置:

Node Move(Node a, int dire, int len)//dire是0-5,len是0-正无穷
{
	if (dire % 3 == 0)return Node{ a.x, a.y + (dire == 0 ? 1 : -1) * len };
	if (dire == 1 || dire == 5)return Node{ a.x + (dire == 1 ? 1 : -1)*len,  a.y + len / 2 + (len % 2 ? (a.x % 2 + 2) % 2 : 0) };
	Node b = Move(a, 3, len);
	if (dire == 2)return Move(b, 1, len);
	return Move(b, 5, len);
}

应用:六宫数局

2,120度坐标系

3个方向里面任选2个作为坐标系方向即可。

或者3个方向里面任选2个作为坐标系方向即可。

我取红线作为坐标系:

可以看出,剩下的黑线就是直线y=x

3,60度坐标系

任选2个夹角为60度的方向作为坐标系方向也是可以的。

其实这就相当于把120度坐标系的一个轴,方向反过来。

4,极坐标系

可以把一个正六边形按顺序编号,用编号a代替角度。

坐标用(r,a)表示,r是距离,a是编号

  

六条直线(射线)的方程分别是a=kr,k=0,1,2,3,4,5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值