三维空间中直角坐标与球坐标的相互转换
三维直角坐标系
三维直角坐标系是一种利用直角坐标(x,y,z)来表示一个点 P 在三维空间的位置的三维正交坐标系。
注:本文所讨论的三维直角坐标系,默认其x-轴、y-轴、z-轴满足右手定则(如右图所示)。
在三维空间的任何一点 P ,可以用直角坐标(x,y,z)来表达其位置。如左下图显示了三维直角坐标的几何意义:点P在x-轴、y-轴、z-轴上的投影距离分别为x、y、z。如右下图所示,两个点 P 与 Q 的直角坐标分别为(3,0,5)与(-5,-5,7) 。
球坐标系
球坐标系是一种利用球坐标(r,θ,φ)来表示一个点 P 在三维空间的位置的三维正交坐标系。
下图描述了球坐标的几何意义:原点O与目标点P之间的径向距离为r,O到P的连线与正z-轴之间的夹角为天顶角θ,O到P的连线在xy-平面上的投影线与正x-轴之间的夹角为方位角φ。
假设 P 点在三维空间的位置的三个坐标是 。那么, 0 ≤ r 是从原点到 P 点的距离, 0 ≤ θ ≤ π 是从原点到 P 点的连线与正 z-轴的夹角, 0 ≤ φ < 2π 是从原点到 P 点的连线在 xy-平面的投影线,与正 x-轴的夹角。当 时, 与 都一起失去意义。当 或 时, 失去意义。
三维空间下直角坐标与球坐标的相互转换
直接坐标转球坐标
、
、
。
球坐标转直角坐标
、
、
。
基于Flex的坐标转换实现
直角坐标定义类CartesianCoord.cs
package hans_gis.coord {public class CartesianCoord{public var x:Number;public var y:Number;public var z:Number;static private var temp:CartesianCoord = CartesianCoord.ZERO;public function CartesianCoord(x:Number=0, y:Number=0, z:Number=0){this.x = x;this.y = y;this.z = z;}public function clone():CartesianCoord{return new CartesianCoord(this.x, this.y, this.z);}public function copyTo(n:CartesianCoord):void{n.x = this.x;n.y = this.y;n.z = this.z;}public function copyFrom(n:CartesianCoord):void{this.x = n.x; this.y = n.y; this.z = n.z; }public function reset(newx:Number = 0, newy:Number = 0, newz:Number = 0):void{this.x = newx; this.y = newy; this.z = newz; }static public function get ZERO():CartesianCoord{return new CartesianCoord(0, 0, 0);}} }
球坐标定义类SphericalCoord.cs
package hans_gis.coord {public class SphericalCoord{public var radius:Number;public var theta:Number;public var phi:Number;static private var temp:SphericalCoord = SphericalCoord.ZERO;public function SphericalCoord(radius:Number=0, theta:Number=0, phi:Number=0){this.radius = radius;this.theta = theta;this.phi = phi;}public function clone():SphericalCoord{return new SphericalCoord(this.radius, this.theta, this.phi);}public function copyTo(n:SphericalCoord):void{n.radius = this.radius;n.theta = this.theta;n.phi = this.phi;}public function copyFrom(n:SphericalCoord):void{this.radius = n.radius; this.theta = n.theta; this.phi = n.phi; }public function reset(newradius:Number = 0, newtheta:Number = 0, newphi:Number = 0):void{this.radius = newradius; this.theta = newtheta; this.phi = newphi; }static public function get ZERO():SphericalCoord{return new SphericalCoord(0, 0, 0);}} }
坐标转换定义类CoordsTransform.cs
package hans_gis.coord {public class CoordsTransform{public function CoordsTransform(){}public function CartesianToSpherical(coord:CartesianCoord):SphericalCoord{var radius = this.GetModuloFromCartesianCoord(coord);var theta = this.GetThetaFromCartesianCoord(coord);var phi = this.GetPhiFromCartesianCoord(coord);return new SphericalCoord(radius, theta, phi);}protected function GetModuloFromCartesianCoord(coord:CartesianCoord):Number{return Math.sqrt( coord.x*coord.x + coord.y*coord.y + coord.z*coord.z );}protected function GetThetaFromCartesianCoord(coord:CartesianCoord):Number{ // return Math.atan(Math.sqrt(coord.x*coord.x + coord.y*coord.y)/coord.z);return Math.acos(coord.z/this.GetModuloFromCartesianCoord(coord));}protected function GetPhiFromCartesianCoord(coord:CartesianCoord):Number{return Math.atan(coord.y/coord.x);}public function SphericalToCartesian(coord:SphericalCoord):CartesianCoord{var x = this.GetXFromSphericalCoord(coord);var y = this.GetYFromSphericalCoord(coord);var z = this.GetZFromSphericalCoord(coord);return new CartesianCoord(x, y, z);}protected function GetXFromSphericalCoord(coord:SphericalCoord):Number{return coord.radius*Math.sin(coord.theta)*Math.cos(coord.phi);}protected function GetYFromSphericalCoord(coord:SphericalCoord):Number{return coord.radius*Math.sin(coord.theta)*Math.sin(coord.phi);}protected function GetZFromSphericalCoord(coord:SphericalCoord):Number{return coord.radius*Math.cos(coord.theta);}} }
实例运行结果
附:实例下载
转载于:https://www.cnblogs.com/hans_gis/archive/2012/11/21/2755126.html
三维空间中直角坐标与球坐标的相互转换相关推荐
- c语言中直角坐标求极径极角,极坐标与参数方程基础知识附重点题型
高中数学回归课本校本教材24 (一)基础知识 参数极坐标 1.极坐标定义:M 是平面上一点,ρ表示OM 的长度,θ是M Ox ∠,则有序实数实数对(,)ρθ,ρ叫极径,θ叫极角:一般地,[0,2)θπ ...
- matlab直角坐标转换极坐标,matlab-在MATLAB中怎么将直角坐标转化为极坐标 – 手机爱问...
Cad中直角坐标和极坐标格式分别是什? CAD中的坐标就是根据数学来使用的.具体说起来有以下几种: 第一,就是常说的笛卡尔坐标,也是最常用的一种,输入格式为(x,y,z),当然在平面问题中就不必输入z ...
- 复变函数 | 第一部分 复数
文章目录 1.1\quad复数的定义 1.2\quad复数的计算与性质 1.2.1\quad复数的计算 1.2.2\quad复数的性质 1.2.3\quad复数的模 1.2.4\quad共轭复数 1. ...
- java 处理pdb文件格式_科学网—PDB文件格式说明 - 李继存的博文
2015-06-05 20:31:19 2017-01-22 20:09:21 据参考资料增补 PDB(Protein Data Bank)是一种标准文件格式, 其中包含原子的坐标等信息, 提交给 P ...
- java 处理pdb文件格式_PDB(Protein Data Bank)数据格式详解
PDB(Protein Data Bank)是一种标准文件格式, 其中包含原子的坐标等信息, 提交给 Protein Data Bank at the Research Collaboratory f ...
- 读懂蛋白质PDB文件
对于从事生物行业的朋友们来说,PDB文件和蛋白质结构是很多人绕不过去的问题.然而对于天天跑电泳过柱子的生物狗来说,PDB文件打开后与天书无异.这里,我转载一篇网上看到的关于PDB文件内记号说明的文章, ...
- 从零开始一起学习SLAM | 三维空间刚体的旋转
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 刚体,顾名思义,是指本身不会在运动过程中产生形变的物体,如相机的运 ...
- 空间中球坐标与直角坐标的互化(matlab实现)
目录(觉得不错请三连支持一下) 前言 直角坐标系 球坐标系 互换关系 直角坐标转球坐标 球坐标转直角坐标 代码实现 直角坐标转球坐标 球坐标转直角坐标 试验 前言 坐标系有很多,空间中我们常用的坐标系 ...
- 关于极坐标体系思想在三维空间的延伸
灵感的来源 下面提到的数字,单位均为毫米 来自建筑制图练习册24页第12题,做题过程中无意间想到以极坐标的思想来完成该题目. 此为原题. 原题标准答案采用直角三角形法的变式,但是我这里还想提出另外一种 ...
最新文章
- 不要再自己封装各种Util工具类了,这款神仙级框架你值得拥有!
- 连载《一个程序猿的生命周期》-27、新招的两位“高管”相继离职
- Know more about AWR Parse Statistics
- React开发(264):react使用国际化
- oracle rac 创建ocr,转:Oracle RAC 添加和删除OCR(10g)
- 最近邻插值算法 python实现
- OpenGL与gl glu glut freeglut glew glfw封装库关系(十五)
- mysql数据词典生成markdown_老板让我把数据库字典导出到Markdown格式的文件
- 数据结构试题期中期末考试【含答案】
- win10安装双系统
- SAP中多层扩展有效地bom
- 【BIEE】15_时间维度建立
- windows 2012下安装.NET框架时出现组件的文件跟组件清单中的验证信息不匹配,无法安装
- 京东EB级全域大数据平台的演进与治理历程
- Qt开发技术:QDBus介绍、编译与Demo
- 极狐GitLab Helm Registry 的使用
- 网页版 linux终端,网页版的Linux-大神之笔
- Flask asyncio 异步处理请求
- 电脑是台式的,开机的时候,滴滴滴滴一直响,开不了机!(好用)
- python3中文编码转换显示