首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么数组下标 0 开始?而不是 1

很多小伙伴初学编程的时候都被元素下标折磨过,为什么很多编程语言要把 0 作为第一个下标索引,而不是直观的 1 呢?...,那是否有理由选择其中的一种而不是另一种?...2 个不等式来说,下界小于序列中的最小值,这会出现一个问题,比如我们的连续序列是 [0,1,2,3,4] 那么按照第 2 个不等式的写法,不等式的左边就是 -1,-1 是非自然数,而我们需要表示的连续序列是自然数序列...遵循不等式 1 的规则: 当从下标 1 开始时,下标范围 1 ≤ i < N+1 当从下标 0 开始时,下标范围 0 ≤ i < N 哪个更优雅?...Dijkstra 是这样解释的:从下标 0 开始能够给出更好的不等式,因为元素的下标就等于序列中它前面的元素数(或者说 “偏移量”)。 问题解决!

83730

漫话:如何给女朋友解释为什么计算机0开始计数,而不是1开始

0开始更优雅 在《为什么程序员喜欢使用0 ≤ i < 10这种左闭右的形式写for循环?》一文中我们分析过,Dijkstra通过分析,得出在进行范围表达的时候,使用左闭右的方式更加合理。...他认为,使用左闭右的表达方式,当下标 1 开始时,下标范围为 1 <= i < N+1;当下标 0 开始时则是 0 <= i < N; 而显然后面这种表达式更加漂亮、优雅一些。...计数表示偏移量 很多人学习编程都是C语言开始的,那么,C语言就是一个典型的0-base语言(0作为计数的开始),其实,这一约定早在BCPL时代就是这样的了。...因为指针*(p+0)这种表达形式中的0表示的是偏移量,所以,无论数组的下标开始,*(p+0)都是用于存取内存中的p+0位址的值,也就是0X0000001这块内存单元的值。...试想一下,如果使用1作为数组的起始下标,那么arr1就应该指向0X0000001这块内存,但是*(p+1)按照偏移量的计算方式,需要指向0X0000005这块内存。

1K40
您找到你想要的搜索结果了吗?
是的
没有找到

Direct3D 11 Tutorial 5: 3D Transformation_Direct3D 11 教程5:3D转型

展示转换以及如何将它们组合实现期望的效果将是有用的。 在我们介绍新概念时,未来的教程将在此基础上构建。...通常有三种类型的原始变换可以在顶点上执行:平移(相对于原点位于空间中),旋转(相对于x,y,z帧的方向)和缩放(距离 起源)。 除此之外,投影变换用于视图空间到投影空间。...例如,要沿X(负X方向)移动顶点-5单位,我们可以将其与此矩阵相乘: 1 0 0 0 0 1 0 0 0 0 1 0 -5 0 0 1 如果我们将此应用于原点为中心的立方体对象...,则结果是该框向负X移动5个单位,如图5所示,在应用平移之后。...0 0 1 图6显示了围绕Y旋转原点为中心45度的立方体的效果。

1.8K40

理解单目相机3D几何特性

所以我们首先必须了解相机如何将3D场景转换为2D图像的基本知识,当我们认为相机坐标系中的物体场景是相机原点位置(000)以及在相机的坐标系的X、Y、Z时,摄像机将3D物体场景转换成由下面的图描述的方式的...这里的b[x,y,z,1]有助于用[R | t]进行点积,获得3D空间中该点的相机坐标,R表示旋转矩阵,t表示平移矩阵,该矩阵首先将点旋转到相机坐标系方向,然后将其平移到相机坐标系,[R | t]也称为相机的外参矩阵...3x4矩阵,由于P不是一个方阵,它的逆矩阵是不可用的,因此这再次显示了用相机图像的u、v像素反算x、y、z世界坐标的困难。...方形矩阵可以有其逆矩阵H-1,它可以将图像的u,v像素映射到世界坐标系中的x,y,0坐标,如下所示: 事实上,图像到图像的映射也是可以的,因为在z=0的世界坐标平面可以理解为一个图像,在游泳比赛的电视转播中...给定一个一定角度倾斜的摄像机拍摄的图像,首先获取摄像机坐标,然后围绕摄像机坐标x旋转相机的坐标,使其面向垂直于地面的方向,然后将旋转后的摄像机坐标重新投影到图像平面上。

1.6K10

3D图形学线代基础

