地理测绘基础知识(5) 照射计算下篇

在上一篇中,我们解决了照射计算的基本模型关系,并能够根据手电的位置指向,在地表求取光斑。但是,前文使用的是设置探针求取场强的点求取,对于绘制地表的等值线包络图、求取地表包线的具体解析情况,就不够用了。使用单点的方法计算量大,且步长不容易控制。

本文给出基于向量旋转与交汇的计算算法。代码参考 https://gitcode.net/coloreaglestdio/geocalc

1. 向量参数方程与椭球交点

对一个高度为H的标准椭球,其方程为:

x 2 ( a + H ) 2 + y 2 ( a + H ) 2 + z 2 ( b + H ) 2 = 1 \frac{x^2}{(a+H)^2}+\frac{y^2}{(a+H)^2}+\frac{z^2}{(b+H)^2}=1 (a+H)2x2+(a+H)2y2+(b+H)2z2=1

为了便于展开,设 G = 1 ( a + H ) 2 G=\frac{1}{(a+H)^2} G=(a+H)21 K = 1 ( b + H ) 2 K=\frac{1}{(b+H)^2} K=(b+H)21

假设ECEF一个空间向量为

T ⃗ = A + B t , C + D t , E + F t \vec T={A+Bt, C+Dt, E+Ft} T =A+Bt,C+Dt,E+Ft
大写的字母均为常数,t为参数方程的参数,则可以使用Octave的符号功能求取t与椭球的交点:

clc
clear
pkg load symbolic
G = sym('G');
K = sym('K');
A = sym('A');
B = sym('B');
C = sym('C');
D = sym('D');
E = sym('E');
F = sym('F');
t = sym('t');
T=solve(G*(A+B*t)^2 + G*(C+D*t)^2 + K*(E+F*t)^2==1,t);
latex(sym(T))

获得两个解为:

[ − A B G + C D G + E F K B 2 G + D 2 G + F 2 K − − A 2 D 2 G 2 − A 2 F 2 G K + 2 A B C D G 2 + 2 A B E F G K − B 2 C 2 G 2 − B 2 E 2 G K + B 2 G − C 2 F 2 G K + 2 C D E F G K − D 2 E 2 G K + D 2 G + F 2 K B 2 G + D 2 G + F 2 K − A B G + C D G + E F K B 2 G + D 2 G + F 2 K + − A 2 D 2 G 2 − A 2 F 2 G K + 2 A B C D G 2 + 2 A B E F G K − B 2 C 2 G 2 − B 2 E 2 G K + B 2 G − C 2 F 2 G K + 2 C D E F G K − D 2 E 2 G K + D 2 G + F 2 K B 2 G + D 2 G + F 2 K ] \left[\begin{matrix}- \frac{A B G + C D G + E F K}{B^{2} G + D^{2} G + F^{2} K} - \frac{\sqrt{- A^{2} D^{2} G^{2} - A^{2} F^{2} G K + 2 A B C D G^{2} + 2 A B E F G K - B^{2} C^{2} G^{2} - B^{2} E^{2} G K + B^{2} G - C^{2} F^{2} G K + 2 C D E F G K - D^{2} E^{2} G K + D^{2} G + F^{2} K}}{B^{2} G + D^{2} G + F^{2} K}\\- \frac{A B G + C D G + E F K}{B^{2} G + D^{2} G + F^{2} K} + \frac{\sqrt{- A^{2} D^{2} G^{2} - A^{2} F^{2} G K + 2 A B C D G^{2} + 2 A B E F G K - B^{2} C^{2} G^{2} - B^{2} E^{2} G K + B^{2} G- C^{2} F^{2} G K + 2 C D E F G K - D^{2} E^{2} G K + D^{2} G + F^{2} K}}{B^{2} G + D^{2} G + F^{2} K}\end{matrix}\right] [B2G+D2G+F2KABG+CDG+EFKB2G+D2G+F2KA2D2G2A2F2GK+2ABCDG2+2ABEFGKB2C2G2B2E2GK+B2GC2F2GK+2CDEFGKD2E2GK+D2G+F2K B2G+D2G+F2KABG+CDG+EFK+B2G+D2G+F2KA2D2G2A2F2GK+2ABCDG2+2ABEFGKB2C2G2B2E2GK+B2GC2F2GK+2CDEFGKD2E2GK+D2G+F2K ]

2. 向量的绕轴旋转

向量的绕轴旋转在绘制地表区域时非常有用。考虑很多方向图都是对称的,或者想控制投影仪上的画笔在地表绘制线条,则可以控制一个 HPR向量在 F ( α , β ) F(\alpha ,\beta) F(α,β) 底片上进行游动,其转换到ECEF下与椭球的交点就是投影的位置。

2使用这样的方法,我们可以快速生成复杂的图形。

罗德里格旋转公式(Rodrigues’ rotation formula):

v ⃗ ′ = v ⃗ cos ⁡ ( s i t a ) + ( 1 − cos ⁡ ( s i t a ) ) ⋅ ( k ⃗ ⊙ v ⃗ ) ⊙ k ⃗ + k ⃗ ⊗ v ⃗ ⋅ s i n ( s i t a ) ; \vec v'=\vec v \cos(sita) + (1-\cos(sita))\cdot(\vec k\odot \vec v)\odot \vec k + \vec k \otimes \vec v \cdot sin(sita); v =v cos(sita)+(1cos(sita))(k v )k +k v sin(sita);
其中,v 是被旋转的向量, k 是转轴。

