Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

Python第三方包离线安装

发表于 2019-12-19 | 更新于 2024-01-09

需要在离线的情况下,配置电脑的Python环境,具体方法如下:

  1. 寻找一台与离线电脑架构一致且能上网的干净电脑或虚拟机,在线配置Python环境。
  2. 在线电脑上打包Python环境,拷贝到离线电脑上。
  3. 在离线电脑上安装Python环境。

注意:Python第三方包离线安装可以与python的虚拟环境结合起来,即:

1
python -m venv env

在线配置Python环境

安装Python3之后,使用如下命令安装第三方包:

1
2
# 临时使用清华镜像,加快Python第三方包下载速度
pip3 install -i https://mirrors.aliyun.com/pypi/simple/ matplotlib

打包安装的Python第三方包:

1
2
3
pip3 list #查看安装的包
pip3 freeze >requirements.txt
pip3 download -d C:\Python37\packages -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt

离线配置Python环境

在离线电脑上安装与在线电脑同样版本和架构的Python。注意:3.9版本以上python已不支持Windows7。

将打包好的Python环境拷贝到离线电脑后,使用如下命令安装第三方包:

1
pip install --no-index --find-links=C:\Python37\packages -r requirements.txt

参考链接

  1. pypi 镜像使用帮助,by 清华大学开源软件镜像站.
  2. Python pip离线安装package方法总结(以TensorFlow为例),by 毛帅.
  3. 离线环境安装python第三方库,by 接纳自己.

C++中Cout输出到文件

发表于 2019-12-12

最近在调试一个C++程序时,没有报任何错误就直接退出了,Cout输出到控制台的信息没法查看,无法找到错误原因。于是想到将Cout输出重定向到文件,以便分析错误原因。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>

using namespace std;

int main(){
streambuf *psbuf,*backup;
ofstream file;
file.open("test.txt");
backup=cout.rdbuf();
psbuf=file.rdbuf();

cout.rdbuf(psbuf);//将cout输出重定向到文件
cout<< "This will write to test.txt!";

cout.rdbuf(backup);//恢复cout输出重定向到终端
file.close();
return 0;
}

参考链接

  1. NULL指针、零指针、野指针,by fly1988happy.
  2. C++ Null 指针,by w3cschool.
  3. How to redirect cin and cout to files?,by stackoverflow.

红外点源目标探测仿真

发表于 2019-12-11

红外点源目标探测仿真过程中遇到两个问题:一是哪些目标重合到一块,二是如何计算重合目标的中心和半径。这两个问题可分别通过计算图连通分量的算法和最小圆覆盖算法解决。

参考链接

  1. 最小圆覆盖(经典算法【三点定圆),by Coco_T_.
  2. 利用邻接矩阵求解无向图的连通分支的个数,by EsonJohn.
  3. 使用向量叉乘判断线段是否相交并求交点,by leto.
  4. 图的那点事儿(1)-无向图,by SylvanasSun.

C++矩阵的存储方法接出存储方法-行主序与列主序

发表于 2019-12-11

最近要设计一个C++矩阵类,涉及到矩阵元素的存储。根据矩阵元素的存储,通常分为行主序和列主序。

  • 行主序是指以行为优先单位,在内存中逐行存储;

  • 列主序是指以列为优先单位,在内存中逐列存储。

行主序与列主序的代码实现有一定的惯例,表现如下:

  • 行主序以二维数组存储,列主序以一维数组存储;
  • 行主序以二维数组方式命名初始化参数,列主序以一维数组方式命名初始化参数;
  • 行主序以行为单位初始化,列主序以列为单位初始化;

参考链接

  1. OpenGL中矩阵的行主序与列主序,by 天律界中子.

GSL插值函数编译链接出错解决方法

发表于 2019-12-11 | 更新于 2022-07-16

在Windows平台使用VS2017社区版将开源数学库GSL编译链接成DLL后,使用官方示例测试其插值函数。在编译链接该示例过程中报

LNK2001: unresolved external symbol _gsl_interp_cspline

的错误。

解决方法如下,在示例开始处定义如下宏即可。

#define GSL_DLL

完整可运行示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#define GSL_DLL

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_spline.h>

