Cesium绘制抛物线

Cesium绘制抛物线

图片使用了动态线,具体看以下文章

https://everless.app/everless-net-drawing-dynamic-flowing-lines-in-cesium

实现代码

以下是一个用于绘制抛物线的函数,它接受起始点和终点的实体,然后根据这些信息绘制抛物线。

function createParabola(startEntity, endEntity) {
  // 从起始点和终点的位置获取Cartographic坐标
  var start = Cesium.Cartographic.fromCartesian(startEntity.position.getValue(viewer.clock.currentTime));
  var end = Cesium.Cartographic.fromCartesian(endEntity.position.getValue(viewer.clock.currentTime));

  // 抛物线的最大高度(单位:米)
  var maxHeight = Math.max(start.height, end.height) + 100000;

  // 起始点和终点之间的间距
  var distance = Cesium.Cartesian3.distance(start, end);

  // 计算抛物线的点
  var points = [];
  for (var i = 0; i <= 1; i += 0.01) {
    var position = new Cesium.Cartographic(
      Cesium.Math.lerp(start.longitude, end.longitude, i),
      Cesium.Math.lerp(start.latitude, end.latitude, i)
    );

    // 使用二次贝塞尔曲线公式计算高度
    var height = Math.pow((1 - i), 2) * start.height + 2 * (1 - i) * i * maxHeight + Math.pow(i, 2) * end.height;
    position.height = height;

    points.push(Cesium.Cartographic.toCartesian(position));
  }

  // 创建一条抛物线
  viewer.entities.add({
    name: '抛物线',
    polyline: {
      positions: points,
      width: 1,
      material: new PolylineTrailLinkMaterialProperty('./img/jianbian1.1.png', Cesium.Color.RED, 1000)
    }
  });
}

材质是可以随意替换的,这里用贝塞尔曲线计算的话会造成落点高度问题,即使用了二次贝塞尔曲线落点也会出现高度问题,目前不清楚是什么原因造成的(数学不好)

给TA打赏
共{{data.count}}人
人已打赏
Cesium

Cesium绘制动态线/流动线

2023-8-13 21:01:40

Cesium

Cesium绘制抛物线

2023-8-13 21:14:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索