相关函数:

/*!* \brief vec_rotation 罗德里格旋转公式(Rodrigues' rotation formula)* \param v		旋转前向量* \param k		旋转轴* \param sita  转角* \param res	旋转后向量* \param rad 弧度true/度 false*/
void vec_rotation(const double v[3],const double k[3],const double dsita, double res[3],const bool rad = false);/*!* \brief ellipsoid_intersections 求取过A的三维斜率为k的直线与椭球的交点。* \param A_ecef  A点的ECEF坐标* \param k  直线的单位矢量方向* \param H  椭球海拔* \param result  交点* \param pt  截距,即 A + kt 的 t* \return 交点个数。*/
int ellipsoid_intersections(const double A_ecef[3],const double k[3],const double H,double result[/*2*/][3],double *pt/*2*/ = nullptr);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/98186.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch,Logstash和Kibana安装部署(ELK Stack)

前言 当今数字化时代,信息的快速增长使得各类组织和企业面临着海量数据的处理和分析挑战。在这样的背景下,ELK Stack(Elasticsearch、Logstash 和 Kibana)作为一套强大的开源工具组合,成为了解决数据管理、搜索和可视…

石油化工智慧安监方案:TSINGSEE青犀视频AI智能识别安全生产风险预警平台建设

一、行业背景 石油化工生产存储企业属于高温、高压、易燃、易爆、有毒的危险行业,其生产装置大型化、密集化、生产工艺复杂、生产过程紧密耦合。随着互联网技术的发展,运用先进的AI、物联网、大数据、云计算等技术手段不断提高石油化工行业的安全监管水…

mysql 的增删改查以及模糊查询、字符集语句的使用

一、mysql启动与登陆(windows下的mysql操作) 1.启动mysql服务 net start mysql81 2.登陆mysql mysql -uroot -p 3.查看所有数据库 show databases; 二、模糊查询(like) 1. _代表查询单个 2.%代表查询多个 3.查找所有含有schema的数据库;…

指向任意节点的带环链表

🌈图示指向任意节点的带环链表 如图: 🌈快慢指针法判断链表是否带环 🌟思路:快指针fast一次走2步,慢指针slow一次走1步,fast先进环在换中运动,随后slow进入环。两指针每同时移动…

Qt/C++音视频开发49-推流到各种流媒体服务程序

一、前言 最近将推流程序完善了很多功能,尤其是增加了对多种流媒体服务程序的支持,目前支持mediamtx、LiveQing、EasyDarwin、nginx-rtmp、ZLMediaKit、srs、ABLMediaServer等,其中经过大量的对比测试,个人比较建议使用mediamtx和…

Python虚拟环境venv下安装playwright介绍及记录

playwright介绍 Playwright是一个用于自动化Web浏览器测试和Web数据抓取的开源库。它由Microsoft开发,支持Chrome、Firefox、Safari、Edge和WebKit浏览器。Playwright的一个主要特点是它能够在所有主要的操作系统(包括Windows、Linux和macOS&#xff09…

大模型重塑区域人才培养,飞桨(重庆)人工智能教育创新中心正式启动

2023年8月22日,重庆市高校人工智能产教融合院长研讨会暨飞桨(重庆)人工智能教育创新中心启动仪式在重庆大学成功召开。会上,由百度飞桨、重庆大学组织重庆市二十一所高校共建的飞桨(重庆)人工智能教育创新中…

【UE】Texture Coordinate 材质节点

目录 一、简介 二、属性介绍 (1)参数:U平铺 (2)参数:V平铺 (3)参数:解除镜像U (4)参数:解除镜像V 三、 节点构成原理 四、初级…

文件夹改名利器!批量随机重命名并自定义长度

你是否曾经为如何快速有效地重命名多个文件夹而感到困扰?我们为您带来了一款强大的文件夹改名工具,让您轻松实现批量随机重命名,并自定义长度,让您的文件夹管理更加高效便捷 首先第一步,我们要打开文件批量改名高手并登…

网络协议从入门到底层原理学习(二)—— Mac地址/IP地址

文章目录 网络协议从入门到底层原理学习(二)—— Mac地址/IP地址1、MAC地址2、MAC地址的表示格式3、MAC地址表4、MAC地址操作5、MAC地址的获取6、ARP7、ICMP8、IP地址9、IP地址的分类和格式10、不同分类的IP地址的范围11、特殊 IP 地址12、子网掩码13、子…

<图像处理> 可分离滤波器核

可分离滤波器核 空间滤波器核是一个二维矩阵,若它能够表示为两个一维矩阵的乘积时,则表示该滤波器核是可分离的。 例如,一个3x3的核, w [ 1 1 1 1 1 1 1 1 1 ] w\begin{bmatrix} 1 & 1 & 1\\ 1 & 1& 1\\ 1 &am…

macOS通过钥匙串访问找回WiFi密码

如果您忘记了Mac电脑上的WiFi密码,可以通过钥匙串访问来找回它。具体步骤如下: 1.打开Mac电脑的“启动台”,然后在其他文件中找到“钥匙串访问”。 2.运行“钥匙串访问”应用程序,点击左侧的“系统”,然后在右侧找到…