Commit 53eba445 by lyc

更新了月球轨道

parent 22c07ef0
// 太空任务
import vueCodeMoonTrack from '@/examples/spaceMissions/moonTrack/moonTrack.vue?raw'
// 测站
import vueCodeAddStation from '@/examples/measureStation/addStation/addStation.vue?raw'
import vueCodeStationCoordinate from '@/examples/measureStation/stationCoordinate/stationCoordinate.vue?raw'
......@@ -29,6 +32,10 @@ import vueCodeWaterSurface from '@/examples/weather/waterSurface/waterSurface.vu
const vueCodeMap = {
// 太空任务
月球轨道: vueCodeMoonTrack,
// 测站
添加测站: vueCodeAddStation,
测站坐标系: vueCodeStationCoordinate,
......
//太空任务
import functionCodeMoonTrack from '@/examples/spaceMissions/moonTrack/moonTrack-function.js?raw'
// 测站
import functionCodeAddStation from '@/examples/measureStation/addStation/addStation-function.js?raw'
import functionCodeStationCoordinate from '@/examples/measureStation/stationCoordinate/stationCoordinate-function.js?raw'
......@@ -29,6 +32,9 @@ import functionCodeWaterSurface from '@/examples/weather/waterSurface/waterSurfa
const functionCodeMap = {
// 太空任务
月球轨道: functionCodeMoonTrack,
// 测站
添加测站: functionCodeAddStation,
测站坐标系: functionCodeStationCoordinate,
......
export function addMoonTrack() {
const script = document.createElement('script');
script.src = 'https://cesium.com/downloads/cesiumjs/releases/1.99/Build/Cesium/Cesium.js';
script.onload = () => {
window.Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3Njg4ZWU5Yi1iZDhiLTRhYmUtOTRiYS04YjM5NmUwNjVmMDMiLCJpZCI6MjI3MzQ3LCJpYXQiOjE3MjA1MjA4Mjh9.E5XW4LnwgfVAaBC-znaYr61m4yK0-j2qEQhi9qwFFPE'
const viewer = new window.Cesium.Viewer('cesiumContainer', {
infoBox: false,
});
var start = new Cesium.JulianDate.fromDate(new Date());
start = Cesium.JulianDate.addHours(start, 8, new Cesium.JulianDate());
var stop = Cesium.JulianDate.addDays(start, 27.321582, new Cesium.JulianDate());
viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
viewer.clock.multiplier = 1;
viewer.timeline.zoomTo(start, stop);
const inclination = Cesium.Math.toRadians(28.5); // 轨道倾角(以弧度表示)
const semiMajorAxis = 38440000; // 半长轴(米),大约为月球到地球的平均距离
// const period = 27.321582 * 24 * 60 * 60; // 月球的公转周期(秒)
const period = 50 ;
// 定义轨道上的点数
const numberOfPoints = 1000;
function createMoonOrbit(inclination, semiMajorAxis, period, numberOfPoints) {
const positions = [];
// 计算每个点的位置
for (let i = 0; i < numberOfPoints; i++) {
const meanAnomaly = (2 * Math.PI / period) * (i * period / numberOfPoints); // 平均异常
const trueAnomaly = meanAnomaly; // 简化处理,假设轨道是圆的
const radius = semiMajorAxis; // 圆轨道的半径等于半长轴
// 计算笛卡尔坐标
const x = radius * Math.cos(trueAnomaly);
const y = radius * Math.sin(trueAnomaly) * Math.cos(inclination);
const z = radius * Math.sin(trueAnomaly) * Math.sin(inclination);
// 将笛卡尔坐标转换为经纬度坐标
const cartographic = Cesium.Cartographic.fromCartesian(Cesium.Cartesian3.fromElements(x, y, z));
// 添加到位置数组
positions.push(cartographic);
}
return positions;
}
// 创建轨道路径
const moonOrbitPositions = createMoonOrbit(inclination, semiMajorAxis, period, numberOfPoints);
// 将轨道位置转换为Cartesian3坐标
const cartesianPositions = moonOrbitPositions.map(position => Cesium.Cartesian3.fromRadians(position.longitude, position.latitude, position.height));
// 创建SampledPositionProperty
const orbitPosition = new Cesium.SampledPositionProperty();
for (let i = 0; i < numberOfPoints; i++) {
const time = Cesium.JulianDate.addSeconds(viewer.clock.startTime, i * period / numberOfPoints, new Cesium.JulianDate());
orbitPosition.addSample(time, cartesianPositions[i]);
}
const moonEntity = viewer.entities.add({
name: 'Moon',
availability: new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
start: start,
stop: stop
})]),
position: orbitPosition,
orientation: new Cesium.VelocityOrientationProperty(orbitPosition),
// 设置月球的形状
ellipsoid: {
radii: new Cesium.Cartesian3(1737400.0, 1737400.0, 1737400.0), // 月球的平均半径
material: new Cesium.ImageMaterialProperty({
image: "/src/image/moon1.jpg",
repeat: new Cesium.Cartesian2(1, 1)
})
},
// 显示月球的运动轨迹
path: {
resolution: 1,
material: new Cesium.PolylineGlowMaterialProperty({
glowPower: 0.1,
color: Cesium.Color.PINK
}),
width: 5
}
});
// 设置插值选项
moonEntity.position.setInterpolationOptions({
interpolationDegree: 5,
interpolationAlgorithm: Cesium.LagrangePolynomialApproximation
});
};
document.head.appendChild(script);
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'https://cesium.com/downloads/cesiumjs/releases/1.119/Build/Cesium/Widgets/widgets.css';
document.head.appendChild(link);
}
<template>
<div id="cesiumContainer" class="cesium-container"></div>
</template>
<script setup>
import { onMounted } from 'vue';
import { addMoonTrack } from './function';
onMounted(() => {
addMoonTrack()
});
</script>
<style>
.cesium-container {
width: 100%;
height: 100vh;
}
</style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment