C++——坐标那些事儿

本文讨论了在C++编程中使用二维数组作为地图时,初学者常将二维数组的行和列与平面直角坐标系的Y轴和X轴混淆的问题。通过解析平面直角坐标系的概念,指出在C++中,二维数组的下标[0][1]实际上对应坐标(1,0)。强调在理解二维数组时,应明确第一个下标对应的是坐标中的纵坐标,第二个下标是横坐标。" 131058547,18870241,Python一行代码输出两行字的技巧,"['Python', '编程技巧', '代码优化', '调试', '文本输出']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在c++中,很多萌新(包括小编)在做需要地图的程序时会用一个二维数组来当做地图,而在初二或往后的童鞋很可能会直接用 平面直角坐标系 的思维去理解二维数组的行和列:把X轴理解为列,而把Y轴理解为行。

小编在这里要郑重地告诉你:

这种想法是 的!!!

为了帮助大家理解,小编先讲一下平面直角坐标系。

平面直角坐标系

小编在这里大概地讲一下平面直角坐标系,具体(官方)讲解请点这里

平面直角坐标系是在一个平面内有两条相互垂直且有公共原点的数轴,它们的公共原点O称为直角坐标系的原点。一般来说,在平面直角坐标系内,水平且正方向向右的数轴被称为X轴,而竖直且正方向向上的数轴被称为Y轴

平面直角坐标系
对于平面内任意一点C,过点C分别向X轴、Y轴作垂线,垂足在X轴、Y轴上的对应点a,b分别叫做点C的横坐标、纵坐标,有序数对(a,b)叫做点C的坐标

C++中的二维数组

一般,我们在c++中定义一个二维数组是这样的:

	数据类型 数组名[常量表达式1][常量表达式2] ;

例如,

	int a[4
public class CoordTrans7Param { public double[,] values=new double[7,1]; //{{dx},{dy},{dz},{rx},{ry},{rz},{k}}; //public double   两个坐标系转换一般需要平移,旋转,缩放共七参数。 Y=(1+k)*M(x,y,z)*X+dX; public double[,] values=new double[7,1]; //{{dx},{dy},{dz},{rx},{ry},{rz},{k}}; //public double dx,dy,dz,rx,ry,rz,k; public void Set4Param(double dx,double dy,double dz,double k) { this.dx=dx; this.dy=dy; this.dz=dz; this.k=k; this.rx=this.ry=this.rz=0; } public void SetRotationParamRad(double rx,double ry,double rz) { this.rx=rx; this.ry=ry; this.rz=rz; } public void SetRotationParamMM(double rx,double ry,double rz) { SetRotationParamRad(rx*Math.PI/648000,ry*Math.PI/648000,rz*Math.PI/648000); } private double[,] GetMx() { double [,] Mx=new double[,] {{1,0,0}, {0,Math.Cos(rx),Math.Sin(rx)}, {0,-Math.Sin(rx),Math.Cos(rx)}}; return Mx; } private double[,] GetMy() { double [,] My=new double[,] {{Math.Cos(ry),0,-Math.Sin(ry)}, {0,1,0}, {Math.Sin(ry),0,Math.Cos(ry)}}; return My; } private double[,] GetMz() { double [,] Mz=new double[,] {{Math.Cos(rz),Math.Sin(rz),0}, {-Math.Sin(rz),Math.Cos(rz),0}, {0,0,1}}; return Mz; } private double[,] GetM() //M=Mx*My*Mz? or M=Mz*My*Mx? { double [,] M=new double[3,3]; MatrixTool.Multi(GetMz(),GetMy(),ref M); MatrixTool.Multi(M,GetMx(),ref M); return M; } private double[,] GetMdx() { double[,] mt = {{ 0, 0, 0 }, { 0, -Math.Sin(rx), Math.Cos(rx) }, { 0, -Math.Cos(rx), -Math.Sin(rx) }}; double[,] m=new double[3,3]; MatrixTool.Multi(GetMz(),GetMy(),ref m); MatrixTool.Multi(m,mt,ref m); return m; } private double[,] GetMdy() { double[,] mt = {{ -Math.Sin(ry), 0, -Math.Cos(ry) }, { 0, 0, 0 }, { Math.Cos(ry), 0, -Math.Sin(ry) }}; double[,] m=new double[3,3]; MatrixTool.Multi(GetMz(),mt,ref m); MatrixTool.Multi(m,GetMx(),ref m); return m; } private double[,] GetMdz() { double[,] mt = {{ -Math.Sin(rz), Math.Co
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值