//对轨迹中所有射线段的转角赋值 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; } } } } }
//更新一条轨迹每个射线段的偏转角 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; } } }