int
main (void)
{
int i;
double xi, yi, x[10], y[10];

printf ("#m=0,S=17\n");

for (i = 0; i < 10; i++)
{
x[i] = i + 0.5 * sin (i);
y[i] = i + cos (i * i);
printf ("%g %g\n", x[i], y[i]);
}

printf ("#m=1,S=0\n");

{
gsl_interp_accel *acc
= gsl_interp_accel_alloc ();
gsl_spline *spline
= gsl_spline_alloc (gsl_interp_cspline, 10);

gsl_spline_init (spline, x, y, 10);

for (xi = x[0]; xi < x[9]; xi += 0.01)
{
yi = gsl_spline_eval (spline, xi, acc);
printf ("%g %g\n", xi, yi);
}
gsl_spline_free (spline);
gsl_interp_accel_free (acc);
}
return 0;
}

参考链接

  1. Interpolation,by gsl homepage.
  2. [Help-gsl] LNK2001: unresolved external symbol _gsl_interp_cspline,by lists.gnu.org.
  3. [Help-gsl] Re: LNK2001: unresolved external symbol _gsl_interp_cspline,by lists.gnu.org.
  4. C++求积分代码,by Firekisser.
  5. matlab代码—插值,by 从小练武功.

企事业单位IT架构的涅槃与重生之中台

发表于 2019-12-08 | 更新于 2019-12-11

近年来,企事业单位IT建设如火如荼,取得了很多的成果,极大地提高了企事业单位的工作效率。但同时企事业IT建设中存在的数据管理问题、业务管理问题不容忽视。在企事业单位IT建设的早期,项目之间没有整体规划,缺乏统一管理,造成数据孤岛、数据标准化缺失、数据存储杂乱、数据使用泛滥等数据管理问题,同时业务方面也存在重复建设、人亡政息、部门分割、多头管理等业务管理问题。中台架构即是针对上述问题,对企事业IT建设的涅槃和重生。

中台由来

在传统企业IT架构中,通常分成前台和后台。前台即包括各种和用户直接交互的界面,比如web页面、手机app;也包括服务端各种实时响应用户请求的业务逻辑,比如商品查询、订单系统等等。而后台并不直接面向用户,而是面向运营人员的配置管理系统,比如商品管理、物流管理、结算管理。后台为前台提供了一些简单的配置。

在企业竞争不够激烈时,这种IT架构能够满足用户需求,虽然易造成数据冗余、数据孤岛、数据杂乱等问题。而今天随着互联网的蓬勃发展,企业竞争越来越激烈,用户也越来越挑剔。只有以用户为中心,快速影响用户的需求,不断迭代和试错,才能让企事业在竞争当中立于不败,才能更加满足用户的需求。于是中台架构应运而生。

中台架构本质上是对传统前后台IT架构的重构,尤其是后台的重构。在传统的IT架构中,通常会遇到如下两类问题:

  • 一类是,许多业务需求或功能需求高度类似、通用化程度很高,但是由于没有专门的团队负责规划和开发,大量的系统重复开发、重复建设,导致复用性低、效率低、产研资源浪费、用户体验不统一。
  • 另一类是,早期业务发展过程中,为了解决一些当下的业务问题,垂直的、个性化的业务逻辑与基础系统耦合太深,由于没有平台性质的规划,横向系统之间、上下游系统之间的交叉逻辑也非常多,这样导致在新业务、新市场的拓展过程中,系统没法直接复用,甚至没法快速迭代。

这两类问题,在软件开发领域,有专门的名称,叫做“重复造轮子”和“烟囱式架构”。中台的诞生即为了避免“重复造轮子”的尴尬和“烟囱式架构”的无序发展。

中台是真正为前台而生的平台(可以是技术平台,业务能力甚至是组织机构),它存在的唯一目的就是更好的服务前台规模化创新,进而更好的响应服务引领用户,使企业真正做到自身能力与用户需求的持续对接。

中台就像是在前台与后台之间添加的⼀组“变速⻮轮”,将前台与后台的速率进行匹配,是前台与后台的桥梁。它为前台而生,易于前台使用,将后台资源顺滑流向用户,响应用户。

中台价值

中台的存在价值是为它的客户服务,比如业务中台和数据中台要快速响应前台应用的需求。中台建设的价值,在于帮助企业搭建更加适应企业数字化转型的全新IT架构。或者说,中台架构本身就是企业全新IT架构的核心内容和骨干系统,让企业IT运营更加顺畅,更能帮助企业尝试新的商业模式,完成战略转型的目的。

中台构建

根据功能和角色的不同,中台可分为:

  • 业务中台:通过各个项目的共通业务进行下沉,整合成通用的服务平台。
  • 技术中台:为了避免研发人员重复发明轮子,向各个项目提供通用的底层框架、引擎、中间件。
  • 数据中台:为各个项目进行各种数据采集和分析。
  • 算法中台:为各个项目提供算法能力,比如推荐算法、搜索算法、图像识别、语音识别等等。

