MATLAB与STK互联:仿真并获取低轨卫星与指定区域地面站的可见性数据

MATLAB控制STK实现:仿真并获取低轨卫星与指定区域地面站的可见性数据

本次仿真主要参考了多篇文献和网站,包括但不限于:《Using MATLAB for STK Automation》、CSDN博文: 拜火先知的博客_CSDN博客-笔记、AGI官网有关MATLAB的内容等内容,学习后很有收获,在此写下学习记录。

文章目录

  • MATLAB控制STK实现:仿真并获取低轨卫星与指定区域地面站的可见性数据
    • 实验目的
    • MATLAB与STK互联并创建场景
    • 创建新卫星对象
      • 轨道类型设置
    • 创建均匀分布的目标接收机
      • 创建新的Facility并设置参数
      • 创建新的Sensor并设置参数
      • 创建新的Receiver并设置参数
      • 创建Access分析
    • 卫星相对于目标接收机的距离/速度/加速度/多普勒频率的计算
      • 使用STK逐一计算方法
      • 使用MATLAB自动化获取report
    • 使用MATLAB自动化获取report
      • 计算卫星可见性次数
      • 获取卫星可见性数据
    • 实验结果
      • MATLAB结构体数据
    • 实验效果视频
    • 实验代码

实验目的

使用MATLAB控制STK,实现如下功能:

  • 生成1颗LEO卫星或产生一个LEO星座
  • 在指定的区域内均匀分布目标接收机,指定区域大小为100km或500km
  • 通过STK的access分析低轨卫星在过顶时,卫星相对于目标接收机的距离/速度/加速度/多普勒频率(分辨率为10s)

MATLAB与STK互联并创建场景

MATLAB与STK互联,主要有两种方式,一种是connect、一种是com口。这里主要采用com口形式,要比connect连接简单一些。
在MATLAB命令窗口(或新建.m文件)输入以下命令:

%这里改成自己STK的版本号
uiapplication = actxserver(‘STK11.application’);

键入下面的代码以创建具有自定义时间段的新场景。

%root是以后操作场景以及场景中对象的源头
root = app.Per	sonality2;
%新建场景
scenario = root.Children.New('eScenario','MATLAB_PredatorMission');
%将场景保存在指定目录下,同时可以将场景重新命名
root.SaveScenarioAs('E:\Program Files\STK\Documents\STK 11 (x64)\Scenario1_jz2');
scenario.SetTimePeriod('2 Jun 2022 16:00:00.000','3 Jun 2022 16:00:00.000');
scenario.StartTime = '2 Jun 2022 16:00:00.000';
scenario.StopTime = '3 Jun 2022 16:00:00.000';
root.ExecuteCommand('Animate * Reset');

创建新卫星对象

以下代码,将新建卫星对象。控制句柄为sat

%mysat是卫星在STK场景中的名字
sat = scenario.Children.New(‘eSatellite’,'mysat');
%执行下面命令,也可建立卫星。因为‘eSatellite’枚举序号为18
%sat = scenario.Children.New(18,‘mysat’);
%执行Propagate命令后,卫星将运行,即在STK中可以看到卫星运行轨迹
sat.Propagator.Propagate;

关于STK卫星对象属性值的设置,参见MATLAB与STK互联5:查看STK中对象的属性(2)—卫星对象属性梳理1_拜火先知的博客-CSDN博客

在新建卫星对象后,直接执行:sat.Propagate语句,会生成STK默认参数的卫星。默认参数为:倾角28.5°,轨道高度300km的圆轨道,动力学模型为二体模型。
我们在分析问题时,绝大多数情况下都不会使用上述的默认参数,这就涉及到卫星轨道参数设置。卫星轨道参数设置,也存在多种方法,下面介绍:设置经典的轨道六根数。

