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

齐次坐标中的仿射变换:平移不起作用,c#

齐次坐标中的仿射变换是指在三维空间中对点进行平移、旋转、缩放和剪切等操作的数学变换。在齐次坐标系统中,一个三维点可以表示为一个四维向量,其中前三个分量表示点的坐标,最后一个分量为1。

平移变换是指将点沿着指定的方向移动一定的距离。在齐次坐标中,平移变换可以通过将点的坐标向量与一个平移矩阵相乘来实现。平移矩阵的形式如下:

代码语言:txt
复制
[1 0 0 tx]
[0 1 0 ty]
[0 0 1 tz]
[0 0 0  1]

其中(tx, ty, tz)为平移的距离。

在C#中,可以使用数学库或图形库来实现齐次坐标中的仿射变换。例如,可以使用System.Numerics命名空间下的Matrix4x4结构来表示和操作仿射变换矩阵。以下是一个示例代码,展示如何在C#中进行平移变换:

代码语言:txt
复制
using System;
using System.Numerics;

class Program
{
    static void Main()
    {
        Vector3 point = new Vector3(1, 2, 3); // 原始点的坐标

        // 定义平移矩阵
        Matrix4x4 translationMatrix = Matrix4x4.CreateTranslation(2, 3, 4);

        // 进行平移变换
        Vector3 transformedPoint = Vector3.Transform(point, translationMatrix);

        Console.WriteLine("原始点坐标: " + point);
        Console.WriteLine("平移后的点坐标: " + transformedPoint);
    }
}

输出结果为:

代码语言:txt
复制
原始点坐标: (1, 2, 3)
平移后的点坐标: (3, 5, 7)

在云计算领域中,齐次坐标中的仿射变换可以应用于图形渲染、计算机视觉、虚拟现实等领域。例如,在虚拟现实中,可以使用仿射变换来实现用户在虚拟环境中的移动和旋转。

腾讯云提供了一系列与云计算相关的产品和服务,包括云服务器、云数据库、云存储、人工智能等。具体关于腾讯云的产品和服务介绍,可以参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

图像中的几何变换

例如二维点p(x,y)->p(x,y,1)就成了齐次坐标,同理三维点p(x,y,z)->p(x,y,z,1)也成了齐次坐标; 齐次坐标的使用,使得几何变换更容易计算,尤其对于仿射变换(二维/三维)更加方便...;由于图形硬件、视觉算法已经普遍支持齐次坐标与矩阵乘法,因此更加促进了齐次坐标使用,使得它成为图形学中的一个标准;后面提到的几何变换都以齐次坐标和齐次变换矩阵为基础。...齐次变换矩阵(以平移为例): 以点p(x,y)为例,如果想把它平移(a,b),至p'(x+a,y+b),是不可能用矩阵计算完成的,现在换成齐次坐标(x,y,1),通过矩阵相乘(下图左侧公式) ,很方便得到平移后的坐标...为了保持一致把矩阵改成 右侧矩阵,这就是齐次变换矩阵。 ? 三. 图像中的几何变换 1....投影变换: 定义:变换过程中,直线映射为直线(不一定保证平行度); 任何二维投影变换都可以用3x3可逆矩阵表示(齐次坐标);任何三维投影变换都可以用4x4可逆矩阵表示(齐次坐标)。 ?

2.1K60

仿射变换及其应用

★本文是对《机器学习数学基础》第2章2.2.4节齐次坐标系的内容拓展。关于《机器学习数学基础》的有关介绍以及更多的拓展内容,请参阅:math.itdiffer.com 。”...仿射空间 仿射空间(affine space),又称线性流形,是数学中的几何结构,这种结构是欧式空间的仿射特性的推广 。...若向量空间 的维度是 ,那么 的仿射子空间也可看作一组非齐次线性方程的解;而齐次方程的解永远是线性子空间,也就是说齐次方程的解永远包含零解。维度为 的仿射空间也叫做仿射超平面。...仿射变换 仿射变换(affine transformation),又称仿射映射,是对一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。...即: 平移变换不能用矩阵表示,为此使用齐次坐标系(《机器学习数学基础》第2章2.2.4节)。

1.9K20
  • Computer Graphics note(1):变换

    & 齐次坐标 仿射变换(affline transformations) 变换矩阵的结构性质 齐次坐标下的变换矩阵 Scale: Rotation: Translation: 其他变换 1.Inverse...但是在齐次坐标下也能引申出其他意义,即两点相加为其中点,推导过程如下: image.png 仿射变换(affline transformations) 仿射变换 = 线性变换 +平移,即为 image.png...使用齐次坐标表示如下: image.png 上面两者是等价的,所以仿射变换是先进行线性变换然后再进行的平移。...齐次坐标表示 类比2D中引入齐次坐标的原因,3D中的平移也不能直接写成,所以对于3D变换,增加一个维度w,此时规定点和向量的齐次坐标表示如下: image.png 同样的有对于齐次坐标而言,(x,...=0)表示的点即为(xw,yw,zw,1)T(\frac{x}{w},\frac{y}{w},\frac{z}{w},1)^T 矩阵描述3D中的仿射变换如下: image.png 变换矩阵的结构性质

    83660

    坐标系与矩阵(3):平移

    这里我们称其为仿射变换(Affine transformation):线性变换+平移。 数学之美,其中之一就是希望达到形式上的统一。而齐次坐标,则实现了将仿射变换转为线性变换的形式: ?...这里,我们将一个2*2的矩阵升级为3*3的矩阵,这里要强调的是该矩阵是先旋转再平移,每个点扩增一个 ? 位,竟然将平移从非线性变成线性的关系,将旋转和平移统一在一个矩阵中,如此的神奇,这是为什么呢?...的平面,然后在该平面上实现了平移,而整体上则类似比萨斜塔那般,依旧相对于原点不变。这样,我们新增一个维度,通过高维度的线性变换实现低维度的仿射变换。下图描述了该过程。 ?...这样,对于一个point,对应的齐次坐标为 ? ,而一个vector,对应的齐次坐标为 ? : ?...p=3 如何通俗地讲解「仿射变换」这个概念: https://www.zhihu.com/question/20666664/answer/157400568 google drive上共享了pdf原版

    2.1K20

    单应性Homograph估计:从传统算法到深度学习

    目录 一 图像变换与平面坐标系的关系 二 平面坐标系与齐次坐标系 三 单应性变换 四 深度学习在单应性方向的进展 ?...那么就可以把把旋转和平移统一写在一个矩阵乘法公式中,即刚体变换: ? 而旋转矩阵 ? 是正交矩阵( ? )。 ? 刚体变换:旋转+平移(正方形-正方形) 仿射变换 ? 其中 ?...仿射变换(正方形-平行四边形) 可以看到,相比刚体变换(旋转和平移),仿射变换除了改变目标位置,还改变目标的形状,但是会保持物体的“平直性”。 不同 ? 和 ?...二 平面坐标系与齐次坐标系 问题来了,齐次坐标到底是什么? 齐次坐标系 ? 与常见的三维空间坐标系 ? 不同,只有两个自由度: ? 而 ? (其中 ? )对应坐标 ? 和 ?...上的点 ? 映射到特征 ? 对应点 ? 的仿射变换。 ? 其中 ? 对应STN中的仿射变换参数。STN直接在特征维度进行变换,且可以插入轻松任意两层卷积中。

    2K10

    图像变换基础:齐次坐标系

    为了解决这个问题,数学家们引入了齐次坐标系,这是一种与笛卡尔坐标完全不同的坐标形式,还是以平面空间为例,在笛卡尔坐标中,每个点可以用 的形式表示,在齐次坐标系中,则变成了 ,其中 。...通常,可以设 (关于齐次坐标系的详细内容,读者可以参考有关计算机图形学资料)。 利用齐次坐标系,图2-2-10所示的平移就可以写成: 这样,平移也可以用矩阵乘法形式表示了。...对于二维向量空间的齐次坐标系,以下几个矩阵分别是实现了齐次坐标中的旋转、缩放、平移变换: 旋转: , 表示旋转的角度 缩放: , 分别为 方向的缩放倍数 平移: , 分别为...常见的仿射变换,除了缩放、旋转和平移之外,还包括反射和剪切。 以上以手工计算的方式演示了图形变换的基本原理,在程序中,我们会使用一些库和模块实现各种图形变换。...OpenCV 中的函数warpAffine()实现了图像按照平移矩阵的仿射变换,其函数形式是warpAffine(src, M, dsize),主要参数的含义为: src:需要变换的图像对象,即上述程序中的

    2.6K40

    【GAMES101-现代计算机图形学课程笔记】Lecture 03 Transformation

    Homogeneous coordinates (齐次坐标) 3.1 为什么需要引入齐次坐标呢?...image.png 显然上述操作并不能用矩阵乘法来表示,因此平移变换不能像前面的变换操作一样可以直接用矩阵乘法表示,所以为了让平移变换也可以以一种优雅的矩阵乘法形式表示,所以需要引入齐次坐标。...3.2 如何使用齐次坐标 以二维坐标为例,我们可以通过额外加入一个坐标来使用齐次坐标。...3.3 Affine Transformations (仿射变换) 为了将上述变换统一起来,所以提出了仿射变换,即 Affine map = linear map + translation (仿射变换...= 线性变换 + 平移变换) image.png image.png 仔细观察可以知道左边一系列的矩阵相乘其实就等价于一个3x3的矩阵,换句话说一个3x3矩阵可以对2D向量做超级多的变换。

    1K30

    【opencv实践】仿射变换和透视变换

    这种变换常常用到透视变换,但我们今天在讲解透视变换时,需要普及一下其他的变换,包括平移,旋转,错切,放缩,以及仿射变换。 综述 所有复杂的东西,都是由基本的组成的。...等式左边[X,Y,1]是像素坐标的齐次形式。等式右边是平移之后的坐标。 放缩 进行放缩,就是将矩形(图像)放缩n倍,也就是长宽各乘一个变量。 ?...等式右边就是仿射变换矩阵,是由原图像平移,旋转,放缩,错切之后得来的。 在书上往往将仿射变换和透视变换放一起讲,这两者各是什么呢? 在刚学仿射变换和透视变换时,我是有些分不清的。...在这个坐标系中确定P的坐标,和在蓝色坐标系中确定旋转之后P的坐标是等价的。 基于这个结论,我们可以通过简单的立体几何知识确定P在新坐标系中的坐标。P在新坐标系中的X坐标和Y坐标分别是 ?...到此,我们完成了旋转操作,如何平移呢?仅是加一个平移常数的事: ? 到此,我们的2*3大小的仿射变换便推导出来了。 推导知道了,但如何实现呢?

    5.6K30

    【愚公系列】2023年04月 Halcon机器视觉-仿射变换详解

    , 'E:/NetProjects/测试项目/Halcon/素材/chepai1.jpg') * 生成一个仿射变换矩阵(齐次矩阵) hom_mat2d_identity (HomMat2DIdentity...Py:(输入参数)原始点组的y坐标 Qx:(输入参数)变换的目的点组的x坐标 Qy:输入参数)变换的目的点组的y坐标 HomMat2D:(输出参数)输出仿射变换矩阵 * 生成椭圆形...,支持旋转、平移和缩放 Px:(输入参数)原始点组的x坐标 Py:(输入参数)原始点组的y坐标 Qx:(输入参数)变换的目的点组的x坐标 Qy:(输入参数)变换的目的点组的y坐标 HomMat2D:(输出参数...x坐标 Py:(输入参数)原始点组的y坐标 Qx:(输入参数)变换的目的点组的x坐标 Qy:(输入参数)变换的目的点组的y坐标 HomMat2D:(输出参数)输出仿射变换矩阵...Theta, Tx, Ty) 功能:根据仿射变换矩阵(齐次二维变换矩阵)计算仿射变换参数 HomMat2D (输入参数):仿射变换矩阵 Sx (输出参数):x

    1.7K32

    视觉进阶 | Numpy和OpenCV中的图像几何变换

    人工生成更多数据的一种方法是对输入数据随机应用仿射变换(增强)。 在本文中,我将向你介绍一些变换,以及如何在Numpy和OpenCV中执行这些变换。特别是,我将关注二维仿射变换。...你需要的是一些基本的线性代数知识。 仿射变换的类型 在不涉及太多数学细节的情况下,变换的行为由仿射A中的一些参数控制。...x’ = Ax 其中A是在齐次坐标系中的2x3矩阵或3x3,x是在齐次坐标系中的(x,y)或(x,y,1)形式的向量。这个公式表示A将任意向量x,映射到另一个向量x’。...一般来说,仿射变换有6个自由度。根据参数的值,它将在矩阵乘法后扭曲任何图像。变换后的图像保留了原始图像中的平行直线(考虑剪切)。本质上,满足这两个条件的任何变换都是仿射的。...换言之,我们可以组合2个或更多的变换:向量加法表示平移,矩阵乘法表示线性映射,只要我们用齐次坐标表示它们。

    2.3K20

    番外篇: 仿射变换与透视变换

    仿射变换 基本的图像变换就是二维坐标的变换:从一种二维坐标(x,y)到另一种二维坐标(u,v)的线性变换: image.png 如果写成矩阵的形式,就是: image.png 作如下定义: image.png...矩阵T(2×3)就称为仿射变换的变换矩阵,R为线性变换矩阵,t为平移矩阵,简单来说,仿射变换就是线性变换+平移。...变换后直线依然是直线,平行线依然是平行线,直线间的相对位置关系不变,因此非共线的三个对应点便可确定唯一的一个仿射变换,线性变换4个自由度+平移2个自由度→仿射变换自由度为6。...(练习) 其实平移、旋转、缩放和翻转等变换就是对应了不同的仿射变换矩阵,下面分别来看下。...image.png 这次我写成齐次矩阵的形式: image.png 其中, \left\[ \begin{matrix} a\_1 & b\_1 \newline a\_2 & b\_2 \newline

    2.1K10

    仿射变换,透视变换:二维坐标到二维坐标之间的线性变换,可用于landmark人脸矫正。

    仿射变换: 仿射变换是一种二维坐标到二维坐标之间的线性变换,并保持二维图形的“平直性”。转换前平行的线,在转换后依然平行。...: 透视变换需要3×3的变换矩阵,直线在变换后还是保持直线。...为了构造变换矩阵,你需要输入图像的4个点和对应的要输出图像的4个点;要求这4个点其中3个点不共线。使用cv2.getPerspectiveTransform函数构造透视变换矩阵。...plt.imshow(img),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show() 还可以参考:仿射变换和透视变换...还可以用下面代码鼠标获取四个点进行仿射变换: # -*- coding: utf-8 -*- import numpy as np import cv2 def gen_point(event,x

    2.5K60

    10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像

    1.几何变换的基本概念   图像几何变换又称为图像空间变换,它将一副图像中的坐标位置映射到另一幅图像中的新坐标位置。我们学习几何变换就是确定这种空间映射关系,以及映射过程中的变化参数。...2.3 仿射变换   我们除了自己写相关函数外,OpenCV还提供了对应的仿射变换的API接口函数warpAffine,仿射变换是指在向量空间中进行一次线性变换(乘以一个矩阵)并加上一个平移(加上一个向量...应用图像仿射变换矩阵,可以得到大部分的几何变换结果,例如之前提到的平移变换等,根据平移变换矩阵可以很容易的得到实现平移功能的仿射变换矩阵,如下所示: ?...对于图像缩放来说,设水平方向的缩放因子为a,垂直方向缩放因子为b,则用仿射矩阵实现图缩放功能的仿射矩阵为: ? 而对于图像旋转来说,设旋转角度为θ,利用仿射变换实现图像旋转操作的仿射矩阵为: ?...需要注意的是,在OpenCV中使用仿射变换函数时,通常会先计算一个仿射变换矩阵,以此来获得仿射变换矩阵,为了实现这个功能,常常使用getRotationMatrix2D()函数用来计算二维旋转矩阵,这个变换会将旋转中心映射到它自身

    3.8K51

    空间变换是什么_信号与系统状态转移矩阵

    仿射变换又称为图像仿射映射,可以认为是透视变换的一种特殊情况,是透视变换的子集,仿射变换是从二维空间到自身的映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间,也就是图像仿射变换等于图像线性变换和平移的组合...src对应列表中 dst:目标图像中相应三角形顶点的坐标,也就是三个点在变换后图像中的坐标列表,要求与源图像三个点一一对应 retval返回值:从三对对应的点计算出来的仿射变换矩阵 2、warpAffine...按照OpenCV官方介绍,getRotationMatrix2D得到的矩阵为: 绕指定点旋转进行组合变换时,参考点p(m,n)顺时针旋转θ的组合变换的齐次坐标表示公式为: 上述公式中θ为正表示是顺时针旋转...而缩放的齐次坐标表示公式为: 用缩放矩阵左乘平移矩阵则可以得到顺时针旋转同时进行缩放的齐次坐标表示公式: 当等比例缩放且缩放因子等于s时,上述公式中的kx、ky使用s替换。...这里的Grid采样过程,对于二维仿射变换(旋转,平移,缩放)来说,就是简单的矩阵运算。 上式中,s代表原始图的坐标,t代表目标图的坐标。

    97030

    第4章-变换-4.0

    对于计算机图形从业者来说,掌握变换是极其重要的。使用它们,您可以定位、重塑对象、灯光和相机并为其设置动画。您还可以确保所有计算都在同一坐标系中执行,并以不同方式将对象投影到平面上。...将函数保持在迄今为止使用的简单形式中,很难轻松地将它们组合起来。 可以使用仿射变换来组合线性变换和平移,通常存储为 矩阵。仿射变换是先执行线性变换然后再进行平移的变换。...为了表示四元素向量,我们使用齐次符号,以相同的方式表示点和方向(使用粗体小写字母)。方向向量表示为 ,点表示为 。...在本章中,我们将广泛使用 realtimerendering.com 上可下载的线性代数附录中解释的术语和操作。 所有平移、旋转、缩放、反射和剪切矩阵都是仿射矩阵。...仿射矩阵的主要特征是它保留了线的平行度,但不一定保留了长度和角度。仿射变换也可以是单个仿射变换的任何级联序列。 本章将从最基本的仿射变换开始。本节可以看作是简单转换的“参考手册”。

    90870

    图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像处理笔

    2.3 仿射变换   我们除了自己写相关函数外,OpenCV还提供了对应的仿射变换的API接口函数warpAffine,仿射变换是指在向量空间中进行一次线性变换(乘以一个矩阵)并加上一个平移(加上一个向量...一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1....应用图像仿射变换矩阵,可以得到大部分的几何变换结果,例如之前提到的平移变换等,根据平移变换矩阵可以很容易的得到实现平移功能的仿射变换矩阵,如下所示: ?...对于图像缩放来说,设水平方向的缩放因子为a,垂直方向缩放因子为b,则用仿射矩阵实现图缩放功能的仿射矩阵为: ? 而对于图像旋转来说,设旋转角度为θ,利用仿射变换实现图像旋转操作的仿射矩阵为: ?...需要注意的是,在OpenCV中使用仿射变换函数时,通常会先计算一个仿射变换矩阵,以此来获得仿射变换矩阵,为了实现这个功能,常常使用getRotationMatrix2D()函数用来计算二维旋转矩阵,这个变换会将旋转中心映射到它自身

    10.6K31

    【计算机视觉】二、图像形成:2、几何基元和几何变换:2D变换

    一、向量和矩阵的基本运算 【计算机视觉】二、图像形成:1、向量和矩阵的基本运算:线性变换与齐次坐标 二、几何基元和变换 1、几何基元(Geometric Primitives)   几何基元是计算机图形学中最基本的图形对象...仿射变换(Affine Transformation): 包括相似变换、缩放、反射和剪切。...bmatrix}sR & t\end{bmatrix}x 其中s为等比例缩放因子,R为旋转矩阵 仿射变换 二维仿射: x' = \begin{bmatrix}a_{00} & a_{01}...不同类型的变换矩阵在形式和自由度上有所区别,平移矩阵比较简单,相似变换增加了缩放,仿射变换支持非等比缩放和错切,而射影变换是最通用的。矩阵的秩决定了变换的自由度和约束条件。...最右侧的图标展示了了这些变换所保留的不变性:平移保留方向、刚体保留长度、相似保留角度、仿射保留平行线、射影只保留直线不变。

    23510

    OpenGL学习笔记 (三)- 坐标系与顶点变换

    这些内容主要是关于线性代数和投影几何的,是构成之后变换矩阵的基本知识。 齐次坐标系 齐次坐标就是较原先坐标增广1维度的坐标,而齐次坐标所构成的坐标系就是齐次坐标系。...齐次坐标的一个重要的目的就是用于进行仿射变换。在线性代数中,我们可以通过一个矩阵来代表一个变换,比如如下的矩阵可以拉伸一个坐标(或向量)。...因此,为了平移一个坐标,我们需要在更高阶的空间进行操作。我们可以把一个三维空间的坐标增广写为 ,这样平移操作就可以表示为 这样我们就可以写出任何代表仿射变换的矩阵了。...在OpenGL中,我们使用齐次坐标来描述一个顶点的位置,因此模型矩阵是一个4阶方阵。 一般来说,模型矩阵是一系列仿射变换的合成,而且通常会包括平移 、旋转 和缩放 。...之前我们已经介绍过齐次坐标在仿射变换中的应用,现在简单介绍齐次坐标在投影几何中的应用。仿射变换中,齐次坐标的w分量通常是1。

    4K21

    66. 三维重建——相机几何模型和投影矩阵

    当我们用齐次坐标表达一个点时,我们只需要加入一个不为0的第三个坐标,就很容易用1个三维矩阵来表达平移了。...采用齐次坐标,我们很容易将各种二维变换统一到一起,用矩阵来表达这种变换: 2.2 三维变换和齐次坐标表达 在讨论相机成像时,我们需要处理三维空间中的点。因此我们来看看三维点的齐次坐标和相关的变换。...从世界坐标系到相机坐标系的变化包括两步: - 坐标原点平移到光心 - 各个世界坐标轴经3维旋转到和相机坐标轴对齐 所以这是一个先平移,再旋转的操作,用非齐次坐标表示时,是这样的: 而如果用齐次坐标表达...要构成这样的投影关系也比较容易,只需要用透镜成像+小孔成像即可。这种相机我们称为仿射相机 那么仿射相机的投影矩阵是什么呢?...仿射相机的投影矩阵的最后一行可以转换为[0 0 0 1],这是它最大的特点。 如果上图中Zo=1,会如何呢?

    2.7K20

    网页CAD二次开发(在线CAD SDK)用到的数学库

    pt1.subvec(vet)// 简写pt1.sv(vet)什么是仿射变换仿射变换简单来说就是“线性变换 + 平移”,比如对元素设置 CSS 的 transform 属性就是对元素应用仿射变换,而几何图形的仿射变换具有以下...2 个性质:1、仿射变换前是直线段的,仿射变换后依然是直线段2、对两条直线段 a 和 b 应用同样的仿射变换,变换前后线段长度比例保持不变常见的仿射变换形式包括平移、旋转、缩放以及它们的组合,最简单的就是平移...那根据线性变换的第 2 条性质,我们就能总结出一个通用的线性变换公式,即一个原始向量 P0经过 M1、M2、…Mn 次的线性变换之后得到最终的坐标P,Mxcad的[McGeMatrix3d]类表示3D空间的仿射变换...,通常情况下需要将平移、旋转、缩放等组合形成的各种复杂的放射变换都通过线性变换来表示,我们只需要将原本 n 维的坐标转换为了 n+1 维的坐标,这种 n+1 维坐标被称为齐次坐标,对应的矩阵就被称为齐次矩阵...McGeMatrix3d 也是齐次矩阵, 可以直接通过McGeMatrix3d 进行各种线性变换,最终再通过向量的`transformBy`方法应用这个仿射变换。

    9910
    领券