//对轨迹中所有射线段的转角赋值
 public void calcDefAngle(ref Dictionary <string, TrajInfo> rayDic)
 {
     foreach (string key in rayDic.Keys)
     { //遍历每个栅格
         TrajInfo trajsOfGrid = rayDic[key];
         // 遍历每个栅格内轨迹
         foreach (int trajId in trajsOfGrid.traj.Keys)
         {
             RayInfo curTraj = trajsOfGrid.traj[trajId];
             // 遍历每个轨迹的射线段
             for (int j = 0; j < curTraj.rayList.Count; ++j) // 对于一条轨迹中的每条射线
             {
                 NodeInfo nodeCur = curTraj.rayList[j];      //当前射线段
                 if (j == 0)
                 {
                     nodeCur.DefAngle = -1;//如果是轨迹的第一条射线段,那么肯定是直射线,转角赋默认值-1
                 }
                 else
                 {
                     NodeInfo    nodeBef  = curTraj.rayList[j - 1];//前一条射线段
                     NewVector3D vecBef   = new NewVector3D(nodeBef.PointOfIncidence, nodeBef.CrossPoint);
                     NewVector3D vecCur   = new NewVector3D(nodeCur.PointOfIncidence, nodeCur.CrossPoint);
                     double      defAngle = vecBef.calcDefAngle(ref vecCur);
                     nodeCur.DefAngle = defAngle;
                 }
             }
         }
     }
 }
Esempio n. 2
0
 //更新一条轨迹每个射线段的偏转角
 private void updateDefAngle()
 {
     // 遍历每个轨迹的射线段
     for (int j = 0; j < rayList.Count; ++j) // 对于一条轨迹中的每条射线
     {
         NodeInfo nodeCur = rayList[j];      //当前射线段
         if (j == 0)
         {
             nodeCur.DefAngle = -1;//如果是轨迹的第一条射线段,那么肯定是直射线,转角赋默认值-1
         }
         else
         {
             NodeInfo    nodeBef  = rayList[j - 1];//前一条射线段
             NewVector3D vecBef   = new NewVector3D(nodeBef.PointOfIncidence, nodeBef.CrossPoint);
             NewVector3D vecCur   = new NewVector3D(nodeCur.PointOfIncidence, nodeCur.CrossPoint);
             double      defAngle = vecBef.calcDefAngle(ref vecCur);
             nodeCur.DefAngle = defAngle;
         }
     }
 }