%将卫星轨道参数转换为开普勒六根数形式
kep=satPro.InitialState.Representation.ConvertTo(‘eOrbitStateClassical’);
%卫星轨道参数设置,可选择的形式有以下几种
%eOrbitStateClassical—经典轨道六根数形式
%eOrbitStateCartesian—位置、速度信息形式
%其他形式,大家可根据STK属性页查看,命名规则大致如上

下面是卫星参数设置,是本文重点

轨道类型设置

kep.SizeShapeType = 'eSizeShapeAltitude';

这里轨道形状类型,可以查看STK卫星轨道属性页面,有如下参数:

eSizeShapeSemimajorAxis—半长轴+偏心率型
eSizeShapeAltitude—远地点、近地点高度型
eSizeShapeRadius—远地点、近地点半径型
eSizeShapePeriod—轨道周期型
eSizeShapeMeanmotion—平动型

+++

LocationType:用于指定航天器在epoch轨道上的位置的元素

Orientation:轨道方向

kep.LocationType = 'eLocationTrueAnomaly';
kep.Orientation.AscNodeType = 'eAscNodeLAN';

+++

SizeShape:轨道的大小和形状

Orientation:轨道方向

Orientation.ArgOfPerigee:在卫星运动方向和轨道平面上,从上升节点到偏心矢量(轨道最低点)的角度。使用角维度。

Orientation.Inclination:轨道倾角。角动量矢量(垂直于轨道平面)和惯性Z轴之间的角。使用角维度。

kep.SizeShape.PerigeeAltitude = 500;
kep.SizeShape.ApogeeAltitude = 500;
kep.Orientation.Inclination = 60;
kep.Orientation.ArgOfPerigee = 0;
kep.Orientation.AscNode.Value = 0;
kep.Location.Value = 0;

+++

显示卫星轨迹

sat.Propagator.InitialState.Representation.Assign(kep);
sat.Propagator.Propagate;
image-20220605185848825

通过matlab运行后,STK生成的“mysat”卫星如图。

创建均匀分布的目标接收机

在一个指定的目标区域内,按照每隔0.5个经度和0.5个纬度(每个约50km分布一个监测站),均匀分布着多个Facility、Sensor、Receiver(由于输出多普勒频率只能用transmitter到receiver,所以需要在Facility上附着Sensor和Receiver),这三者属于附着关系,Receiver附着在Sensor上,Sensor附着在Facility上。

首先附上生成的结果图,由图知,监测站等距离均匀地分布在一个正方形区域内,每隔约50km分布一个。

image-20220605190632678

具体创建流程如下:

创建新的Facility并设置参数

首先需要进行for循环,在经纬度方向上个循环10次,也就是说一共在方圆500km内建立100个监测站。root.CurrentScenario.Children.New是建立一个新的Facility。

for Lat=0:9
    for lon=0:9
        facility = root.CurrentScenario.Children.New('eFacility', ['MyFacility',num2str(lon),num2str(Lat)]);

接着对Facility设置参数,值得一提的是,在对Facility进行位置定义时,facility.Position.AssignGeodetic每次增加0.5个经度/纬度。

    facility.Position.AssignGeodetic(41.9849+Lat*0.5,120.4039+lon*0.5,0) % Latitude, Longitude, Altitude
    % Set altitude to height of terrain
    facility.UseTerrain = true;
    % Set altitude to a distance above the ground
    facility.HeightAboveGround = .05; % km

创建新的Sensor并设置参数

创建新的Sensor的语句是:

sensor = facility.Children.New('eSensor',['MySensor',num2str(lon),num2str(Lat)]);

我们发现,如果单纯用该语句,那么sensor的视图会很难看,因此,我们需要关闭这个sight,但是由于找不到如何关闭,所以,只能接下来设置一下Constraints了,将Sensor的range_Max设置为0.

image-20220605191856095

故代码如下:

