原项目代码类图

各类文件解析(按难度排序)


  1. Point (坐标类,使用经度,维度用来表示一个点)





Point.h


  1. #


  2. pragma once class Point {


  3. public: Point(double longitude, double latitdue);


  4. bool operator == (Point & point);


  5. private: double longitude; //经度


  6. double latitude; //纬度


  7. };


    1. Road(道路类,使用两个点来表示一条道路)




    Road.h


  8. #


  9. pragma once# include “stdafx.h”#


  10. include “Point.h”#


  11. include “Vehicle.h”#


  12. include “TrafficLight.h”#


  13. include “BitMatrix.h”#


  14. define R 6378 //地球的平均半径


  15. # define PI 3.14# define LANNE_AMOUNT 3 //每条道路的车道数量


  16. # define MIN_VEHICLE 10 //初始状态每条道路的最少车辆


  17. # define VEHICLE_SIZE 70 class Vehicle;


  18. class TrafficLight;


  19. class Road {


  20. public: Road(double longitude1, double latitude1, double longitude2, double latitude2): point1(longitude1, latitude1), point2(longitude2, latitude2) {


  21. length = R 2 asin(sqrt(pow(sin((latitude1 / 180 PI - latitude2 / 180 PI) / 2), 2) + cos(latitude1 / 180 PI) cos(latitude2 / 180 PI) pow(sin((longitude1 / 180 PI - longitude2 / 180 PI) / 2), 2))); //计算道路长度


  22. }


  23. bool operator == (Road & road); //用于判断两条道路是否相连


  24. double countVehicleDensity(void); //计算行车密度, 行车密度 = 车辆数 / (道路长度(km) 车道数)


  25. double countCrowdExtent(void); //计算道路拥挤度


  26. double returnLength(void); //返回道路长度


  27. bool enterVehicle(void); //当前道路是否能进车


  28. void updateVehicle(vector < Road > & road); //更新当前道路的车辆


  29. void creatVehicle(int roadSize, int totalRoadSize, BitMatrix & roadBitMatrix, vector < Road > & road); //为该道路生成车辆


  30. void enterVehicle(Vehicle & vehicle); //进入车辆


  31. void updateTrafficLight(void); //更新当前道路的交通灯


  32. / 计算拥挤度的公式: crowdExtent = 0.15 exp(-0.0322 vehicleDensity) - 0.15 (vehicleDensity <= 45.5) crowdExtent = 0.111 vehicleDensity - 0.0152 (vehicleDensity > 45.5) /


  33. vector < int > adjoin; //存储相连的道路编号 是否改成private?


  34. private: Point point1, point2; //道路的两个端点的经纬度


  35. double length, vehicleDensity, crowdExtent; //length为道路的长度,vehicleDensity为行车密度,crowdExtent为道路拥挤度


  36. list < Vehicle > vehicle; //当前道路的车辆表


  37. TrafficLight trafficLight; //交通灯用于控制车辆进入该道路


  38. int vehicleSize; //当前道路车辆数


  39. };

    分析与思考:存储相连采用向量方式?这样真的好吗?一条条道路判断相等再连接?