float GetFollowerIDMAcc(IDMInfo myIDMInfo, DriverBehavior followingDriver) { if (myIDMInfo.followingS <= 0) { return(-Algebra.Infinity); } float desiredDist = followingDriver.s0 + Mathf.Max(0f, myIDMInfo.followingV * followingDriver.T + myIDMInfo.followingV * myIDMInfo.followingDeltaV / (2 * Mathf.Sqrt(followingDriver.a * followingDriver.b))); return(followingDriver.a * (1f - Mathf.Pow(myIDMInfo.followingV / followingDriver.v0, followingDriver.delta) - Mathf.Pow(desiredDist / myIDMInfo.followingS, 2))); }
float GetFollowerIDMAccWithoutMe(IDMInfo myIDMInfo, DriverBehavior followingDriver) { IDMInfo partialInfoForFollower = new IDMInfo { laneNo = myIDMInfo.laneNo, leadingS = myIDMInfo.followingS + myIDMInfo.leadingS, leadingV = myIDMInfo.leadingV, myV = myIDMInfo.followingV }; return(GetIDMAcc(partialInfoForFollower, followingDriver)); }
float GetIDMAcc(IDMInfo iDMInfo, DriverBehavior driver) { if (iDMInfo.leadingS <= 0) { //if would collide return(-Algebra.Infinity); } float desiredDist = driver.s0 + Mathf.Max(0f, iDMInfo.myV * driver.T + iDMInfo.myV * iDMInfo.deltaV / (2 * Mathf.Sqrt(driver.a * driver.b))); return(driver.a * (1f - Mathf.Pow(iDMInfo.myV / driver.v0, driver.delta) - Mathf.Pow(desiredDist / iDMInfo.leadingS, 2))); }
void InitDictionary() { driverActivities = new Dictionary <string, DriverActivity>(); driverBehaviors.ForEach(d => { string className = d.GetType().Name; DriverActivity activity = new DriverActivity(); activity.behaviorName = d.behaviorName; driverActivities.Add(className, activity); d.maxValueChanged.AddListener(args => { DriverBehavior driverBehavior = (DriverBehavior)args.sender; activity.maxValue = driverBehavior.maxValue; }); d.minValueChanged.AddListener(args => { DriverBehavior driverBehavior = (DriverBehavior)args.sender; activity.minValue = driverBehavior.minValue; }); d.avgValueChanged.AddListener(args => { DriverBehavior driverBehavior = (DriverBehavior)args.sender; activity.avgValue = driverBehavior.avg; }); d.ErrorOccurred.AddListener(args => { DriverBehavior driverBehavior = (DriverBehavior)args.sender; activity.missteps.Add(new DriverMisstep(driverBehavior.CurrentValue, driverBehavior.diffValue, new Vector3(0, 0, 0), Quaternion.identity)); activity.errorsCount = driverBehavior.errorsCount; }); }); }