senConstraints = sensor.AccessConstraints;
        altitude = senConstraints.AddConstraint('eCstrRange');%file:///E:/Program%20Files/AGI/STK%2011/Help/Programming/index.htm#DocX/STKObjects~IAgSensor.html?Highlight=sensor.AccessConstraints
        altitude.EnableMax = true;
        altitude.Max = 0;
        % 可算出来了,设置了sensor的Constraints中的Range参数,让他为0,这样sensor就不会是个圆锥型了
        % IAgAccessConstraintCollection Collection
        % 对于sensor常规参数的修改,参考网址是:file:///E:/Program%20Files/AGI/STK%2011/Help/Programming/index.htm#DocX/STKObjects~IAgAccessConstraintCollection.html?Highlight=eCstrLunarElevationAngle%20eCstrLighting
        %STK开发如果没有头绪,一个是查帮助,另一个就是用get、invoke查看相关信息。所以,可以上get

代码不多,但是很费力地才运行成功。

创建新的Receiver并设置参数

设置Receiver的最大接收范围是5000km,仰角为5°

		receiver = sensor.Children.New('eReceiver', ['MyReceiver',num2str(lon),num2str(Lat)]);
        %设置地面站约束
        facConstraints = receiver.AccessConstraints;
        %设置最大距离约束
        rangeCstr = facConstraints.AddConstraint('eCstrRange');
        rangeCstr.EnableMax = 1;
        rangeCstr.Max = 2000;
        %设置仰角约束
        elevationCstr = facConstraints.AddConstraint('eCstrElevationAngle');
        elevationCstr.EnableMin = 1;
        elevationCstr.Min = 5;

创建Access分析

        sat2rec=receiver.GetAccessToObject(Transmitter);
        sat2rec.ComputeAccess;
    end
end

最终生成的结果如下,视频中所展示的那样

<video id=“video” controls=""src=“https://pdswsj.oss-cn-beijing.aliyuncs.com/img/20220605_193050.mp4” preload=“none”>

卫星相对于目标接收机的距离/速度/加速度/多普勒频率的计算

获取的方法包括使用STK逐一计算和使用MATLAB自动化获取两种方法

使用STK逐一计算方法

选择:Analysis-Access,在Access for中选择“mysat”,任意选择一个MyFacility,这里拟选择“MyFacility00”,然后单击“Report & Graph Manager…”,在右边“Styles”中选择AER,可以生成详细报告和图表

image-20220605194445561

image-20220605194512589

此外,选择任意transmitter和receiver还可以产生多普勒频率的仿真值,使用的是“Link Budget - detailed”这个Styles

image-20220605194719304

如上图所示。

使用MATLAB自动化获取report

正在学习,下周更新……

——————————————————————————————————————
更新:

使用MATLAB自动化获取report

实现MATLAB自动化需要以下几步:

计算卫星可见性次数

使用前文定义的sat2fac对象,根据STK提供的接口(IAgStkAccess Interface):

 			acc_interval = sat2fac.ComputedAccessIntervalTimes;
            %可见次数如下
            count=acc_interval.Count;

计算出在一天时间内卫星可见次数。

获取卫星可见性数据

可见性数据包括各个时刻(分辨率为10秒),卫星相对于地面站的仰角,距离等要素。

			acc.AER(lon*10+Lat).result(1,:)={'Time' 'azimuth' 'range'};
            sum=0;
            for i=0:count-1
                [str,sto] = acc_interval.GetInterval(i);
                %结合上篇博文,获取第一个可见弧段内的方位角
                aerDP = sat2fac.DataProviders.Item('AER Data').Group.Item('VVLH CBF').Exec(str,sto,10);
                azimuth = cell2mat(aerDP.DataSets.GetDataSetByName('Azimuth').GetValues);
                range = cell2mat(aerDP.DataSets.GetDataSetByName('Range').GetValues);
                time = aerDP.DataSets.GetDataSetByName('Time').GetValues;
                len=length(range);
                for j=1:len
                    acc.AER(lon*10+Lat).result(j+1+sum,:)={time(j) azimuth(j) range(j)};
                end
                sum=sum+len;
            end