上图中 X-Y-Z 坐标系是世界坐标系,X1-Y1-Z1 坐标系为小方块的自身坐标系,刚开始左侧小方块的自身坐标系的 X1 、Y1 、Z1 和世界坐标系的 X 、Y 、Z 方向相同;但是当小方块绕着自身坐标系的... B 点移动到 A 点,在 X 上位置的变化为 x1-x2,在 Y 上位置的变化为 y1-y2,把这两个维度上的位置的变化组合在一起最终形成了二维向量 BA;图中 BA 上方的箭头表示向量的方向是...先把 A 点坐标转换为齐次坐标(x1,y1,1),沿着 X 正方向平移并不会改变 Y 坐标,而 X 坐标系为原有坐标加上平移距离,因此得到 B 点齐次坐标,如下: ?...视图矩阵会把场景世界坐标系变换到相机坐标系;而在相机坐标系中,相机位置在坐标系原点 O(000),其 Y 单位向量为(010),Z 单位向量为(001),X 单位向量为(100)...图中右侧为屏幕坐标系,屏幕左下角为原点,X 水平向右,Y 垂直向上;假设屏幕宽度为 width,高度为 height,投影面坐标转换为屏幕坐标系,需要先进行缩放,然后再平移即可,变换矩阵如下:

2K31

八.CSS之animation(动画)