参考链接

  1. 漫画:什么是中台?,by 程序员小灰.
  2. 互联网公司中所谓中台是怎么定义的?,by zhihu.
  3. 白话中台战略:中台是个什么鬼?,by 王健.
  4. 中台战略全解读(一):中台的发展与进化,by 陈新宇等.

三阶魔方复原方法简介

发表于 2019-11-30 | 更新于 2019-12-02

魔方作为家喻户晓的益智玩具,由匈牙利建筑学教授暨雕塑家鲁比克·艾尔内于1974年发明,最初的名称叫Magic Cube[2],1980年Ideal Toys公司于贩售此玩具,并将名称改为Rubik’s Cube。下面简要介绍魔方复原的方法。

魔方公式书写方式

为了记录下复原、转乱的过程或公式的步骤,会用Singmaster符号来书写(由David Singmaster发明)。书写方式如下:

  • R(Right)、L(Left)、U(Up)、D(Down)、F(Front)、B(Back)分别代表右、左、上、下、前、后层。
  • 若是顺时针旋转,则直接写上符号;若是逆时针旋转,则在符号后加上“’”或是“i”;若是旋转180°,则在符号后加上“2”或是“²”。

魔方数学方程式

变化数

三阶魔方的总变化数是:

$${\displaystyle {\frac {8!\times 3^{8}\times 12!\times 2^{12}}{2\times 2\times 3}}=43,!252,!003,!274,!489,!856,!000\approx 4.33\times 10^{19}}$$

三阶魔方总变化数的算式是这样得来:

  • 8个角块可以互换位置(${\displaystyle 8!}$),也可以旋转(3),但不能单独旋转一个角块,所以总共有${\displaystyle {\frac {8!\times 3^{8}}{3}}}$种变化状态。

  • 12个边块可以互换位置($12!$),也可以翻转(2),但不能单独翻转一个边块(将两个面对调),也不能单独交换两边块,所以总共有${\displaystyle {\frac {12!\times 2^{12}}{2\times 2}}}$种变化状态。

上帝的数字

所有的三阶魔方都可以在有限步数内复原,1982年,佛雷与辛马斯特合著的《魔方手册》定义任意的三阶魔方都可以保证最少n步复原,并称呼n为上帝的数字。在此书中,证明上帝的数字介于17~52之间。

1995年,瑞德证明上帝的数字介于20-29之间。2006年,雷杜用群论证明上界可改进为27。

2007年,计算机科学家古柏曼与他的学生用20台超级电脑花了8000个小时证明上界可改进为26。

2008年,Tomas Rokicki宣布证明了任何魔方可以在25步以内解开[22]。之后又改进为22步。

2010年,包括Tomas Rokicki和Morley Davidson等人的研究团队证明任意组合的魔方可以在20步内还原,现在上帝的数字正式定为20。

魔方复原方法

以白色面为例,说明魔方复原的简单方法。

第一步白色面的复原

第一步白色面的复原非常简单,分成两小步,如图1和图2所示。

解决白色边缘

图1 解决白色边缘

解决白色角落

图2 解决白色角落

白色面的还原比较简单,就不介绍具体步骤了。

第二步中间层的复原

第二步中间层的复原分成两种情况,如图3和图4所示。

中间层左侧边块的复原

U' L' U L U F U' F'
图3 中间层左侧边块的复原

中间层右侧边块的复原

U R U' R' U' F' U F
图4 中间层右侧边块的复原

第三步顶层的复原

第三步最后一层的还原遇到的情况很多,目前我也没有完全搞明白,下面简单介绍最后一层复原的步骤,但并不能保证一定能复原。

形成顶层十字

顶层十字的复原

F R U R' U' F'
图5 顶层十字的复原

根据顶层状态,多次使用公式F R U R’ U’ F’,以形成顶部十字。

交换顶层十字边块

交换顶层边块,使其边缘颜色保持一致,如图6所示。

交换顶层边块

R U R' U R U2 R' U
图6 交换顶层边块

交换顶层角块

现在只剩下黄色的角落,将分两个步骤进行。首先,我们必须以定位它们,在下一步骤中定向它们。

定位顶层角块

定位顶层角块

U R U' L' U R' U' L
图7 定位顶层角块

此算法循环上面图像上顶层的角块,但标有“OK”的前右上角将保留在原位。

定向顶层角块