实验结果

MATLAB结构体数据

我们讲个地面站与卫星的参数保存为一个结构体,字段1代表Facility01地面站相对于卫星Sat的各个可见时刻的数据信息。如图所示:

image-20220608210756252

该图就是Facility01地面站相对于卫星Sat的各个可见时刻的具体数据信息。

image-20220612181420914

实验效果视频

实验全流程视频如下

<video id=“video” controls=""src=“https://pdswsj.oss-cn-beijing.aliyuncs.com/img/20220612_181543.mp4” preload=“none”>

实验代码

写了一晚上程序,可以实现这个目标了,先附上最终代码

clear all
clc
app = actxserver('STK11.application');
root = app.Personality2;
scenario = root.Children.New('eScenario','MATLAB_PredatorMission');
root.SaveScenarioAs('E:\Program Files\STK\Documents\STK 11 (x64)\Scenario1_jz2');
scenario.SetTimePeriod('2 Jun 2022 16:00:00.000','3 Jun 2022 16:00:00.000');
scenario.StartTime = '2 Jun 2022 16:00:00.000';
scenario.StopTime = '3 Jun 2022 16:00:00.000';
root.ExecuteCommand('Animate * Reset');
%facility = scenario.Children.New('eFacility','GroundStation'); 
% areaTarget = root.CurrentScenario.Children.New('eAreaTarget', 'MyAreaTarget');
% root.BeginUpdate();
% areaTarget.AreaType = 'eEllipse';
% ellipse = areaTarget.AreaTypeData;
% %ellipse.Add(48.897, 18.637);
% ellipse.SemiMajorAxis = 85.25; % in km (distance dimension)
% ellipse.SemiMinorAxis = 85.25; % in km (distance dimension)
% ellipse.Bearing = 44; % in deg (angle dimension)
% root.EndUpdate();
sat = scenario.Children.New(18,'mysat');
kep = sat.Propagator.InitialState.Representation.ConvertTo('eOrbitStateClassical');
kep.SizeShapeType = 'eSizeShapeAltitude';
kep.LocationType = 'eLocationTrueAnomaly';
kep.Orientation.AscNodeType = 'eAscNodeLAN';
kep.SizeShape.PerigeeAltitude = 500;
kep.SizeShape.ApogeeAltitude = 500;
kep.Orientation.Inclination = 60;
kep.Orientation.ArgOfPerigee = 0;
kep.Orientation.AscNode.Value = 0;
kep.Location.Value = 0;
sat.Propagator.InitialState.Representation.Assign(kep);
sat.Propagator.Propagate;
sensor = sat.Children.New('eSensor','MySensor_sat');
Transmitter = sensor.Children.New('eTransmitter', 'Mytransmitter');
Transmitter.SetModel('GPS Satellite Transmitter Model');
%建立卫星对象,并设置参数
% satellite = root.CurrentScenario.Children.New('eSatellite', 'MySatellite');
% scenPath = 'E:\Program Files\STK\Documents\STK 11 (x64)\Scenario1_learn3';
% satelliteFilePath = [scenPath '\ISS_25544.sa'];
% satellite.ExportTools.GetEphemerisStkExportTool.Export(satelliteFilePath);