() 沿着x方向平移 translateY() 沿着y方向平移 translateZ() 沿着z方向平移 .box3{ background-color: orange; position:...: translateX() 沿着x方向平移 translateY() 沿着y方向平移...z平移,调整元素在z的位置,正常情况就是调整元素和人眼之间的距离,距离越大,元素离人越近 z平移属于立体效果(近大远小),默认情况下网页是不支持透视,如果需要看见效果 , 必须要设置网页的视距...,调整元素在z的位置,正常情况就是调整元素和人眼之间的距离, 距离越大,元素离人越近 z平移属于立体效果(近大远小),默认情况下网页是不支持透视...> 6. transform 之 旋转 通过旋转可以使元素沿着x y 或 z旋转指定的角度 视距效果明显 rotateX() rotateY(

87810

ARKit介绍

创建项目步骤1 创建项目步骤1 ? 创建项目步骤2 创建项目步骤2 “增强现实应用程序”模板为我们提供了一个基本代码。...然后我UITapGestureRecognizer在主视图中添加了一个识别用于添加节点的轻击手势。...红色是“x,绿色是“y”,蓝色是“z”。 红色是“x,绿色是“y”,蓝色是“z”。 为了实现10厘米的平移,我需要在第四列上应用转换z。正值定义为更接近相机,负值更远。...因此,如果使用0,对象位置将位于当前相机框架的正前方。...平面检测在行动中 平面检测在行动中 所以,我FocusSquareApple的演示中借用了这个课程。 最后,最后一个问题:如何将节点放在最近的平面上?

2.3K20

Android自定义View【实战教程】5⃣️---Canvas详解及代码绘制安卓机器人

Canvas坐标系 Canvas坐标系指的是Canvas本身的坐标系,Canvas坐标系有且只有一个,且是唯一不变的,其坐标原点在View的左上角,坐标原点向右为x的正半坐标原点向下为...默认情况下,绘图坐标系与Canvas坐标系完全重合,即初始状况下,绘图坐标系的坐标原点也在View的左上角,原点向右为x正半原点向下为y正半。.../** * 在X方向放大为原来sx倍,Y方向方大为原来的sy倍 * 默认原点为左上角 * 参数1: X的放大倍数 * 参数2: Y的放大倍数 */ canvas.scale(...float sx, float sy); /** * 在X方向放大为原来sx倍,Y方向方大为原来的sy倍 * 参数1: X的放大倍数 * 参数2: Y的放大倍数 * 参数3:...float y, Paint paint) /** * 参数1:输入的内容 * 参数2:要从第几个字开始绘制 * 参数3:要绘制到第几个文字 * 参数4:文本x的位置 * 参数5

1.3K20

​canvas 高级功能(上)

例如,如果执行两次与上面例子完全相同的平移,那么实际上是将原点在 x 方向移动300个单位(0+150+150),在y方向也移动300个单位(0+150+150)。...它与平移的区别在于(x, y)参数是缩放倍数,而不是像素值。...} x缩放 & x倾斜 & x平移\\ y倾斜 & y缩放 & y平移\\ 0 & 0 & 1 \end{matrix} \right] 你可以忽略最后一行,因为你不需要也不能修改它的值...在这个例子中,你想将画布的尺寸放大 2 倍,所以将第 1 个和第 4 个参数设置为2,即 a 和 d 一分别对应 x 缩放和 y 缩放。可以理解。而如果要平移画布原点呢?...没错:你需要设置第 5 个和第 6 个参数,即 e 和 f ——分别对应 x 平移和 y 平移

2K20

现在前端都流行手写ECharts ?

沿x镜像scale(1,-1) 向下平移canvas.height即可---这里注意了因为坐标系被scale(1,-1)之后坐标系向上为正,向下平移需要-canvas.height代码部分 <script...context.scale(1,-1) //向下平移,注意这时候乡下是负方向哦 context.translate(0,-canvas.height) //绘制X开始...image.png 3.绘制刻度 同样的方法我们将X分为7等分,没等分我们都要绘制一个刻度。代码如下 ?...后面的每次都平移一个刻度长度,坐标圆心就平移到了每个刻度的中间。y轴向下平移了5个像素。这样就和X不会重合。...后面的每次都平移一个刻度长度,坐标圆心就平移到了每个刻度的中间。y轴向下平移了5个像素。这样就和X不会重合。

3.6K30

深度图到点云的构建方式

1 :(左)u,v坐标表示的图像平面。每个像素都有指定的颜色和深度。(右)笛卡尔坐标x,y,z中的3D视图。 如果要了解3D环境中每个像素对应的内容,那么了解相机的属性就非常重要。...世界坐标系与照相机对齐,因此z延伸到照相机所看的方向。在右侧,左侧开始的两个部分重叠的三角形分开更加清楚。 类似的三角方法中,我们立即获得: ? 通常fₓ和fᵧ是相同的。...旋转矩阵R,平移矢量t和本征矩阵K组成了相机投影矩阵。它定义为世界坐标转换为屏幕坐标: ?...如果我们想另一种方式进行转换,则会遇到问题。我们对3x4矩阵求逆。但是大家会发现该矩阵的方阵扩展是可以求逆的。为此,我们必须在左侧增加1 / z(视差)才能满足方程式。...只看第一行就可以得出与开始时(方程1)完全相同的结论。使用等式的第二行和第三行对y和z同样适用。对于更复杂的内在矩阵,大家需要在进行此转换之前计算逆。

2.3K10

第4章-变换-4.1-基础变换

我们最简单的变换开始——平移。 4.1.1 平移 从一个位置到另一个位置的变化由平移矩阵 表示。该矩阵通过向量 来平移一个实体。...上面给出的旋转矩阵可用于一系列三个变换执行任意旋转。此过程在第4.2.1节中讨论。4.2.4节介绍了直接绕任意旋转。 所有旋转矩阵的行列式都是1并且是正交的。...由于围绕点的旋转的特性在于点本身不受旋转的影响,因此变换平移对象开始,使 与原点重合,这是通过 完成的。此后跟随实际旋转: 。最后,必须使用 将对象平移回其原始位置。...观察下标可以用来求参数s在下面矩阵中的位置;x(其数字索引为0)标识第0行,z(其数字索引为2)标识第二列,因此s位置如下所示: image.png 将此矩阵与点 相乘的效果是产生一个点: 。...左边是原始几何图形,一个三角形及其侧面显示的法线。中间的插图显示了如果模型沿x缩放0.5并且法线使用相同的矩阵会发生什么。右图显示了法线的正确变换。

3.9K110

深度图到点云的构建方式

1 :(左)u,v坐标表示的图像平面。每个像素都有指定的颜色和深度。(右)笛卡尔坐标x,y,z中的3D视图。 如果要了解3D环境中每个像素对应的内容,那么了解相机的属性就非常重要。...世界坐标系与照相机对齐,因此z延伸到照相机所看的方向。在右侧,左侧开始的两个部分重叠的三角形分开更加清楚。 类似的三角方法中,我们立即获得: ? 通常fₓ和fᵧ是相同的。...旋转矩阵R,平移矢量t和本征矩阵K组成了相机投影矩阵。它定义为世界坐标转换为屏幕坐标: ?...如果我们想另一种方式进行转换,则会遇到问题。我们对3x4矩阵求逆。但是大家会发现该矩阵的方阵扩展是可以求逆的。为此,我们必须在左侧增加1 / z(视差)才能满足方程式。...只看第一行就可以得出与开始时(方程1)完全相同的结论。使用等式的第二行和第三行对y和z同样适用。对于更复杂的内在矩阵,大家需要在进行此转换之前计算逆。

1.3K31

background、转换、过渡

地方开始渐变,绿色40%的地方开始渐变, 如果百分比不到100%,那么,缺少的用纯颜色填充*/ .s4{ background-image...如果第二个参数未提供,则默认值为0 translatex(): 指定对象X(水平方向)的平移 translatey(): 指定对象Y(垂直方向)的平移 rotate(): 指定对象的2D rotation...如果第二个参数未提供,则默认值为0 skewx(): 指定对象X的(水平方向)扭曲 skewy(): 指定对象Y的(垂直方向)扭曲 3D Transform Functions: matrix3d...(): 一个4x4矩阵的形式指定一个3D变换 translate3d(): 指定对象的3D位移。...第1个参数对应X,第2个参数对应Y,第3个参数对应Z,参数不允许省略 translatez(): 指定对象Z平移 rotate3d(): 指定对象的3D旋转角度,其中前3个参数分别表示旋转的方向

1.1K30

OpenCV图像几何变换专题(缩放、翻转、仿射变换及透视)【python-Open_CV系列(五)】

可以是0,正数,负数。0表示沿X(水平方向的)翻转。1表示沿Y(竖直方向的)翻转。 负数表示同时沿X和Y翻转。...M = [[a, b, c], [d, e, f]],则像素的变换公式为: X = x × a + y × b + c Y = x × d + y × e + f 其中x,y指原像素的x、y坐标...X,Y指变换后的X,Y坐标。 dsize 输出图像的尺寸。(不带放缩,增大的部分用黑色色素(0)填充) 这三个参数是常用的参数。其余参数建议使用默认值。...---- 3.1 平移 将《星月夜》向左平移50个像素,向下平移100个像素为例。...将《星月夜》保持左下角和右上角坐标不变,左上角((0,0)处)向右移动150个像素长度。

84130

让元素呈现出“七十二变”的效果,就是这么简单

老样子,我们仍然transform的语法开始。...2、平移translate 平移translate可以分为三种情况: 1)translate(x,y)水平方向和垂直方向同时移动(也就是X和Y同时移动); 2)translateX(x)仅水平方向移动...3) 缩放scale 缩放scale和平移translate是极其相似的,它也具有三种情况: 1)scale(x,y)使元素水平方向和垂直方向同时缩放(也就是X和Y同时缩放); 2)scaleX(...它们具有相同的缩放中心点和基数,其中心点就是元素的中心位置,缩放基数为1,如果其值大于1,元素就放大,反之其值小于1,元素缩小。因其与平移类似,所以我们主要看下scale(x, y)的使用效果。...0 5px 5px; box-shadow: 0 0 1px #ccc,inset 0 0 2px #fff; text-shadow: 0 1px 1px #686868; } .menu

1.7K51

相机成像的几何原理

它需要两件事 : 原点:我们可以任意固定房间的一角作为原点 (0,0,0)。 X,Y,Z:我们还可以沿着地板的两个维度定义房间的 X 和 Y ,并沿着垂直墙定义 Z 。...将相机放在房间的任意位置,拍摄任意方向,此时都可以相机位置为原点,相机的水平、镜头正对的方向、竖直方向作为(X_c,Y_c,Z_c) 建立坐标系,该坐标系定义为 相机坐标系( Camera Coordinate...将旋转和平移都用矩阵乘法表示,旋转矩阵为 R (9个参数,自由度为3),平移向量 t,那么坐标值可以通过以下公式关联: 图片 有时,上面的表达式更紧凑的形式编写。...将 3×1 平移向量作为列附加在 3×3 旋转矩阵的末尾,获得称为外部矩阵(相机外参)的 3×4 矩阵。...0 & c x \\ 0 & s y & c y \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{c}x_{p} \\ y_{p} \\ 1\end{

1.1K20

前端移动web-day06学习笔记

01-transition过渡动画 1.在前端开发中,如果不使用JS代码,要想实现元素A状态变成B状态,并且中间的过程可以被观察到,那么就可以使用css中的过渡属性:transition 2.transition...:延迟时间 例如3s,表示动画3秒之后才开始 一般无需设置,默认为0,立即开始 1.png transition-timing-function速度曲线 2.png 细节注意点: (1)如果在horver...: 800px;一般视距范围600-100px 倾斜Skew只有XY,没有Z,但是可以用3d矩阵变换来实现matrix3d(了解即可) 3.png 1.1-3D视距perspective与位移...1.视距:视觉的距离 相当于模拟出一个“眼睛”看物体的距离,遵循近大远小的规则 perspective: 800px; 2.3D位移 translate:既可以平移x,也能平移...y tranelateX:仅仅x平移 tranelateY:仅仅Y平移 tranelateZ:仅仅Z平移 2.png 1.2

67400
领券