地理测绘基础知识(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.mzph.cn/news/68057.shtml

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

相关文章

Vulnstack----5、ATTCK红队评估实战靶场五

文章目录 一 环境搭建二 外网渗透三 内网信息收集3.1 本机信息收集3.2 域内信息收集 四 横向移动4.1 路由转发和代理通道4.2 抓取域用户密码4.3 使用Psexec登录域控4.4 3389远程登录 五、痕迹清理 一 环境搭建 1、项目地址 http://vulnstack.qiyuanxuetang.net/vuln/detail/7/ …

MySQL——MySQL的基础操作部分

使用命令行登录 mysql -u root -p 直接敲击回车后输入密码即可: 当看到出现“mysql>“的符号之后,就表示已经进入到了MySQL系统中,就可以输入My&#xf…

虚拟机(三)VMware Workstation 桥接模式下无法上网

目录 一、背景二、解决方式方式一:关闭防火墙方式二:查看桥接模式下的物理网卡是否对应正确方式三:查看物理主机的网络属性 一、背景 今天在使用 VMware Workstation 里面安装的 Windows 虚拟机的时候,发现虽然在 NAT 模式下可以…

【Electron将HTML项目打包成桌面应用exe文件】

目标:前端将静态页面文件夹所有页面打包成一个exe文件(不包含其它文件)可运行。 步骤 1、初始化 npm init此时项目多出一个package.json文件。 {"name": "my-electron-app","version": "1.0.0",…

动态规划:路径和子数组问题(C++)

动态规划:路径和子数组问题 路径问题1.不同路径(中等)2.不同路径II(中等)3.下降路径最⼩和(中等)4.地下城游戏(困难) 子数组问题1.最大子数组和(中等&#xf…

目标检测框架MMDetection训练自定义数据集实验记录

在上一篇博文中,博主完成了MMDetection框架的环境部署与推理过程,下面进行该框架的训练过程,训练的入口文件为tools/train.py,我们需要配置的内容如下: parser.add_argument(--config,default"/home/ubuntu/prog…

RuntimeError: ANTLR version mismatch

规则引擎源码: nemonik/Intellect: DSL and Rules Engine For Python (github.com) 运行程序 Example.py 时报错: RuntimeError: ANTLR version mismatch: The recognizer has been generated with API V0, but this runtime does not support this. …

vue+elementUI el-table实现单选

if (selection.length > 1) {this.$refs.table.clearSelection();this.$refs.table.toggleRowSelection(selection.pop());}

14.Redis 主从复制

Redis 主从复制 redis 主从复制配置 redis 主从复制启动 redis 主从复制断开 redis 主从复制主从复制构特点主从复制的拓扑结构一主一从⼀主多从树状主从 主从复制原理数据同步psync 运行流程全量复制流程部分复制流程实时复制 关于从节点何时晋升成主节点总结 redis 主从复制 …

动手学深度学习(四)多层感知机

目录 一、多层感知机的从零开始实现 1.1 初始化模型参数 1.2 实现Relu函数 1.3 实现模型 1.4 训练 二、多层感知机的简洁实现 2.1 实现模型 2.2 训练 三、模型选择 3.1 训练误差和泛化误差 3.2 验证数据集和测试数据集 3.3 过拟合和欠拟合 3.4 代码实现 3.4.1 生…

1801. 积压订单中的订单总数;1567. 乘积为正数的最长子数组长度;923. 三数之和的多种可能

1801. 积压订单中的订单总数 核心思想:维护一个最小堆sell和一个最大堆buy,然后模拟即可。 1567. 乘积为正数的最长子数组长度 核心思想:动态规划,z表示以当前数字num结尾的乘积为正的最长子数组长度,f表示以当前数字num结尾的乘…

汽车电子系统网络安全解决方案

声明 本文是学习GB-T 38628-2020 信息安全技术 汽车电子系统网络安全指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 汽车电子系统网络安全范围 本标准给出了汽车电子系统网络安全活动框架,以及在此框架下的汽车电子系统网络安全活动…

如何根据需求正确选择适合企业的CRM销售管理系统

现代企业的销售工作离不开使用各种各样的销售管理系统,随着互联网的发展,市面上出现了许多销售管理系统,那么销售管理系统哪种好呢?如何选择一款适合自己企业的CRM销售管理系呢?本文将从多个角度进行分析和比较为大家提…

使用Jekyll + GitHub Pages搭建个人博客

本文将介绍如何使用Jekyll搭建个人博客,并部署在GitHub Pages上。 1.简介 Jekyll是一个强大的静态网站生成器,可以将Markdown、HTML、Liquid模板等文件转换为静态网站。Jekyll支持模板引擎、主题、插件、集成GitHub Pages等特性,可以帮助用…

关于el-input和el-select宽度不一致问题解决

1. 情景一 单列布局 对于上图这种情况&#xff0c;只需要给el-select加上style"width: 100%"即可&#xff0c;如下&#xff1a; <el-select v-model"fjForm.region" placeholder"请选择阀门类型" style"width: 100%"><el-o…

OpenCV(十四):ROI区域截取

在OpenCV中&#xff0c;你可以使用Rect对象或cv::Range来截取图像的感兴趣区域&#xff08;Region of Interest&#xff0c;ROI&#xff09;。 方法一&#xff1a;使用Rect对象截取图像 Rect_(_Tp _x&#xff0c; _Tp _y&#xff0c; _Tp _width,_Tp _height) Tp:数据类型&…

LinkedList(3):并发异常

1 LinkedList并发异常 package com.example.demo;import java.util.Iterator; import java.util.LinkedList;public class TestLinkedList {public static void main(String[] args) {LinkedList linkedList new LinkedList(); //双向链表linkedList.add(11);linkedList.add(…

关于CICD流水线的前端项目运行错误,npm项目环境配置时出现报错:Not Found - GET https://registry.npm...

关于CICD流水线的前端项目运行错误&#xff0c;npm项目环境配置时出现报错&#xff1a;Not Found - GET https://registry.npm… 原因应该是某些jar包缓存中没有需要改变镜像将包拉下来 npm config set registry http://registry.npm.taobao.org npm install npm run build

IDEA中使用Git

参考文章 1. IDEA中配置Git 2 IDEA 中使用Git 2.1 拉取项目 选择File→New→Project from Version Control。 从码云&#xff0c;github中也都可以拉取&#xff0c;实际工作中可能存在于公司搭建的GitLab中。 复制此项目的git地址&#xff0c;填入URL&#xff0c;Director…

分布式事务学习笔记

MySQL事务 1、 MySQL事务隔离级别 读未提交 &#xff08;READ UNCOMMITTED&#xff09; &#xff08;存在脏读的问题&#xff09;读已提交&#xff08;READ COMMITTED&#xff09;可重复读&#xff08;REPEATABLE READ&#xff09;串行化&#xff08;SERIALIZABLE&#xff09;…