AffineTransformations仿射变化
1. Affine Transformations 仿射变化
1.1. ST_Affine
ST_Affine
-对几何图形应用三维仿射变换。
1.1.1. 概要
geometry ST_Affine(geometry geomA, float a, float b, float c, float d, float e, float f, float g, float h, float i, float xoff, float yoff,
float zoff);
geometry ST_Affine(geometry geomA, float a, float b, float d, float e, float xoff, float yoff);
1.1.2. 描述
应用三维仿射变换到几何图形,可以在一步内完成平移、旋转、缩放等操作。
ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff)
- 表示变换矩阵
/ a b c xoff \
| d e f yoff |
| g h i zoff |
\ 0 0 0 1 /
- 顶点变换如下:
x' = a*x + b*y + c*z + xoff
y' = d*x + e*y + f*z + yoff
z' = g*x + h*y + i*z + zoff
下面所有的平移/缩放函数都是通过这样的仿射变换表示的。
版本2:对几何图形应用二维仿射变换。调用
ST_Affine(geom, a, b, d, e, xoff, yoff)
- 表示变换矩阵
/ a b 0 xoff \ / a b xoff \
| d e 0 yoff | rsp. | d e yoff |
| 0 0 1 0 | \ 0 0 1 /
\ 0 0 0 1 /
顶点变换如下:
x' = a*x + b*y + xoff
y' = d*x + e*y + yoff
z' = z
在1.3.4之前,如果与包含CURVES的几何图形一起使用,这个函数会崩溃。这在1.3.4+中得到了修正
1.1.3. 样例
- 将一条三维直线绕z轴旋转180度。注意,这是执行ST_Rotate()的长手操作;
--Rotate a 3d line 180 degrees about the z axis. Note this is long-hand for doing ST_Rotate();
SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0, 1, 0, 0, 0)) As using_affine,ST_AsEWKT(ST_Rotate(the_geom, pi())) As using_rotate FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As the_geom) As foo;
using_affine | using_rotate |
---|---|
LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3) |
- 将一条三维直线在x轴和z轴上旋转180度
SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0))
FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As the_geom) As foo;
st_asewkt |
---|
LINESTRING(-1 -2 -3,-1 -4 -3) |
1.2. ST_Rotate
ST_Rotate
-围绕原点旋转几何图形。
1.2.1. 概要
geometry ST_Rotate(geometry geomA, float rotRadians);
geometry ST_Rotate(geometry geomA, float rotRadians, float x0, float y0);
geometry ST_Rotate(geometry geomA, float rotRadians, geometry pointOrigin);
1.2.2. 描述
围绕原点逆时针旋转几何体。旋转原点可以指定为POINT几何图形,也可以指定为x和y坐标。如果未指定原点,则几何图形将围绕点(0 0)旋转。
增强:2.0.0支持多面体曲面,三角形和TIN。
增加了用于指定旋转原点的附加参数。
- 这个函数支持3d并且不会删除z-index。
- 此方法支持圆形字符串和曲线
- 此函数支持多面体曲面。
- 该功能支持三角形和三角形不规则网络表面(TIN)。
1.2.3. 样例
- 180度旋转
SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()));
st_asewkt |
---|
LINESTRING(-50 -160,-50 -50,-100 -50) |
- 在x=50 y=160处逆时针旋转30度
SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()/6, 50, 160));
st_asewkt |
---|
LINESTRING(50 160,105 64.7372055837117,148.301270189222 89.7372055837117) |
- 从质心开始顺时针旋转60度
SELECT ST_AsEWKT(ST_Rotate(geom, -pi()/3, ST_Centroid(geom))) FROM (SELECT 'LINESTRING (50 160, 50 50, 100 50)'::geometry AS geom) AS foo;
st_asewkt |
---|
LINESTRING(116.4225 130.6721,21.1597 75.6721,46.1597 32.3708) |
1.3. ST_RotateX
ST_RotateX
-绕X轴旋转几何图形。
1.3.1. 概要
geometry ST_RotateX(geometry geomA, float rotRadians);
1.3.2. 描述
绕X轴旋转几何体geomA - rotRadians。
- 此函数支持多面体曲面。
- 这个函数支持3d并且不会删除z-index。
- 该功能支持三角形和三角形不规则网络表面(TIN)。
1.3.3. 样例
- 沿x轴旋转一条线90度
SELECT ST_AsEWKT(ST_RotateX(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
st_asewkt |
---|
LINESTRING(1 -3 2,1 -1 1) |
1.4. ST_RotateY
ST_RotateY
-绕Y轴旋转几何图形
1.4.1. 概要
geometry ST_RotateY(geometry geomA, float rotRadians);
1.4.2. 描述
绕y轴旋转几何体geomA - rotRadians
- 此函数支持多面体曲面。
- 这个函数支持3d并且不会删除z-index。
- 该功能支持三角形和三角形不规则网络表面(TIN)。
1.5. ST_RotateZ
ST_RotateZ
-绕Z轴旋转几何图形
1.5.1. 概要
geometry ST_RotateZ(geometry geomA, float rotRadians);
1.5.2. 描述
绕Z轴旋转几何体geomA - rotRadians
- 此函数支持多面体曲面。
- 这个函数支持3d并且不会删除z-index。
- 该功能支持三角形和三角形不规则网络表面(TIN)。
1.5.3. 样例
- 沿z轴旋转一条线90度
SELECT ST_AsEWKT(ST_RotateZ(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
st_asewkt |
---|
LINESTRING(-2 1 3,-1 1 1) |
- 绕z轴旋转一个弯曲的圆
SELECT ST_AsEWKT(ST_RotateZ(the_geom, pi()/2)) FROM (SELECT ST_LineToCurve(ST_Buffer(ST_GeomFromText('POINT(234 567)'), 3)) As the_geom) As foo;
st_asewkt |
---|
CURVEPOLYGON(CIRCULARSTRING(-567 237,-564.87867965644 236.12132034356,-564 234,-569.12132034356 231.87867965644,-567 237)) |
1.6. ST_Scale
ST_Scale
-根据给定的因子缩放几何图形
1.6.1. 概要
geometry ST_Scale(geometry geomA, float XFactor, float YFactor, float ZFactor);
geometry ST_Scale(geometry geomA, float XFactor, float YFactor);
geometry ST_Scale(geometry geom, geometry factor);
geometry ST_Scale(geometry geom, geometry factor, geometry origin);
1.6.2. 描述
通过将坐标与相应的因子参数相乘,将几何图形缩放到新的大小。
采用几何图形作为因子参数的版本允许通过2d、3dm、3dz或4d点来设置所有支持维度的缩放因子。因子点中缺失的维数等同于不缩放相应的维数。
三几何变体允许传入缩放的“假原点”。这允许“就地缩放”,例如使用几何图形的质心作为假原点。没有假原点,缩放发生相对于实际原点,所以所有坐标都乘以缩放因子
- 此函数支持多面体曲面。
- 这个函数支持3d并且不会删除z-index。
- 此方法支持圆形字符串和曲线
- 该功能支持三角形和三角形不规则网络表面(TIN)。
- 此函数支持M坐标。
1.6.3. 样例
SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75, 0.8));
st_asewkt |
---|
LINESTRING(0.5 1.5 2.4,0.5 0.75 0.8) |
SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75));
st_asewkt |
---|
LINESTRING(0.5 1.5 3,0.5 0.75 1) |
SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)'),ST_MakePoint(0.5, 0.75, 2, -1)));
st_asewkt |
---|
LINESTRING(0.5 1.5 6 -4,0.5 0.75 2 -1) |
SELECT ST_AsText(ST_Scale('LINESTRING(1 1, 2 2)', 'POINT(2 2)', 'POINT(1 1)'::geometry));
st_astext |
---|
LINESTRING(1 1,3 3) |
1.7. ST_Translate
ST_Translate
-通过给定的偏移量转换几何图形。
1.7.1. 概要
geometry ST_Translate(geometry g1, float deltax, float deltay);
geometry ST_Translate(geometry g1, float deltax, float deltay, float deltaz);
1.7.2. 描述
返回一个新的几何图形,其坐标为平移的delta x,delta y,delta z单位。单位是基于空间参考(SRID)中为这个几何定义的单位。
在1.3.4之前,如果与包含CURVES的几何图形一起使用,这个函数会崩溃。这在1.3.4+中得到了修正
1.7.3. 样例
- 移动一个点经度1度
SELECT ST_AsText(ST_Translate(ST_GeomFromText('POINT(-71.01 42.37)',4326),1,0)) As wgs_transgeomtxt;
wgs_transgeomtxt |
---|
POINT(-70.01 42.37) |
- 将linestring移动1度经度和1/2度纬度
SELECT ST_AsText(ST_Translate(ST_GeomFromText('LINESTRING(-71.01 42.37,-71.11 42.38)',4326) ,1,0.5)) As wgs_transgeomtxt;
wgs_transgeomtxt |
---|
LINESTRING(-70.01 42.87,-70.11 42.88) |
- 移动一个3d点
SELECT ST_AsEWKT(ST_Translate(CAST('POINT(0 0 0)' As geometry), 5, 12,3));
st_asewkt |
---|
POINT(5 12 3) |
- 移动一条曲线和一个点
SELECT ST_AsText(ST_Translate(ST_Collect('CURVEPOLYGON(CIRCULARSTRING(4 3,3.12 0.878,1 0,-1.121 5.1213,6 7, 8 9,4 3))','POINT(1 3)'),1,2));
st_astext |
---|
GEOMETRYCOLLECTION(CURVEPOLYGON(CIRCULARSTRING(5 5,4.12 2.878,2 2,-0.121 7.1213,7 9,9 11,5 5)),POINT(2 5)) |
1.8. ST_TransScale
ST_TransScale
-通过给定的偏移量和因子来平移和缩放几何图形。
1.8.1. 概要
geometry ST_TransScale(geometry geomA, float deltaX, float deltaY, float XFactor, float YFactor);
1.8.2. 描述
使用deltaX和deltaY参数转换几何图形,然后使用XFactor和YFactor参数缩放它,只在2D中工作。
1.8.3. 样例
SELECT ST_AsEWKT(ST_TransScale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 1, 1, 2));
st_asewkt |
---|
LINESTRING(1.5 6 3,1.5 4 1) |
- 缓冲一个点来得到一个圆的近似值,转换成曲线,然后平移1,2缩放3,4
SELECT ST_AsText(ST_Transscale(ST_LineToCurve(ST_Buffer('POINT(234 567)', 3)),1,2,3,4));
st_astext |
---|
CURVEPOLYGON(CIRCULARSTRING(714 2276,711.363961030679 2267.51471862576,705 2264,698.636038969321 2284.48528137424,714 2276)) |
AffineTransformations仿射变化相关推荐
- Javascript实现二次多项式仿射变化
Javascript实现二次多项式仿射变化 我之前遇到了这样的问题,用户想要将没有任何坐标信息的图片发布成地图服务,但是又不能对图片进行拉伸等一系列的变换,所以,最终采用的二次多项式做校准,用二次多项 ...
- 20200813-共轭函数的仿射变化
在Convex Optimization的第三章中提到了共轭函数的仿射变化.但是没有具体说明过程,这里推导一下. 参考资料: Convex Optimization: Chapter-3 函数的共轭函 ...
- OpenCV开发笔记(四十六):红胖子8分钟带你深入了解仿射变化(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- 6、随机仿射变化 transforms.RandomAffine()
transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, interpolation=<Interpola ...
- OpenCV 图像处理系列(6)—— 图像的几何变化
图像的几何变换 OpenCV 提供了两个变换函数,cv2.warpAffine 和 cv2.warpPerspective,使用这两个函数你可以实现所有类型的变换.cv2.warpAffine 接收的 ...
- SIFT特征提取算法总结
转自:http://www.jellon.cn/index.php/archives/374 一.综述 Scale-invariant feature transform(简称SIFT)是一种图像特征 ...
- B样条曲线 及 B样条曲面
B样条曲线 在保留Bézie优点的同时,克服了他的弱点:采用样条--分段连续多项式 例如,现在有n+1个点,在每两点之间构造一条多项式,则有n个小区间.每个小区间构造一条三次多项式,变成了n段的三次多 ...
- 读完这45篇论文,“没人比我更懂AI了”
作者 | 黄海广 转载自机器学习爱好者(ID:ai-start-com) 导读:AI领域的发展会是IT中最快的.我们所看到的那些黑科技,其后无不堆积了大量论文,而且都是最新.最前沿的论文.从某种角度来 ...
- 做人工智能必看的45篇论文 | 附下载地址
而AI领域的发展会是IT中最快的.我们所看到的那些黑客技,其后面无不堆积了大量的论文.而且都是最新.最前沿的论文. 从某种调度来讲,他们所用的技术跟书籍里的内容确实不是一个时代.要想与时俱进,就必须改 ...
最新文章
- 使用jmeter测试工具完成文件的上传
- 开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?
- Object构造函数的方法
- windows10大瘦身 - 关闭lync的日志记录
- 【Elasticsearch】es 使用Rollup在Elasticsearch 6.3中合并旧日志 上卷 Rollup
- [专题练习] Part1 搜索
- 【渝粤教育】电大中专计算机使用基础_1作业 题库
- 浏览器网页操作 EXCEL 示例
- 公司小规模纳税人税务零申报操作说明
- EditPlus3.3 集成 SVN
- Unity-世界坐标与屏幕坐标
- LocalDateTime日期格式之间的转换
- rfid考勤系统mysql_RFID智能考勤管理系统
- RS232转RS485电路图
- java正则匹配ip_正则表达式匹配ip地址
- 搭建react + typescript + airbnb eslint 项目
- 【奇葩问题】每次打开excel文件都会出现两个窗口,一个是空白的sheet1,另一个是自己的文档
- vue安装及创建运行
- 二叉树的前中后序遍历(栈)(C++)
- 2023年中央财经大学数量经济学考博必看上岸前辈复习经验分享
热门文章
- 只要你敢,总会有光芒指引你
- Java获取指定日期所在周的周一和周日的日期
- mysql ssh 登陆
- uos系统能做服务器吗,国产操作系统UOS可以用PS,还可以玩英雄联盟?
- Power BI-DAX
- 荣耀8x与华为畅享9s鸿蒙系统,华为畅享9 Plus和荣耀8X哪款更值得买呢?华为畅享9 Plus和荣耀8X区别对比评测...
- Android面试经验总结
- python同切圆_画一组同切圆 画一组同心圆 画一个五角星 画一个黄色实心五角星 turtle.up() turtle.goto(0,-100) turtle.down() ...
- 2018年河南省对口升学计算机基础答案,河南省2018 年计算机类基础课 对口升学考试题.doc...
- Mathtype 公式在word中不对应的问题总结