【OMNET++】增强可视化仿真案例Canvas

1.简介

这个模型演示了Canvas API的使用。可以使用Canvas API用于增强仿真的可视化。

2.仿真拓扑

在这里插入图片描述

3.部分代码

class CarAnimator : public cSimpleModule
{
    private:
        simtime_t timeStep;
        simtime_t lastStep;
        Point loc;
        double speed;
        double heading;
        double angularSpeed;
        int targetPointIndex;
        double distanceTravelled;
        cPolygonFigure *road;
        cImageFigure *car;
        cFigure *antenna;
        cPolylineFigure *trail;
        cTextFigure *distanceDisplay;
        cTextFigure *headingDisplay;
    protected:
        virtual void initialize() override;
        virtual void handleMessage(cMessage *msg) override;
        virtual void refreshDisplay() const override;
        void refresh() const;
};

refresh():

void CarAnimator::refresh() const
{
    double t = (simTime() - lastStep) / timeStep;

    ASSERT(t >= 0);
    ASSERT(t <= 1);

    cFigure::Transform carTr;
    carTr.rotate(heading + angularSpeed * t);

    double distance = speed * t;
    carTr.translate(loc.x + distance * cos(heading), loc.y + distance * sin(heading));
    car->setTransform(carTr);

    cFigure::Transform antTr;
    antTr.rotate(-2 * simTime().dbl()*M_PI/180);
    antenna->setTransform(antTr);

    char buf[20];
    sprintf(buf, "%.0fm", distanceTravelled);
    distanceDisplay->setText(buf);

    int degrees = -int(heading*180/M_PI);
    degrees = degrees - 360 * (int)floor(degrees / 360.0);
    sprintf(buf, "%d\xC2\xB0", degrees);
    headingDisplay->setText(buf);
}

4.加入讨论在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值