现在顶层角块都已定位,但角块颜色与周围面不一致,使用如图8所示算法一个一个旋转顶层角块。

定向顶层角块

R' D' R D
图8 定向顶层角块

首先在突出显示的右前方点,拿着你的手有一个不对准的黄色角落的立方体(见图8)。重复R’ D’ R D算法,直到这一块在它的地方与黄色贴纸。

只将一面向上转动,将另一个错误的黄色拐角移到突出显示的点,并重复R’ D’ R D算法,直到这个黄色面被解决。

移动其他未对齐的黄色边角,一个一个到标记的点,并做公式,直到所有的黄色角落都被解决。

顶层最后两个角块位置对颜色不对的复原方法

将色向不对的两个角放在顶层左手边位置,用公式(R;U;R’;U;R;U2;R’;)(L’;U’;L;U’;L’;U2;L;)。

做一遍如果不对的话,就再做一遍就行了.

参考链接

  1. 如何解决魔方 魔方,by cub3x3.
  2. 三阶魔方解法最后两个角如何复原?位置是对的只是颜色对不住?,by qiuyuhanfeng.
  3. 魔方,by wikipedia.
  4. 暴强!!!只需7步,任何魔方6面皆可还原!,by 飞天飘渺.

Eigen入门教程

发表于 2019-11-27

Eigen是用于线性代数的C ++模板库,包括矩阵,向量,数值求解器和相关算法。

安装

从Eigen官网下载最新的Eigen版本。解压Eigen,然后使用Cmake进行配置并生成Visual Studio 15 2017的工程。打开解决方案,先生成ALL_BUILD工程,再生成INSTALL工程,则安装Eigen完毕。将在安装路径下生成Eigen的头文件。

当然也可以不编译安装,直接将Eigen源代码目录下的Eigen子目录复制到Include文件夹即可。

示例

运行时推断矩阵尺寸示例

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
MatrixXd m = MatrixXd::Random(3,3);
m = (m + MatrixXd::Constant(3,3,1.2)) * 50;
cout << "m =" << endl << m << endl;
VectorXd v(3);
v << 1, 2, 3;
cout << "m * v =" << endl << m * v << endl;
}

编译时确定矩阵尺寸示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
	
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
Matrix3d m = Matrix3d::Random();
m = (m + Matrix3d::Constant(1.2)) * 50;
cout << "m =" << endl << m << endl;
Vector3d v(1,2,3);

cout << "m * v =" << endl << m * v << endl;
}

参考链接

  1. Getting started,by eigen home.

太阳位置及辐射强度等属性的计算方法

发表于 2019-11-26

太阳位置是从地球表面观察时,太阳在天空中的位置,它是时间和地理位置两者的函数。计算给定地点和时间的太阳位置要经过下列三个步骤:

  • 计算太阳在黄道坐标系的位置
  • 转换到赤道坐标系统
  • 依据观测者的位置和时间,转换到地平坐标系

计算太阳黄道坐标的方法

黄道坐标系是以黄道作基准平面的天球坐标系统,多用作研究太阳系天体运动情况之用。如图1所示。

黄道坐标系

图1 黄道坐标系

黄道是由地球上观察太阳一年中在天球上的视运动所通过的路径,若以地球“不动”作参照的话就是太阳绕地球公转的轨道平面(黄道面)在天球上的投影。

黄道与天赤道相交于两点:春分点与秋分点(这两点称二分点);而黄道对应的两个几何极是北黄极(在天龙座)、与南黄极 (在剑鱼座)。

在黄道上与黄道平行的小圆称黄纬,符号β,以由黄道面向北黄极方向为正值(0°至90°),向南黄极方向则为负值。垂直黄道的经度称黄经,符号为λ,由春分点起由西向东量度(0°至360°)。像赤道坐标系中的赤经一样,以春分点做为黄经的起点。

此坐标系特别适合标示太阳系内天体的位置,大多数行星(水星和冥王星除外)与许多小行星轨道平面与黄道的倾角都很小,故其黄纬值(β)都不大。

太阳黄道坐标的近似计算方法如下:

先计算与格林尼治 2000.0年1月1日中午12:00(历元)相距的日数。如果你知道儒略日,则你的叙述会如下:

$$ n = \mathrm{JD} - 2451545.0 $$

以光行差修正太阳的平黄经,如下:

$$ L = 280.460^\circ + 0.9856474^\circ n $$

太阳的平近点角(实际上,是地球在轨道上绕着太阳,但是假设太阳绕着地球比较方便)如下:

$$ g = 357.528^\circ + 0.9856003^\circ n $$

根据需要将L和g多次加或减360°,让数值的范围调整到0°至 360°之间。

最后,太阳的黄经是:

$$ \lambda = L + 1.915^\circ \sin g + 0.020^\circ \sin 2g$$

太阳的黄纬是:

$$ \beta = 0 $$

太阳的黄纬不超过0.00033,

并且从太阳到地球的距离,以天文单位度量是:

$$ R = 1.00014 - 0.01671 \cos g - 0.00014 \cos 2g $$

计算太阳赤道坐标的方法

赤道坐标系统是使用得最广泛的天球坐标系统,他的元素是:

  • 赤纬($\delta$)
  • 赤经($\alpha$ )-也记为RA

他与地理坐标系统非常相似,因为两者使用相同的基准平面和相同的极点。地球的赤道在天球上的投影就称为天球赤道,相同的,地理极点在天球上的投影就是天极,如图2所示。

赤道坐标系

图2 赤道坐标系

在经过一夜或数个夜晚,就能看出来星星在天空中的位置移动了,当然,这并非恒星在天球上的运动,只是地球运动造成的。因为岁差和章动的影响,在相当长的时间间隔下所做的观测,就必须注明所使用的特殊历元,为行星、恒星、星系等等的位置做记录。现在使用的历元是J2000.0分点,稍早期使用的是B1950.0分点。

赤道坐标系统中与纬度相似的值是赤纬(缩写为Dec.),是天体在天球赤道上方或下方的角度。与经度对应的是赤经(缩写为RA),是与春分点的角度距离,不同于经度的是赤经以时、分、秒为单位,而非度、分、秒。

$\lambda$、$\beta$ 和 $R$ 构成太阳在黄道座标完整的位置。通过黄赤交角 $ε$ 的计算可以转换成赤道座标,计算方法如下:

赤经:

$$ \alpha = \arctan(\cos \epsilon \tan \lambda)$$

赤纬:

$$ \delta = \arcsin(\sin \epsilon \sin \lambda)$$

其中,黄赤交角不是固定不变的,它目前的值接近:

$$ \epsilon = 23.439^\circ - 0.0000004^\circ n $$

计算太阳地平坐标的方法

地平坐标系,又作地平座标系,是天球坐标系统中的一种,以观测者所在地为中心点,所在地的地平线作为基础平面,将天球适当的分成能看见的上半球和看不见(被地球本身遮蔽)的下半球。上半球的顶点(最高点)称为天顶,下半球的顶点(最低点)称为地底。如图3所示。

地平坐标系

图3 地平坐标系

地平坐标系统是:

  • 高度角(Altitude, Alt)或仰角又称地平纬度,是天体和观测者所在地的地平线的夹角,有时就称为高度或海拔标高(elevation, geometric height)。
  • 方位角(Azimuth, Az)又称地平经度,是沿着地平线测量的角度(由正北方为起点向东方测量)。

因此地平坐标系有时也被称为高度/方位(Alt/Az)坐标系统。

只要知道观测者的地理坐标与时间,就可以将地平坐标转换成赤道坐标,或是反过来将赤道坐标转换成地平坐标。(纬度在北极点是+90°,在赤道是0°,南极点是-90°。)

在数学公式中,以$A$代表方位,$a$代表高度。

以$\delta$ 表示赤纬,$H$ 表示时角。 $φ$ 为观测者所在地的纬度。

赤道坐标转为地平坐标的计算方法如下:

$$\sin a=\sin \phi \cdot \sin \delta +\cos \phi \cdot \cos \delta \cdot \cos H$$

$${\displaystyle \cos A\cdot \cos a=-\cos \phi \cdot \sin \delta +\sin \phi \cdot \cos \delta \cdot \cos H}$$

$${\displaystyle \sin A\cdot \cos a=\cos \delta \cdot \sin H}$$

有些人或许会试图将最后两个公式相除来加以简化,以消除$\cos a$,而只剩下$\tan A$。但是正切函数不能清楚的区别出象限,例如45°和225°是完全不同的方位,分别指向相对的东北方和西南方。

时角(HA)是天文学的名词,一个天体的时角被定义为该天体的赤经与当地的恒星时的差值。 在天文学和天文航海中,时角是在赤道坐标系中用于给出天球上点的方向的坐标之一。 一个点的时角是两个平面之间的角度:一个平面包含地轴和天顶(子午面),另一个平面是穿过该点与极点(地轴)的球面大圆切圆所形成的平面(赤经圈)。如图4所示。

时角

图3 时角

时角由天赤道平面上的橙色箭头指示。 箭头自天球天赤道的子午面至观测目标所在面的球面大圆处结束,该球面大圆也是赤经圈
时角由子午线确定,遵循的规则是在子午线的东边则为负时角,在子午线的西边则为正时角,或者向西为正的360度,时角与经度的换算方法为24h = 360°。

一个天体的时角表示该天体是否通过了当地的子午圈(中天)。其数值则表示了该天体与当地子午圈的角距离,并借用时间的单位,以小时来计量(1HA = 15度)。例如,一个天体的时角是2.5HA,就表示他已经在2.5个小时之前通过当地的子午圈,并且在当地子午圈的西方37.5度的距离上。负数则表示在多少小时之后将通过当地的子午圈。当然,当时角为0时的意思就是这个天体就在当地的子午圈上。

参考链接

  1. 太阳位置,by wikipedia.
  2. 儒略日,by wikipedia.
  3. 黄道坐标系,by wikipedia.
  4. 赤道坐标系统,by wikipedia.
  5. 地平坐标系,by wikipedia.
  6. 时角,by wikipedia.

经纬高与北天东坐标之间的转换方法

发表于 2019-11-16 | 更新于 2022-09-11

经纬高是地理坐标系的表示方法,北天东则是一种直角坐标系。它们之间通过直角坐标系原点的经纬度联系起来,并可相互转换。下面介绍它们之间的转换方法。

坐标系分类

目前常用的坐标系统分成两种:地理坐标系和直角坐标系。下面分别介绍这两种坐标系。

地理坐标系

地理坐标系一般是指由经度、纬度和相对高度组成的坐标系,能够标示地球上的任何一个位置。经度和纬度常合称为经纬度,把球面上的经纬度显示在平面地图上需要采用某种地图投影。

地理坐标系的用途很广泛,例如天文学上常用的黄道坐标系、赤道坐标系同样也是一种地理坐标系。

直角坐标系

笛卡尔坐标系(英语:Cartesian coordinate system,也称直角坐标系)在数学中是一种正交坐标系,由法国数学家勒内·笛卡尔引入而有此名。

二维的直角坐标系通常由两个互相垂直的坐标轴设定,通常分别称为x-轴和 y-轴;两个坐标轴的相交点,称为原点,通常标记为O,既有“零”的意思,又是英语“Origin”的首字母。每一个轴都指向一个特定的方向。这两个不同线的坐标轴,决定了一个平面,称为xy-平面,又称为笛卡尔平面。通常两个坐标轴只要互相垂直,其指向何方对于分析问题是没有影响的,但习惯性地,x-轴被水平摆放,称为横轴,通常指向右方;y-轴被竖直摆放而称为纵轴,通常指向上方。两个坐标轴这样的位置关系,称为二维的右手坐标系,或右手系。

直角坐标系也可以推广至三维空间与高维空间 (higher dimension)。在原本的二维直角坐标系,再添加一个垂直于x-轴,y-轴的坐标轴,称为z-轴。假若,这三个坐标轴满足右手定则,则可得到三维的直角坐标系。这z-轴与x-轴,y-轴相互正交于原点。在三维空间的任何一点P,可以用直角坐标${\displaystyle (x,\ y,\ z)}$来表达其位置。

直角坐标系的用途非常广泛。例如天文学上常用的赤道直角坐标系、地平坐标系是一种直角坐标系。地心地固坐标系、北天东坐标系、北东地坐标系都是一种直角坐标系。

转换方法

经纬高与北天东的转换方法,通常通过地心地固坐标系作为中介进行转换。例如,经纬高转北天东,首先将经纬高转地心地固坐标系,再将地心地固坐标系转北天东坐标系。北天东转经纬高亦如此。

经纬高转地心地固坐标系

地心地固坐标系的示意图如图1所示。

地心地固坐标系

图1 地心地固坐标系

地心地固坐标系转北天东

参考链接

  1. 地心地固坐标系,by wikipedia.
  2. 地球椭球,by wikipedia.
  3. 椭球体的重要参数和公式,by 一灯.
  4. how do I translate of lon/lat coordinate by some N-E meters distance on earth surface?,by stackoverflow.
  5. 笛卡尔坐标系,by wikipedia.
  6. 地理坐标系,by wikipedia.
  7. ECEF坐标系,by 深_蓝.
  8. 空间参考系统,by wikipedia.
上一页1…313233…53下一页

Jack Huang

521 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse