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);
}