轨迹的平滑移动

本文记录了在前端开发中,使用javascript和openlayers实现视频轨迹平滑移动的过程。通过视频时间和无人机轨迹点数据,结合BingMaps绘制轨迹。面对视频重播、进度拖动、倍速播放和网络卡顿等问题,进行了优化处理,确保轨迹平滑移动的效果。
摘要由CSDN通过智能技术生成

        本篇重在记录自己开发时遇到的问题和解决的思路,专业浓度不高,希望自己以后回头看,还能有收获,亦或有所感慨。内容如有错误欢迎指正,或里面的某些方法有更好的方案代替,欢迎讨论。

        2021.9月份底,有一份视频轨迹的需求,具体为:在视频播放的同时,左上角显示一个小地图,并且地图中有个点与视频中无人机位置同步移动。(类似于cs、cf那种显示位置的小地图),该视频是由无人机拍摄录制而成。

        地图使用了openlayers,由于最大的放大级数限制原因,这里需要比较大的地图放大级数,默认地图图层不适合,经过多次更换,最后选择了BingMaps。

layers: [
    new TileLayer({
        source: new source.BingMaps({
            key:"xxxxxxxx",
            imagerySet: "AerialWithLabelsOnDemand",
            culture: "zh-cn",
        }),
    }),
],

        接下来比较顺利,因为后台接口有无人机移动的轨迹点数据,每秒一个点,记录了经纬度、方向等数据。我只要获取了该无人机在该时间段的点集,再与视频同步就行。

        于是我先获取了对应数据,画出轨迹,因为视频用了videojs插件,所以我用里面的loadedmetadata方法获取了视频的长度,将视频时长0对应了第一个点&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QGraphicsPathItem 是 Qt 框架中用于绘制路径的图形项,它可以通过 QPainterPath 对象来设置路径,并在场景中进行显示。如果要实现平滑轨迹的绘制,可以考虑使用 QPainterPath 中的 cubicTo() 函数来生成三次贝塞尔曲线。 具体实现步骤如下: 1. 创建 QPainterPath 对象,并使用 moveTo() 函数将起始移动轨迹的起始位置。 2. 使用 cubicTo() 函数生成三次贝塞尔曲线,并将其添加到 QPainterPath 中。该函数接受四个参数:控制 1、控制 2、终坐标。 3. 将 QPainterPath 对象绑定到 QGraphicsPathItem 对象中,并将其添加到场景中。 下面是一个示例代码: ```python from PyQt5.QtCore import Qt, QPointF from PyQt5.QtGui import QPainterPath, QPen, QColor from PyQt5.QtWidgets import QGraphicsPathItem class SmoothPathItem(QGraphicsPathItem): def __init__(self, path, pen=QPen(QColor("black"), 2)): super().__init__() self.setPen(pen) self.setPath(path) def setPath(self, path): painter_path = QPainterPath() painter_path.moveTo(path[0]) for i in range(1, len(path) - 2): c1 = QPointF((path[i].x() + path[i+1].x()) / 2, (path[i].y() + path[i+1].y()) / 2) c2 = QPointF((path[i+1].x() + path[i+2].x()) / 2, (path[i+1].y() + path[i+2].y()) / 2) painter_path.cubicTo(c1, c2, path[i+1]) super().setPath(painter_path) ``` 在该示例代码中,SmoothPathItem 继承自 QGraphicsPathItem,同时重载了 setPath() 函数来实现平滑轨迹的绘制。该函数接受一个 QPointF 对象的列表作为参数,其中每个 QPointF 对象表示轨迹上的一个。 在 setPath() 函数中,首先创建了一个 QPainterPath 对象,并使用 moveTo() 函数将起始移动轨迹的起始位置。然后使用 cubicTo() 函数生成三次贝塞尔曲线,并将其添加到 QPainterPath 中。在生成三次贝塞尔曲线时,使用当前和相邻两个的中作为控制,从而实现平滑过渡。 最后,将生成的 QPainterPath 对象绑定到 QGraphicsPathItem 对象中,并将其添加到场景中。这样就可以在界面上显示平滑轨迹了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值