% IAgFacility facility: Facility Object
for Lat=0:9
    for lon=0:9
        if lon~=0 | Lat~=0
            facility = root.CurrentScenario.Children.New('eFacility', ['MyFacility',num2str(lon),num2str(Lat)]);
            facility.Position.AssignGeodetic(41.9849+Lat*0.5,120.4039+lon*0.5,0) % Latitude, Longitude, Altitude
            % Set altitude to height of terrain
            facility.UseTerrain = true;
            % Set altitude to a distance above the ground
            facility.HeightAboveGround = .05; % km
            sensor = facility.Children.New('eSensor',['MySensor',num2str(lon),num2str(Lat)]);
            %         pattern1 = sensor.Pattern;
            %         sensor.FieldOfView
            senConstraints = sensor.AccessConstraints;
            altitude = senConstraints.AddConstraint('eCstrRange');%file:///E:/Program%20Files/AGI/STK%2011/Help/Programming/index.htm#DocX/STKObjects~IAgSensor.html?Highlight=sensor.AccessConstraints
            altitude.EnableMax = true;
            altitude.Max = 0;
            % 可算出来了,设置了sensor的Constraints中的Range参数,让他为0,这样sensor就不会是个圆锥型了
            % IAgAccessConstraintCollection Collection
            % 对于sensor常规参数的修改,参考网址是:file:///E:/Program%20Files/AGI/STK%2011/Help/Programming/index.htm#DocX/STKObjects~IAgAccessConstraintCollection.html?Highlight=eCstrLunarElevationAngle%20eCstrLighting
            %STK开发如果没有头绪,一个是查帮助,另一个就是用get、invoke查看相
            %关信息。所以,上get
            %         pattern1.ConeAngle = 85;
            receiver = sensor.Children.New('eReceiver', ['MyReceiver',num2str(lon),num2str(Lat)]);
            %设置地面站约束
            facConstraints = receiver.AccessConstraints;
            %设置最大距离约束
            rangeCstr = facConstraints.AddConstraint('eCstrRange');
            rangeCstr.EnableMax = 1;
            rangeCstr.Max = 2000;
            %设置仰角约束
            elevationCstr = facConstraints.AddConstraint('eCstrElevationAngle');
            elevationCstr.EnableMin = 1;
            elevationCstr.Min = 5;
            sat2fac=sat.GetAccessToObject(facility);
            sat2fac.ComputeAccess;
            %         aerDP = sat2fac.DataProviders.Item('AER Data').Group.Item('VVLH CBF').Exec(scenario.StartTime,scenario.StopTime,60);
            %         azimuth = cell2mat(aerDP.DataSets.GetDataSetByName('Range').GetValues);
            acc_interval = sat2fac.ComputedAccessIntervalTimes;
            %可见次数如下
            count=acc_interval.Count;
            %可见的弧段起始时间列表
            %acc_interval.ToArray(0,-1)
            %str、sto分别是第一个弧段的起始时间,是字符串类型。
            acc.AER(lon*10+Lat).result(1,:)={'Time' 'azimuth' 'range'};
            sum=0;
            for i=0:count-1
                [str,sto] = acc_interval.GetInterval(i);
                %结合上篇博文,获取第一个可见弧段内的方位角
                aerDP = sat2fac.DataProviders.Item('AER Data').Group.Item('VVLH CBF').Exec(str,sto,10);
                azimuth = cell2mat(aerDP.DataSets.GetDataSetByName('Azimuth').GetValues);
                range = cell2mat(aerDP.DataSets.GetDataSetByName('Range').GetValues);
                time = aerDP.DataSets.GetDataSetByName('Time').GetValues;
                len=length(range);
                for j=1:len
                    acc.AER(lon*10+Lat).result(j+1+sum,:)={time(j) azimuth(j) range(j)};
                end
                sum=sum+len;
            end
        end
    end
end

% satellite = root.GetObjectFromPath('/Satellite/mysat');
% receiver = root.GetObjectFromPath('/Facility/MyFacility99');
% senConstraints = sensor.AccessConstraints;
% altitude = senConstraints.AddConstraint('eCstrAltitude');%file:///E:/Program%20
% % Files/AGI/STK%2011/Help/Programming/index.htm#DocX/STKObjects~IAgSensor.html?Highlight=sensor.AccessConstraints
% altitude.EnableMax = true; 
% altitude.Max = 2;
% AER()
% 对于sensor常规参数的修改,参考网址是:file:///E:/Program%20Files/AGI/STK%2011/Help/Programming/index.htm#DocX/STKObjects~IAgAccessConstraintCollection.html?Highlight=eCstrLunarElevationAngle%20eCstrLighting


各个站点的结果输出在了一个结构体中,每个结构体包含以下三种元素(time azimuth range),其中range就是星地间距离,可以作为整个系统的 输出。数据保存在这个链接,下载即可查看https://pdswsj.oss-cn-beijing.aliyuncs.com/img/matlab.mat

image-20220608210844209

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用Python设置、更新和获取Excel单元格的值

Excel工作簿作为一款广泛使用的数据管理工具&#xff0c;与Python相结合&#xff0c;可以使得自动化处理大量数据成为可能。通过Python来设置、更新以及读取Excel单元格的值&#xff0c;不仅可以极大地提高工作效率&#xff0c;减少重复劳动&#xff0c;还能增强数据处理流程的…

Golang | Leetcode Golang题解之第525题连续数组

题目&#xff1a; 题解&#xff1a; func findMaxLength(nums []int) (maxLength int) {mp : map[int]int{0: -1}counter : 0for i, num : range nums {if num 1 {counter} else {counter--}if prevIndex, has : mp[counter]; has {maxLength max(maxLength, i-prevIndex)} …

提升网站安全性 HTTPS的重要性与应用指南

内容概要 在如今数字化快速发展的时代&#xff0c;网站安全显得尤为重要。许多用户在访问网站时&#xff0c;尤其是涉及个人信息或金融交易时&#xff0c;对数据传输的安全性有着高度的关注。HTTPS&#xff08;超文本传输安全协议&#xff09;正是为了满足这种需求而诞生的。通…

DICOM标准:解析DICOM属性中的病人模块

目录 病人模块概述 1. 病人关系模块&#xff08;Patient Relationship Module&#xff09; 2. 病人识别模块&#xff08;Patient Identification Module&#xff09; 3. 病人统计模块&#xff08;Patient Demographic Module&#xff09; 4. 病人医学模块&#xff08;Pati…

编写高性能爬虫抓取股票行情数据

最近给一个私募大佬帮忙做了一些股票交易有关的系统&#xff0c;其中涉及到行情数据抓取的问题&#xff0c;一番摸索之后&#xff0c;把成果在这里做个分享。 我把行情抓取的部分&#xff0c;和一个写手记的小功能&#xff0c;单独拿了出来放在一个小系统里面&#xff0c;可以…

人像摄影笔记(自用)

相机的原理&#xff1a;镜头--CMOS传感器---通过ISP的计算 然后通过手机的GPU处理后呈现出图片的形式 镜头&#xff1a;定焦和变焦&#xff0c;变焦分为光学变焦和数字变焦 光学变焦&#xff1a;焦距变了 画质不变 数字变焦&#xff1a;焦距不变 裁剪画质 数字变焦一…

前端埋点与监控最佳实践:从基础到全流程实现.

前端埋点与监控最佳实践&#xff1a;从基础到全流程实现 大纲 我们会从以下三个方向来讲解埋点与监控的知识&#xff1a; 什么是埋点&#xff1f;什么是监控&#xff1f; JS 中实现监控的核心方案 写一个“相对”完整的监控实例 一、什么是埋点&#xff1f;什么是监控&am…

电能质量治理产品在分布式光伏电站的应用

1.概述 随着全球对可再生能源需求的不断增长&#xff0c;分布式光伏电站的建设与扩张正迅速发展。然而&#xff0c;在其运行过程中&#xff0c;分布式光伏电站遭遇了一系列挑战&#xff0c;包括企业关口计量点功率因数降低和谐波污染等问题。这些问题不仅影响了光伏电站的运行…

遥感图像Trento原始数据集下载

遥感图像Trento原始数据集下载 偶然间在某个项目里发现了Trento的完整数据集&#xff0c;不过那个数据集有些奇怪的小改动 虽然我已经不做遥感方向了&#xff0c;不过当初我找这个数据集也是花了很长时间 于是重新整理了一下&#xff0c;就当是方便后来的研究者使用吧 githu…

GenAI 生态系统现状:不止大语言模型和向量数据库

自 20 个月前 ChatGPT 革命性的推出以来&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;领域经历了显著的发展和创新。最初&#xff0c;大语言模型&#xff08;LLMs&#xff09;和向量数据库吸引了最多的关注。然而&#xff0c;GenAI 生态系统远不止这两个部分&#…

个人应用接入使用阿里云盘和百度网盘

一、阿里云盘 官方文档接入流程 语雀流程概述服务端 API 调用流程如下图所示1. 创建账...https://www.yuque.com/aliyundrive/zpfszx/btw0tw 1. 接入授权 1.1. App Key、App Secret和用户授权验证 在通过网盘开发者认证之后&#xff0c;创建个人应用会生成APP ID&#xff…

医院信息化与智能化系统(15)

医院信息化与智能化系统(15) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…

从比亚迪超越特斯拉,看颠覆全球市场的中国力量

这是比亚迪CEO王传福早年在日本调研电池供应链时发出的感慨。 那时的人们谁也没有想到&#xff0c;比亚迪会从深圳的一家普通的电池供应商开始做起&#xff0c;拼出一条属于自己的“血路”&#xff0c;摇身一变成为名副其实的“电车之王”&#xff0c;并让全球车企仰望。 比亚…

3d 添加辅助坐标器和轨道控制器

1.添加辅助坐标器 使用AxesHelper类来添加坐标轴辅助器&#xff0c;辅助器简单模拟3个坐标轴的对象。红色代表X轴&#xff0c;绿色代表Y轴&#xff0c;蓝色代表Z轴。 // 创建坐标轴辅助器&#xff0c;5是坐标轴的长度 const axesHelper new THREE.AxesHelper(5); // 将坐标轴…

「C/C++」C++标准库之#include<fstream>文件流

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

计算机后台服务-更新下载,重启————未来之窗行业应用跨平台架构

一在教育中应用 1. 提高效率&#xff1a;能够快速收集大量学生的卷子&#xff0c;节省了传统人工收集和整理的时间。 2. 准确性&#xff1a;减少了人工收卷过程中可能出现的错漏和混乱&#xff0c;确保每份卷子都能准确无误地被收集和记录。 3. 即时性&#xff1a;可以实时接收…

奥数与C++小学四年级(第十八题 小球重量)

参考程序代码&#xff1a; #include <iostream> #include <vector>int main() {// 小球的重量std::vector<int> weights {1, 2, 3, 4, 5};// 用来存储可能的结果int a, b, c, d, e, x;// 穷举所有可能的 a, b, c, d, e 的组合for (int i 0; i < weight…

Android启动流程_Init阶段

前言 本文将会介绍 Android 启动流程&#xff0c;将基于 Android 10 代码逻辑介绍原生启动过程。 bootloader 上电 -> 加载 recovery 镜像或者 boot 镜像 -> linux kernel 启动 -> 加载 init 进程 -> 加载 zygote 进程 -> systemserver 进程 -> 系统启动 …

线上3D看车有何优势?

随着Web3D展示技术的不断革新&#xff0c;线上3D看车正逐步成为消费者购车的新选择。这种创新的展示方式不仅提供了更真实、更有趣的互动体验&#xff0c;还带来了诸多优势&#xff0c;让购车过程变得更加便捷、高效。 一、更真实的展示效果 相较于传统的图片和文字描述&…

OpenCv —— 为opencv支持中文,将freetype2库编译进opencv中(附详细编译流程、测试代码)

效果(下面摄像头视频过于老旧 视频效果不好;但文字可添加。) 背景 由于OpenCV本身不支持中文显示,开发者需要借助其他库来实现这一功能。 OpenCV的contrib版本中包含了freetype库,可以通过编译opencv-contrib模块来支持中文显示。这种方法需要在编译OpenCV时特别配置,确保…